操作系统理论 第五章(虚拟存储器)—第二节(请求分页存储管理方式)

写在前面:

  1. 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili

一、请求分页中的硬件支持

1、请求页表机制

        在请求分页系统中所需要的主要数据结构是页表,基本作用仍是将用户地址空间中的逻辑地址变换为内存空间中的物理地址。由于只将程序的一部分装入内存,还有一部分在外存中,因此须在页表中增加若干项,供程序或数据在换进、换出时参考。

        ①状态位(存在位)P:由于在诸求分页系统中,只将应用程序的一部分调入内存,还有一部分仍在外存磁盘上,故须在页表中增加一个存在位字段,它用于指示该页是否已调入内存,供程序访问时参考。

        ②访问字段A用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,提供给置换算法(程序)在选择换出页面时参考。

        ③修改位M标识该页在调入内存后是否被修改过。由于内存中的每一页都在外存上保留一份副本,因此,在置换该页时,若未被修改,就不需再将该页写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的副本始终是最新的,简而言之,M位供置换页面时参考。

        ④外存地址用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。

2、缺页中断机构

(1)在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺之页调入内存(此时缺页的进程阻塞,调页完成后再被唤醒,回到就绪队列)。

(2)缺页中断作为中断(属于内中断),它们同样需要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,以及在中断处理完成后再恢复CPU环境等几个步骤。但缺页中断是一种特殊的中断,与一般中断有明显区别:

在指令执行期间产生和处理中断信号。通常CPU都是在一条指令执行完后才检查是否有中断请求到达,若有便去响应,否则继续执行下一条指令;然而缺页中断发生在指令执行期间,若发现所要访问的指令或数据不在内存时,便立即产生和处理缺页中断信号,以便能及时将所缺之页面调入内存。

一条指令在执行期间,可能产生多次缺页中断。如下图所示,在执行一条指令copy A to B时,可能要产生6次缺页中断,其中指令本身跨了两个页面,A和B又分别各是一个数据块,也都跨了两个页面。

3、地址变换机构

(1)请求分页系统中的地址变换机构,是在分页系统地址变换机构的基础上,再为实现虚拟存储器而增加了某些功能而形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等。

(2)地址变换过程:

①在进行地址变换时,首先检索快表,试图从中找出所要访问的页,若找到,便修改页表项中的访问位(对于写指令,还须将修改位置成“1”,表示该页在调入内存后已被修改),供置换算法选换出页面时参考,然后利用页表项中给出的物理块号和页内地址形成物理地址。地址变换过程到此结束。

②如果在快表中未找到该页的页表项,则应到内存中去查找页表,再从找到的页表项中的状态位P来了解该页是否已调入内存。若该页已调入内存,这时应将该页的页表项写入快表,当快表已满时,则应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项;若该页尚未调入内存,这时应产生缺页中断,请求OS从外存把该页调入内存。

二、请求分页中的内存分配

1、最小物理块数确定

(1)最小物理块数是指能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行。

(2)进程应获得的最少物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。

2、内存分配策略

(1)固定分配局部置换:

①所谓固定分配,是指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。所谓局部置换,是指如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。

②采用该策略时,为每个进程分配多少物理块是根据进程类型(交互型或批处理型等)或根据程序员、程序管理员的建议来确定的。实现这种策略的困难在于应为每个进程分配多少个物理块难以确定:若太少,会频繁地出现缺页中断,降低了系统的吞吐量;若太多,又必然使内存中驻留的进程数目减少,进而可能造成CPU空闲或其它资源空闲的情况,而且在实现进程对换时,会花费更多的时间。

(2)可变分配全局置换:

①所谓可变分配,是指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。所谓全局置换,是指如果进程在运行中发现缺页,则将OS所保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺之页调入

②在采用这种策略时,凡产生缺页(中断)的进程都将获得新的物理块,仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出。被选择调出的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,这将导致其缺页率增加。

(3)可变分配局部置换:

①该策略同样是基于进程的类型或根据程序员的要求,为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选择一页换出,这样就不会影响其它进程的运行

如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止;若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率的明显增加

3、物理块分配算法

(1)平均分配算法:将系统中所有可供分配的物理块平均分配给各个进程。这种算法由于未考虑到各进程本身的大小,会造成实际上的不公平,假设系统平均分配给每个进程20个物理块,这样一个进程只有10页,闲置了10个物理块,而另外一个进程有200页,也仅被分配了20块,显然后者必然会有很高的缺页率。

(2)按比例分配算法:根据进程的大小按比例分配物理块,如果系统中共有n个进程,每个进程的页面数为S_{i},则系统中各进程页面数的总和为S=\sum_{i=1}^{n}S_{i},又假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为b_{i}=\frac{S_{i}}{S}\times m(应该取整,必须大于最小物理块数)。

(3)考虑优先权的分配算法:把内存中可供分配的所有物理块分成两部分,一部分按比例地分配给各进程,另一部分则根据各进程的优先权进行分配为高优先进程适当地增加其相应份额(在有的系统中,可能是完全按优先权为各进程分配其物理块的)。

三、页面调入策略

1、时间方面的策略

(1)预调页策略。如果进程的许多页是存放在外存的一个连续区域中,一次调入若干个相邻的页会比一次调入一页更高效些,但如果调入的一批页面中的大多数都未被访问,则又是低效的,于是便考虑采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面预先调入内存。该策略主要用于进程的首次调入时,由程序员指出应该先调入哪些页。

(2)请求调页策略。当程序在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需要的页面调入内存。由请求调页策略所确定调入的页是一定会被访问的,再加之请求调页策略比较易于实现,故在目前的虚拟存储器中,大多采用此策略,但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘I/O的启动频率。

2、空间方面的策略

(1)系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。为此,在进程运行前,便须将与该进程有关的文件从文件区拷贝到对换区。

(2)系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入而当换出这些页面时,由于它们未被修改,则不必再将它们重写到磁盘(换出),以后再调入时,仍从文件区直接调入;但对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时再从对换区调入。

(3)UNIX方式。由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入,而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时应从对换区调入。由于UNIX系统允许页面共享,因此,某进程所请求的页面有可能已被其它进程调入内存,此时也就无需再从对换区调入。

3、页面调入过程

(1)每当程序所要访问的页面未在内存时,便向CPU发出一缺页中断,中断处理程序首先保护CPU环境,分析中断原因后,转入缺页中断处理程序

(2)程序通过查找页表,得到该页在外存上的物理块后,如果此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表

(3)如果内存已满,则需按照某种置换算法从内存中选出一页准备换出;如果该页未被修改过,可不必写回磁盘;但如果此页已被修改,则必须将它写回磁盘,然后把所缺的页调入内存,并修改页表中的相应表项,置其存在位为1,并将此页表项写入快表

(4)在缺页调入内存后,利用修改后的页表,形成所要访问的物理地址,再去访问内存数据整个页面调入过程对用户是透明的

4、缺页率

        假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m<n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A=S+F,那么该进程在其运行过程中的缺页率即为f=F/A。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值