本文主要是介绍3.2_2 请求分页管理方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 3.2_2 请求分页管理方式
- (一)页表机制
- (二)缺页中断机构
- (三)地址变换机构
- 总结
3.2_2 请求分页管理方式
请求分页存储管理与基本分页存储管理的主要区别:
1.在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
功能一:操作系统要提供请求调页功能,将缺失页面从外存调入内存。
2.若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
功能二:操作系统要提供页面置换的功能,将暂时用不到的页面换出外存。
注意与基本分页存储管理的页表机制、地址变换流程进行学习。
(一)页表机制
与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存。如果还没调入,那么也需要知道该页面在外存中存放的位置。
当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到底换出哪个页面。有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖。因此,操作系统也需要记录各个页面是否被修改过的信息。
因此,请求分页管理方式的页表,就要增加额外的字段,用来记录这些信息。
有的地方也会把请求分页存储管理当中的页表叫做“请求页表”;把基本分页存储管理当中的页表叫做“基本页表”、“页表”。
这也是实现请求调页、实现页面置换的数据结构的基础。
(二)缺页中断机构
假设此时要访问逻辑地址 = (页号, 页内偏移量)
= (0, 1024)
。
在请求分页系统中,每当要访问的页面不在内存时(即:状态位 = 0
),便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。
此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。
如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。
比如,0号页想调入内存,但此时内存中已经没有空闲块了。最终选择2号页进行淘汰,由于2号页的
修改位 = 1
,因此需要将其写回外存,即由内存中的c号块
写回外存中的z号块
。之后,内存中的c号块
空闲,0号页就可以调入了。同样地,在执行相关操作时需要对请求页表进行更新。
缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断。
一条指令在执行期间,可能产生多次缺页中断。(如copy A to B
,即将逻辑地址A中的数据复制到逻辑地址B,而A、B属于不同的页面,则有可能产生两次中断)
(三)地址变换机构
请求分页存储管理与基本分页存储管理的主要区别:
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
操作系统要提供请求调页功能,将缺失页面从外存调入内存。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
操作系统要提供页面置换的功能,将暂时用不到的页面换出外存。
在进行逻辑地址变换时,需要多做一些什么工作:
新增步骤1:请求调页(要对该页表项“是否在内存”进行判断);
新增步骤2:页面置换(需要调入页面,但没有空闲内存块时进行);
新增步骤3:需要修改请求页表中新增的表项。
第一步,检查页号的合法性,看一下页号是否越界。
第二步,查询快表中有没有这个页号对应的页表项。若快表命中,则可以直接得到最终的物理地址。
第三步,若快表没有命中,就需要查询内存当中的“慢表”,在找到对应的页表项之后,需要检查这个页面此时是否已经在内存当中。如果这个页面此时没有在内存当中的话,那么缺页中断机构会产生一个缺页中断的信号,之后就由操作系统的缺页中断处理程序进行处理,包括调页、页面置换一系列的事情。当然,随着处理,页表中的数据也需要更新。
注意:存在于快表中的页面一定是在内存中的。若某个页面被换出外存,则快表中的相应表项也要删除,否则可能访问错误的页面。
提示:请求分页的地址变换,其实只是在基本分页存储管理之上又新增了几个步骤(或者有些步骤有所区别),但大体上还是相似的。所以只需要注意这些有区别的地方就可以了。
需要注意的细节:
1.只有“写指令”才需要修改“修改位”。并且,一般来说只需修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访存次数。
2.和普通的中断处理一样,缺页中断处理依然需要保留CPU现场。
3.需要用某种“页面置换算法”来决定一个换出页面(下节内容)。
4.换入/换出页面都需要启动慢速的I/O操作,可见,如果换出/换出太频繁,会有很大的开销。
5.页面调入内存后,需要修改慢表,同时也需要将表项复制到快表中。
在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是:
查快表(未命中)——查慢表(发现未调入内存)——调页(调入的页面对应的表项会直接加入快表)——查快表(命中)——访问目标内存单元。
提示:重点关注三件事情,①什么时候请求调页?②什么时候页面置换?③同时要对哪些数据进行更新?——搞清楚这三件事情,就可以掌握其精髓了。
总结
这篇关于3.2_2 请求分页管理方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!