当CPU和进程所看到的指令顺序有何不同?

时间:2019-02-11 11:35:47

标签: operating-system

这是我到目前为止可以收集到的内容,可能过于简单了:

  • CPU根据指令指针获取下一条要执行的指令,这是当前正在运行的进程的一部分。因此,CPU实际上没有指令序列的概念,它只知道当前要执行的指令。
  • 属于某个进程的指令保存在其.text段中。因此,进程可以读取其指令列表(?)。进程可以修改其指令指针

现在我还不太清楚如何解决标题中的问题。除了我提到的内容之外,还有没有我在概念上有所不同?

2 个答案:

答案 0 :(得分:0)

内存中包含数据。如何解释该数据取决于处理器如何访问它。内存中的同一位置可以解释为指令,整数,字符或浮点数。

唯一使存储器位置成为指令的是程序计数器寄存器指向它。 CPU在程序计数器的位置获取数据。然后执行指令。程序计数器必须知道该指令有多长,并且除非是分支指令,否则必须将该长度加到PC上。

大多数处理器允许将内存页面标记为不执行/执行。

链接器将在可执行文件中设置PC的初始值。除此之外,通常没有什么可以说“这就是指令”。

答案 1 :(得分:0)

  

当CPU和进程所看到的指令顺序有何不同?

这看起来像一个家庭作业问题,其预期答案取决于提出该问题之前提出的内容。

随机假设示例:

  • 如果课程讨论的是乱序执行,那么答案可能是这样的:“进程认为指令按给定的顺序一次发生,而CPU知道指令不会一次发生。时间,不要按照给定的顺序进行。”

  • 如果本课程讨论的是Lisp机器,那么答案可能是“进程认为其指令已执行,但实际上它们被解释或翻译为完全不同的指令,并且该进程看到的指令与CPU看到的指令”

  • 如果该课程讨论调度,那么答案可能是“进程认为它是唯一执行的指令,但CPU可能会定期在许多独立进程的指令流之间进行切换”。

  • 如果这门课程是关于SMT的,那么答案可能是“ CPU从2个(或更多)不同的进程中提取指令,并将它们全部推到执行的管道中,然后找出哪条指令来自哪里最后;流程不知道这种情况正在发生”。

  • 如果本课程讨论虚拟内存管理,那么答案可能是“进程认为访问虚拟内存的指令访问RAM,但CPU可能不执行该指令,并且可能会产生页面错误,以使OS进行大量操作。这个过程不知道的花哨技巧”