现代计算中的存储程序计算机

问题描述

我在测验中得到了这个确切的问题。

问题

enter image description here

答案

enter image description here

这个问题有意义吗?我的理解是,操作系统可以调度进程并管理下一步需要处理器执行的指令。这是因为OS易于使用各种内存管理技巧,尤其是在存在碎片的生活方式的主内存中。我记得应该在处理器上有一个特殊的寄存器,称为程序计数器。根据操作系统完成的调度程序和内存管理,我很难弄清楚该寄存器的用途,除非它仅用于操作系统。存储程序计算机的概念真的与现代计算机的运行方式相关吗?

解决方法

硬件从程序计数器中的地址处的主存储器中获取机器代码(随着指令的执行,其自身增加,或者通过执行跳转或调用指令对其进行修改)。

软件必须将代码加载到RAM(主存储器)中,并以其程序计数器指向该存储器的方式启动该过程。

是的,如果操作系统想要将内存分页到磁盘上(或首先将其延迟加载),则当CPU尝试从未映射的页面中获取代码时,硬件将触发页面错误。

但是不,操作系统一次一次向CPU提供指令。

(除非您正在通过返回到该进程的用户空间时将CPU置于“单步”模式来调试程序,所以它会在执行一条指令后进行陷阱。例如,类似于x86的陷阱标志。仅某些ISA有软件断点,而不是硬件对单步的支持。)

但是无论如何,操作系统本身是由在CPU上运行 的机器代码组成的。 CPU硬件知道如何从内存中获取和执行指令。操作系统只是可以加载和管理其他程序的高级程序。 (请记住,在冯·诺依曼体系结构中,代码就是数据。)

,

即使OS必须依赖于处理体系结构。如今,内存通常是虚拟化的。这意味着程序看到的内存位置不是实际的物理位置,而是由一个或多个描述内存位置的实际位置和一些属性(例如,是否允许读/写/执行)的表间接访问。如果所访问的虚拟内存尚未加载到主内存中(这些表表明如此),则会生成一个异常,并将异常处理程序的地址加载到程序计数器中。该异常处理程序由操作系统提供,位于主内存中。因此,程序计数器与当今的计算机非常相关,但是下一条指令可以通过异常(抢占式多任务系统中的线程或进程切换也称为异常)来动态更改。

,

这个问题有意义吗?

是的。对于我,这说得通。有点不精确,但是每种选择的含义都足够不同,可以说D)是最佳答案。

(从理论上讲,您可以创建一台冯·诺依曼计算机,该计算机能够从二级存储,寄存器甚至互联网之外执行指令,但是由于各种原因,这是非常不切实际的。)

我的理解是,操作系统计划一个进程并管理下一步需要处理器执行的指令。这是因为OS易于使用各种内存管理技巧,尤其是在存在碎片化生活方式的主内存中。

主存储器的碎片实际上并不相关。现代机器使用特殊的硬件(和页表)进行处理。从执行代码(应用程序或内核)的角度来看,这都是隐藏的。该代码使用虚拟地址,并且硬件将其映射到物理地址。 (处理页面错误时,甚至是正确的,尽管将特别注意确保页面错误处理程序的代码和页面表条目位于永不换出的RAM页面中。)

我记得处理器上应该有一个称为程序计数器的特殊寄存器。根据操作系统完成的调度程序和内存管理,我很难弄清楚该寄存器的用途,除非它仅用于操作系统。

PC是基础。它包含CPU要执行的下一条指令的虚拟内存地址。对于应用程序代码,对于OS内核代码。当您在应用程序代码和内核代码之间切换时,PC中的值将作为上下文切换的一部分进行更新。

存储程序计算机的概念真的与现代计算机的操作方式相关吗?

是的。除非您在特殊的定制计算机上工作(例如),程序已转换为定制硅片。