gem5中指令的执行过程和实现?

问题描述

我正在学习gem5上程序的运行过程。并读一些书。但是我仍然对程序执行中的各个部分感到困惑。我的理解是否正确?

  1. 首先,将计算机指令放在ICache中,然后 计算机CPU控制指令的提取,然后将 将指令提取到指令队列中。然后拿 来自指令队列的指令并解码指令 进入微操作。这些微操作将发送到 重新排序缓冲区。如果重新排序缓冲区中的微操作是 加载/存储,它将被发送到加载/存储队列。如果是 加减法等操作,将直接发送 到执行单元。在此过程中,每个执行单元都有一个 为寄存器重命名保留的站。当微操作是 完成后,它将返回到重新排序缓冲区。当微 操作到达重新排序缓冲区的开头,可以写入 返回到CPU外部的缓存或内存。
  2. 加载队列将从缓存中获取数据。缓存是 通常是虚拟地址索引和物理地址标签。的 加载操作将从缓存中并行获取并执行 虚拟地址转换。如果缓存未命中,则加载操作 将发送给MSHR。 MSHR将获取的数据发送到内存。如果 数据在内存中,首先将数据提取到Cache中, 然后将获取的数据返回到MSHR,然后返回 到加载队列。如果数据不在内存中,则执行 系统将发出页面错误,然后将获取数据 从硬盘到内存,从缓存中获取,然后 返回到MSHR,然后返回到加载队列。

问题:

  1. 微操作在解码时是否涉及诸如mov和add之类的操作?
  2. 指令发布是否涉及发送到 重新排序缓冲区或从重新排序缓冲区发送到执行 单元?指令解码后,会直接发送到重新排序缓冲区吗?
  3. 调度和发布是否指的是同一过程?
  4. 我还看到了一些队列,例如浮点数队列或其他队列。这是否指的是当指令从重排序缓冲区发送到执行单元时由于执行单元不足而临时存储指令的位置?这些队列是否与Tomasulo算法中的预留站引用相同的内容?

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...