现代计算中的存储程序计算机
Stored Program Computer in modern computing
我在测验中得到了这个确切的问题。
问题
回答
这个问题有意义吗?我的理解是 OS 调度一个进程并管理它需要处理器接下来执行的指令。这是因为 OS 容易使用各种内存管理技巧,尤其是在碎片化是一种生活方式的主内存中。我记得处理器上应该有一个叫做程序计数器的特殊寄存器。鉴于 OS 完成的调度程序和内存管理,我很难弄清楚该寄存器的用途,除非它仅用于 OS。存储程序计算机的概念真的与现代计算机的运行方式相关吗?
硬件在程序计数器的地址处从主内存获取机器代码(它在指令执行时自行递增,或者通过执行跳转或调用指令进行修改)。
软件必须将代码加载到 RAM(主内存)中,并在其程序计数器指向该内存的情况下启动进程。
是的,如果 OS 想要将该内存分页到磁盘(或首先延迟加载),当 CPU 尝试获取时,硬件将触发页面错误来自未映射页面的代码。
但是不,OS 不会 一次向 CPU 提供指令。
(除非您在调试程序时将 CPU 置于“单步”模式,然后返回到该进程的 user-space,因此它会在执行一条指令后陷入困境。就像 x86 的陷阱例如标志。一些 ISA 只有软件断点,不支持单步执行的硬件。)
但是无论如何,OS 本身是由运行 CPU 的机器代码组成的。 CPU 硬件知道如何从内存中获取和执行指令。 OS 只是一个可以加载和管理其他程序的奇特程序。 (请记住,在冯诺依曼架构中,代码就是数据。)
甚至 OS 也必须依赖于处理架构。今天的内存经常被虚拟化。这意味着程序看到的内存位置不是真正的物理位置,而是由一个或多个描述内存访问实际位置和一些属性(例如 read/write/execute 允许或不允许)的表间接确定的。如果访问的虚拟内存还没有加载到主内存中(这些表是这样说的),就会产生一个异常,异常处理程序的地址被加载到程序计数器中。此异常处理程序由 OS 并驻留在主内存中。所以程序计数器与今天的计算机非常相关,但是下一条指令可以通过异常(在抢占式多任务系统中也称为线程或进程切换的异常)动态更改。
Does the question make any sense?
是的。对于我,这说得通。有点不精确,但每个选项的含义都非常不同,可以说 D) 是最佳答案。
(理论上,您可以创建一台冯·诺依曼计算机,它能够在辅助存储、寄存器甚至互联网之外执行指令……但由于各种原因,这是非常不切实际的。 )
My understanding is that the OS schedules a process and manages what instructions it needs the processor to execute next. This is because the OS is liable to pull all sorts of memory management tricks, especially in main memory where fragmentation is a way of life.
主内存的碎片实际上并不相关。现代机器使用特殊硬件(和页面 tables)来处理这个问题。从执行代码(应用程序或内核)的角度来看,这都是隐藏的。代码使用虚拟地址,硬件将它们映射到物理地址。 (在处理页面错误时甚至如此,尽管将特别注意确保页面错误处理程序的代码和页面 table 条目位于永远不会换出的 RAM 页面中。)
I remember that there is supposed to be a special register on the processor called the program counter. In light of the scheduler and memory management done by the OS I have trouble figuring out the purpose of this register unless it is just for the OS.
PC 是基础。它包含 CPU 将要执行的下一条指令的虚拟内存地址。对于应用程序代码和 OS 内核代码。当您在应用程序和内核代码之间切换时,PC 中的值作为 上下文切换 .
的一部分进行更新
Is the concept of the Stored Program Computer really relevant to how a modern computer operates?
是的。除非你在一个特殊的定制机器上工作,(比如说)程序已经被转换成定制芯片。
我在测验中得到了这个确切的问题。
问题
回答
这个问题有意义吗?我的理解是 OS 调度一个进程并管理它需要处理器接下来执行的指令。这是因为 OS 容易使用各种内存管理技巧,尤其是在碎片化是一种生活方式的主内存中。我记得处理器上应该有一个叫做程序计数器的特殊寄存器。鉴于 OS 完成的调度程序和内存管理,我很难弄清楚该寄存器的用途,除非它仅用于 OS。存储程序计算机的概念真的与现代计算机的运行方式相关吗?
硬件在程序计数器的地址处从主内存获取机器代码(它在指令执行时自行递增,或者通过执行跳转或调用指令进行修改)。
软件必须将代码加载到 RAM(主内存)中,并在其程序计数器指向该内存的情况下启动进程。
是的,如果 OS 想要将该内存分页到磁盘(或首先延迟加载),当 CPU 尝试获取时,硬件将触发页面错误来自未映射页面的代码。
但是不,OS 不会 一次向 CPU 提供指令。
(除非您在调试程序时将 CPU 置于“单步”模式,然后返回到该进程的 user-space,因此它会在执行一条指令后陷入困境。就像 x86 的陷阱例如标志。一些 ISA 只有软件断点,不支持单步执行的硬件。)
但是无论如何,OS 本身是由运行 CPU 的机器代码组成的。 CPU 硬件知道如何从内存中获取和执行指令。 OS 只是一个可以加载和管理其他程序的奇特程序。 (请记住,在冯诺依曼架构中,代码就是数据。)
甚至 OS 也必须依赖于处理架构。今天的内存经常被虚拟化。这意味着程序看到的内存位置不是真正的物理位置,而是由一个或多个描述内存访问实际位置和一些属性(例如 read/write/execute 允许或不允许)的表间接确定的。如果访问的虚拟内存还没有加载到主内存中(这些表是这样说的),就会产生一个异常,异常处理程序的地址被加载到程序计数器中。此异常处理程序由 OS 并驻留在主内存中。所以程序计数器与今天的计算机非常相关,但是下一条指令可以通过异常(在抢占式多任务系统中也称为线程或进程切换的异常)动态更改。
Does the question make any sense?
是的。对于我,这说得通。有点不精确,但每个选项的含义都非常不同,可以说 D) 是最佳答案。
(理论上,您可以创建一台冯·诺依曼计算机,它能够在辅助存储、寄存器甚至互联网之外执行指令……但由于各种原因,这是非常不切实际的。 )
My understanding is that the OS schedules a process and manages what instructions it needs the processor to execute next. This is because the OS is liable to pull all sorts of memory management tricks, especially in main memory where fragmentation is a way of life.
主内存的碎片实际上并不相关。现代机器使用特殊硬件(和页面 tables)来处理这个问题。从执行代码(应用程序或内核)的角度来看,这都是隐藏的。代码使用虚拟地址,硬件将它们映射到物理地址。 (在处理页面错误时甚至如此,尽管将特别注意确保页面错误处理程序的代码和页面 table 条目位于永远不会换出的 RAM 页面中。)
I remember that there is supposed to be a special register on the processor called the program counter. In light of the scheduler and memory management done by the OS I have trouble figuring out the purpose of this register unless it is just for the OS.
PC 是基础。它包含 CPU 将要执行的下一条指令的虚拟内存地址。对于应用程序代码和 OS 内核代码。当您在应用程序和内核代码之间切换时,PC 中的值作为 上下文切换 .
的一部分进行更新Is the concept of the Stored Program Computer really relevant to how a modern computer operates?
是的。除非你在一个特殊的定制机器上工作,(比如说)程序已经被转换成定制芯片。