分页预览如何调整每页均匀(操作系统原理:详解虚拟内存存储管理请求分页式)

一,概述

必要性:前面的各种存储管理方式必须一次性全部装入内存才可以运行,直至作业运行结束才能释放全部内存资源,所以存在问题:

(1)内存不满足作业地址空间要求时就不能运行

(2)大量作业要求运行时只有少数作业装入内存运行,其他作业留在内存等待

程序执行呈现局部性特征,程序的执行局限于某个部分:

根据局部性原理可以把作业信息保存在磁盘上,当作业请求装入时,将当前运行所需要的一部分信息装入主存,作业执行过程时,如果需要的信息调入主存则继续执行;如果此时内存已满,无法将需要的信息加入,则将内存中暂时不用的信息置换到磁盘,腾出空间使需要的信息调入内存使程序继续执行。

虚拟存储器/虚拟内存

虚拟存储器的容量由计算机的地址结构和辅助存储器的容量决定。建立在离散分配的存储管理方式的基础上,它允许将一个作业分多次调入内存。

四大特征:

  1. 离散性(基础):按照页或者段进行离散化放置(物理空间可以不连续),以段或者页为单位进行换出换入分段或分页内存管理方式是虚拟存储器产生的基础
  2. 多次性(最重要的特征):一个作业被分成多次调入内存运行,只需要将当前运行的那部分程序或数据装入内存即可
  3. 对换性/对换性:允许作业的运行过程中进行换进和换出,【交换分区:在作业对应的进程运行期间,允许将那些暂时不使用的程序和数据,从内存换出至外存的对换区】,可以有效提高内存的利用率
  4. 虚拟性(最重要的特征):逻辑上扩充内存容量,是以多次性和对换性为基础的。多次性和对换性又必须建立在离散分配的基础上

更多Linux内核视频教程文档资料免费领取后台私信【内核】自行获取。

内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

二,虚拟内存存储管理

请求分页式存储管理

请求分页式管理

  • 主要功能:当需要执行某条指令而发现它不在内存时或当某条指令需要访问其他的数据或指令时,这些指令和数据不在内存,从而发生缺页中断,于是系统将外存中相应的页面调入内存
  • 优点:按需访问,只有被访问的页面的才会进入内存,节省了内存空间
  • 缺点:处理缺页中断次数过多和调页的系统开销较大,由于每次仅调入一页,增加了磁盘I/O次数

预调入页式管理

根据某种算法动态预测进程最可能访问哪些页面,在使用前预先调入内存,尽量做到进程在访问页面之前已经预先调入该页,而且每次可以调入多个页面,以减小磁盘的I/O次数

缺点:若预先调入的页面在实际情况下较少得到访问,则效率较低

请求分页式存储管理是在页式存储管理的基础上,增加了请求分页功能和页面置换功能实现的虚拟存储系统

主要思想:请求分页式存储管理允许作业只装入部分页面就可以启动运行。

在执行过程中,如果所要访问的页面已调入内存,则进行地址转换,得到欲访问的内存地址,如果不在内存中,则产生一个“缺页中断”;

如果此时内存能容纳新页,则启动磁盘I/O将其调入内存,如果内存已满,则通过页面置换功能将当前所需的页面调入。

1.请求分页的页表机制

  • 物理块号:指出该页在主存中的占用块(1表示访问)
  • 状态位:指出该页是否已经调入主存(1表示调入)
  • 访问字段:记录该页一段时间内被访问的次数或多久未被访问
  • 修改位:表示该页调入主存后是否被修改
  • 赋存地址:该页在磁盘上的地址

由于作业在磁盘上保留一份备份,若此次调入主存中后未被修改置换该页时不需要再将该页写回磁盘,减少系统开销;如果该页被修改,必须将该页写回磁盘上,保证信息的更新和完整。

2.缺页中断机构

3.地址变换机构

快表→→找到:状态位为1则地址转换,状态位为0则缺页中断→→调入主存,填上块号,修改状态位、修改位,形成物理地址:::::快表中找不到:主存中查找页表,若未调入主存则调入主存写入快表

4.页面置换策略

1.固定分配局部置换

固定分配:为每一个进程分配一定数目的主存物理块,在整个运行期间不再改变

缺点:难以为进程分配准确的内存数量。若太少,会频繁出现缺页中断,影响进程性能;若太多,会使内存驻留的进程数据减少,造成内存利用率下降

2.可变分配局部置换

主要思想:先分配一定数目的内存物理块,运行过程中频繁缺页中断就分配若干附加的物理块,缺页中断次数过少则缩小为该进程分配的物理块,控制缺页中断次数在一个合理的范围

3.可变分配全局置换

主要思想:为每一进程分配一定数目的物理块,保持一个空闲块队列,发生缺页中断则从该队列中取出一块,用完该队列中的物理块采用内存中选择页面进行置换(可能是系统中任一进程的页)

5.页面置换算法
抖动现象(颠簸):调入调出反复,使得调度非常频繁,以至于大部分时间都花费在来回调度上

(1)OPT最佳置换算法(理想化,无法实现)

主要思想:淘汰的页面是以后永远不再使用或者是将来最长时间内不再被访问的页面

最少次缺页中断次数

20次总访问次数,9次缺页中断,缺页中断率45%置换掉那个下一次访问时间最久的页面
开始7,0,1装入主存三次缺页中断;(701)到2时将7出去,因为需要7的在最后面调入2(201)到0的时候不需要缺页中断(201)到3时将1出去,因为需要1的排在20后面(203)

(2)FIFO先进先出置换算法
主要思想:先淘汰最近进入内存的页面(认为刚被调入的页面在最近的将来被访问的可能很大),淘汰在内存中驻留时间最长的页面

20次总访存次数,15次缺页中断,缺页中断率75%
置换掉最先进入的那个页面

Belady现象:在未给作业分配足够要求的页面数时,分配的物理块数增多,缺页中断次反而增加
产生原因:没有考虑程序执行的动态特征

M=3时,缺页中断次数为9;
M=4时,缺页中断次数为10

分页预览

(3)LRU最近最少用置换算法(基于局部性原理)

主要思想:将最近一段时间内最长时间没有被访问过的页面调出,认为刚被访问的页面最近的将来还会经常访问他们;

在页表增加一个引用位,在每次被访问后将引用位‘置零’,重新计时;

在发生缺页中断需要调入新的页面时,通过检查页表中各页的引用位,选择计时最长时间没有被访问过的页面淘汰,并且把内存中所有页面的引用位全部清零,重新计时

(4)CLOCK时钟置换算法(LRU近似算法)

主要思想:

当该页被访问时,由硬件将它的引用位置置为1;

操作系统选择一个时间周期T,每隔一个周期T,将页表中所有页面的引用位信息置 0;

这样,在时间周期T内,被访问过的页面的引用位为 1,而没有被访问过的页面的引用位置仍为0;

当产生缺页中断时,可以从引用位为0的页面中选择一页调出,同时将所有页面的引用位信息全部重置为0

关键:

周期T的确定:T 太大,可能所有的引用位都变成1,找不出最近最少使用的页面淘汰;T太小,引用位为0的页面可能很多,而无法保证所选择的页面是最近最少使用的

淘汰一个页面时,如果该页面已被修改过,必须将它重新写回磁盘;但如果淘汰的是未被修改过的页面,就不需要写盘操作了,这样看来淘汰修改过的页面比淘汰未被修改过的页面开销要大

  • (1)最近没有被引用,没有被修改(r=0,m=0)
  • (2)最近被引用,没有被修改(r=1,m=0)
  • (3)最近没有被引用,但被修改(r=0,m=1)
  • (4)最近被引用过,也被修改过(r=1,m=1)

(5)LFU最近最不常用置换算法

主要思想:

选择被访问次数最少的页面调出,即认为在过去的一段时间里被访问次数多的页面可能经常需要访问

关键:

周期T的确定:为每一页设置一个计数器,页面每次被访问后其对应的计数器加1,每隔一定的时间周期T,将所有计数器全部清零

6.缺页中断率分析

缺页中断处理需要系统的额外开销,影响系统效率,因此应尽可能减少缺页中断的次数,降低缺页中断率

(1)缺页中断率与缺页中断次数有关
影响缺页中断率的因素
begin{cases}
分配给作业的主存块数给

页面大小
程序编制方法
页面调度算法

分配给作业的主存块数

随着主存中进程数的增加,频繁的页面换入换出,磁盘I/O占据了主要时间,拉低了CPU利用率

  • 工作集过大:降低缺页中断率不明显,浪费内存
  • 工作集过小:频繁缺页,降低系统效率

程序运行时,对页面的访问是不均匀的,即在某段时间内访问仅限于较少的若干页面

OPT页面算法:预知程序在某段时间间隔内要访问哪些页面预先调入内存,减少置换发生的次数,提高cpu的利用率

工作集窗口尺寸越大,工作集越大,缺页中断的频率越低

  • 1.虚拟存储管理程序为每一个进程分配固定数量的物理块,并且这个数目可以进行动态的调整。这个数目就是由每个进程的工作集来确定,并且根据主存的负荷和进程的缺页情况动态地调整其工作集
  • 2.做法:创建一个最小工作集 →→该工作集保证进程运行在主存中应有的最小页面数 →→主存负荷不大可能增大工作集 →→空闲页不多就使用”自动调整工作集“(检查主存中的每一个进程,与最小工作集进行比较,,大于最小值就从工作集中移去一些页面作为主存自由页面为其他进程使用,主存自由页面太小不断检查直到每个进程的工作集都达到最小值为止)
  • 3.每个工作集都已达到最小值时,虚拟内存管理程序跟踪进程的缺页数量,根据主存中自由页面数量可以适当增加其工作集的大小

页面大小

页面大小会影响页表的长度,检索时间,置换页面的时间,页内零头的大小等,对缺页中断的次数有一定的影响

  • 页面太大:页面数少,查表速度快,缺页中断次数在系统分配相同主存块下减少,降低了缺页中断率,但是换页时间延长,可能产生的页内零头(内存碎片)所带来的空间浪费较大
  • 页面太小:换页时间短,页内零头少提高了空间利用率,但在系统分配相同的内存卡情况下,发生缺页中断次数增多,增加了缺页中断率

程序编写方法

一般希望编制的程序能集中在几个页面上进行访问,减少缺页中断次数,降低缺页中断率

页面调度算法

理想的调度算法是当要装入一个新页而必须调出一个页面时,所选择的调出页应该是以后再也不使用的页或者是距离当前最长时间以后才使用的页(OPT),能使缺页中断率最低,如果选择不当则有可能产生抖动现象。

请求分段式存储管理

ΔΔ与分段式区别:与请求分页式原理一样,是以段式存储管理为基础为用户提供比主存实际容量更大的虚拟空间

ΔΔ主要思想:请求分段式存储管理允许作业当前需要的一段或几段装入主存便可启动执行,如果要访问的段在主存就把逻辑地址转换为绝对地址;如果不在主存就产生“缺段中断”,将欲访问的段调入。

1.段表机制

  • 存取方式:只执行或只读或读/写
  • 访问字段A:记录该段被访问的频繁程序
  • 修改位M:该段进入主存后是否已被修改
  • 状态位P:是否在内存
  • 扩充位:请求分段式特有,表示本段在运行过程中是否有动态增长
  • 段地址:该段在内存中的起始地址
  • 辅存地址:本段在辅存中的起始地址

2.缺段中断机构

缺页中断步骤:

  • (1)空间分配:查主存分配表,找一个足够大的区域容纳该分段,找不到就检查该空间总和,能满足就采用移动技术,不符合就调出主存中的一段或几段,再将要访问的段调入主存
  • (2)修改段表
  • (3)装入段后就让作业重新执行被中断的指令,在主存中找到所要访问地段,继续执行下去

3.地址变换机构

请求段页式存储管理

ΔΔ每个作业仍然按逻辑分段,把每一段再分成若干页面,这样,在请求式存储管理中,每一段不必占用连续的存储空间,可按页存放在不连续的主存块中,甚至当主存块不足时,可以将一段中的部分页面装入主存。

采用请求段页式存储管理,需要对每一个装入主存的作业建立一张段表,对每一段建立一张页表,段表中指出该段对应页表所存放的起始地址及其长度,页表中应指出该段的每一页在磁盘上的位置以及该页是否在主存,若在主存,则填上占用的主存块号

作业执行时按段号查找段表,找到相应的页表再根据页号查找页表,由状态位判定该页是否已在主存,若在,则进行地址转换,否则进行页面调度

优点:结合了请求分段式和请求分页式虚拟管理的优点

缺点 :增加了设置表格(段表,页表)和查表等开销

原文链接:https://blog.csdn.net/shuxnhs/article/details/80956155

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友