虚拟存储管理+地址变换+软考系统架构设计师

2011年系统架构设计师真题7题

7.虚拟存储器发生页面失效时,需要进行外部地址变换,即实现( )的变换。

A.虚地址到主存地址

B.主存地址到 Cache 地址

C.主存地址到辅存物理地址

D.虚地址到辅存物理地址

这个题比较坑,答案是D, 我们一步步分析:(如果仅仅了解页式存储管理,那么这题很容易就选A了)

虚拟存储器中,如果页面失效,会发生缺页中断,即访问的数据不在内存中,需要将磁盘中的数据加载到内存。这个过程中磁盘中的数据加载到内存,到底发生了什么?

有个大前提,缺页中断了,也就是我们要访问的数据不在内存中(不在“页表”中),如果内存已经满了,那么需要进行页面淘汰,并将所要访问的数据加载到淘汰页面的位置,如果内存没有满,那么就将所要访问的数据加载到内存的空闲位置。

1. 所要访问的数据加载到淘汰页面的位置

要淘汰内存中的页面,需要页面置换算法, 比如FIFO、LRU等,淘汰是直接清理掉吗?并非如此。要淘汰的时候,需要判断该页面的数据是否已经被修改了,如果被修改了,需要写回到磁盘。试想一下,如果不回写到磁盘,那么我们修改的数据是不是就永久的丢失了?

所以,内存中的页面被置换的时候,如果修改位为“1”,那么就要将数据回写。如何回写呢? 那是不是要找到该页面当时是如何从磁盘加载到内存的?

这时候就需要“外页表”了,它记录了操作系统中内存的虚拟地址与磁盘物理地址的映射关系,通过虚拟地址找到该页在磁盘中的准确位置(磁盘机号、柱面号、磁头号和扇区),然后写回。

到此位置,上面题的答案就出来了, 外部地址变换,需要通过虚拟地址找到磁盘的物理地址,然后将被置换的页面写回到磁盘。

2. 所要访问的数据加载到内存的空闲位置

要访问的数据,从磁盘加载到内存的空闲位置,需要记录以下从磁盘哪个具体位置加载到内存的,这时候也需要维护以下“外页表”,即为虚拟内存的虚拟地址到磁盘物理地址的映射。

综上,无论内存是否满,从磁盘加载数据到内存时,都要访问“外页表”,也就是虚拟地址与磁盘物理地址的映射。

那么我们经常说的页表,其实是内页表,是内部地址转换的时候用的,也就是通过虚拟地址定位到内存的物理地址。我们我们写的Java、C++代码, 声明了一个变量a,这个a的地址是虚拟地址,我们要改a的值,就需要通过“页表”找到实际的物理地址,然后更改物理地址上保存的内容。

总的来说,“外页表”是虚拟地址与磁盘物理地址的映射关系表,“页表”是虚拟地址与内存物理地址的映射关系表。

关于操作系统的存储管理可以参考以下两篇文章:

http://www.ylaihui.com/blog/article/9280?rootCategoryId=16

http://www.ylaihui.com/blog/article/9276?rootCategoryId=16

文章最后附上操作系统的地址变换流程图:

Guess you like

Origin blog.csdn.net/asdfjklingok/article/details/119087924