OS(八):存储器管理之 请求分页存储管理方式
页面 作为调入和换出的基本单位。
1、请求分页的硬件支持
1.1、页表机制
页表将用户地址空间中逻辑地址变换为内存空间的物理地址。只将部分应用程序调入内存,页表增加若干项,详情如下:
状态P:用于指示该页是否已调入内存,供程序访问参考;
访问字段A:记录本页在一段时间内被访问的次数,或记录记录本页最近有多长时间未被访问,供选择换出页面时参考;
修改为M:表示该页在调入内存后是否被修改过。M位供置换页面时参考。
外存地址:指出该页在外存上的地址,通常是物理块号,供调入该页时参考。
1.2、缺页中断机构
1、缺页中断
请求分页系统中,当索要访问的页面不再内存时,产生缺页中断,请求OS将所缺的页面调入内存。
2、缺页中断的特点
缺页中断也需要保护CPU环境、分析中断原因、转入中断处理程序,恢复CPU等步骤,但与一般中断有区别:
2.1、在指令执行期间产生和处理中断信号
通常,CPU在一条指令执行完后,才检查是否有中断请求到达,若有,便去响应,否则继续执行下一条指令;
缺页中断时在指令执行期间。
2.2、一条指令在执行期间可能产生多次缺页中断
1.3、地址变换机构
请求分页系统中的地址变换过程:
检索快表,若快表中有要访问的页,修改页表项中的访问位。对于写指令,需将位置修改成1,然后利用页表项给出的物理块号和页内地址形成物理地址。
若快表中未找到该页的页表项,到内存中查找页表,再从找到的页表项中的状态位P,判断该页是否已调入内存,若已调入内存,将此页的页表项写入快表,当快表已满,按某种算法确定页的页表项后,再写入该页的页表项;若该页尚未调入内存,产生缺页中断,请求OS从外存把该页调入内存。
2、内存分配策略和算法
请求分页系统中,内存分配策略可分为 固定 和 可变 策略;
进行置换时,可分为 全局置换 和 局部置换。
2.1、物理块的分配策略
固定内存分配局部置换:为每个进程分配一定数目的物理块,在整个运行期间不再改变,若发生缺页,在内存中的页面中选出一个换出,再调入一页,保证分配给该进程的内存空间不变。
可变分配全局置换:为每个进程分配一定数目的物理块,OS自身维护一个空闲物理块队列,若发生缺页,系统从空闲物理块队列中取出一个物理块分配给该进程,并将调入的页装入,当队列中的物理块用完,OS从内存中选择一页调出。
可变分配局部置换:为每个进程分配一定数目的物理块,若发生缺页,在内存中的页面中选出一个换出,若频繁的而发生缺页中断,系统为该进程分配若干个附加的物理块。
2.2、物理块的分配算法
1、平均分配算法
将所有可供分配的物理块平均分给各进程。
2、按比例分配算法
根据进程的大小按比例分配物理块。
3、优先权分配算法
根据进程的优先权分配物理块。
2.3、调页策略
1、调入页面的时机
1.1、预调页策略
预测为基础的预调页策略,将预计在不久之后会被访问的页面预先调入内存。
1.2、请求调页策略
进程在运行中需要访问某部分程序和数据,发现所在的页面不在内存,向OS提出请求将所需页面调入内存。
2、何处调入页面
请求分页系统中外存分为两部分:存放文件的文件区 和 存放对换页面的对换区。
对换区采用连续分配的方式,文件区采用离散分配方式,对换区的磁盘I/O比文件区高。
1、系统拥有足够的对换区空间
全部从对换区调入所需页面,提高调页速度。
进程运行前,将该进程有关文件从文件区拷贝到对换区。
2、系统缺少足够的对换区空间
不会被修改的文件从文件区调入,换出这些页面时,由于未被修改不必将它们换出,再调入时直接从文件区调入;
可能被修改的文件,换出时,调到对换区,需要时再从对换区调入。
3、页面调入过程
程序访问的页面不在内存中:
1、向CPU发出缺页中断,中断程序保留CPU环境,分析中断原因后转入缺页中断处理程序;
2、程序通过查找页表,得到该页在外存的物理块;
3、若此时内存能容纳新页,启动磁盘I/O将所缺之页调入内存,在修改页表;若内存已满,按某种置换算法从内存中换出一页,若该页已被修改,必须写回磁盘,然后将所缺的页调入内存;
4、修改页表中的表项,存在为设置为1,将此项写入快表。
在缺页调入内存后,利用修改后的页表,形成所要访问数据的物理地址,再去访问内存数据。
3、页面置换算法
进程运行时,发生缺页中断,需要将缺少的页面调入内存,此时内存无空闲空间,必须从内存中调出一页至磁盘的对换区。
在物理内存和对换区之间进行换入换出操作,把选择换出页面的算法 称为 页面置换算法。
3.1、最佳置换(OPT)算法
保障最低缺页率,每次选择淘汰最不可能再次被使用的页面、无法实现。
3.2、先进先出(FIFO)页面置换算法
保障顺序上的公平,每次选择淘汰最早进入内存的页面。
3.3、最近最久未使用(LRU)置换算法
保障时间和距离上的公平,每次选择淘汰最久最近未使用的页面、需要硬件支持,开销大
3.4、时钟置换算法NRU
保障性能和开销均衡,为页面设置访问位(0/1),并链接成循环队列,进程访问页面后置为1。淘汰时为1置为0并跳过,为0时淘汰。最多需要两轮扫描
3.5、改进型时钟置换算法
额外考虑是否修改,保障最少I/O操作,增加修改位(0/1),第一轮找(0,0),第二轮找(0,1)并修改访问位为0,第三轮找(0,0),第四轮找(0,1);最多需要四轮。