虚拟存储管理

虚拟存储器

*基本思想:进程的大小可以超过可以物理内存的大小—>即由OS把当前用到的那部分留在内存,其余的放在外存中
*虚拟地址:程序中使用的地址。进程的虚拟地址从0开始
物理地址:可寻址的内存实际地址
虚拟地址空间:虚拟地址的集合
物理地址空间:实际的内存空间

*交换技术:进程的整体或一部分在内存和磁盘的换人换出,换入:从磁盘移入到内存;换出:从内存移出到磁盘。交换是实现虚拟存储器的基础
*----交换区:磁盘上为虚拟内存保留的区域,称为交换区或交换空间。
*----交换区的分配方式:进程创建时分配:每次换出在同一个地方 + 换出时分配:首次换出时分配,以后换出在同一个地方;或每次换出在不同的地方
逻辑上扩充了内存容量,对于用户程序来说,仿佛内存无限大,只不过有时有点儿慢。
虚拟存储管理方案:
-----分页+虚拟存储技术
-----分段+虚拟存储技术
-----段页式+虚拟存储技术

————————————————————————————————————————————————

虚拟页式管理(动态页式管理)

基本思想:
  • 在进程开始运行之前,只装入部分或0个页,之后根据进程运行的需要,动态装入其他页。
  • 当内存空间已满,则根据页置换算法,淘汰某个页,以便装入新的页。
页表项内容的扩充:
  • 除了页号和物理块号之外,还需要:有效(状态)位----表示该页是否在内存中;访问位----记录该页最近是否被访问过;修改位----表示该页在装入内存后是否被修改过;外存地址:该页在磁盘上的地址
地址转换:
  • 虚拟地址---->物理地址
  • 由于访问的页P可能不在内存中,因此引出以下问题:缺页中断处理 + 页的换人/换出、
    *----缺页中断处理:当访问页表时,如果根据状态位发现所访问的页不在内存中,则产生缺页中断
    *----缺页中断需要做什么???
    *-----/缺页中断处理:/保护(保护当前进程现场)----> 查找(根据页表中的外存地址找到该页)----> 装入(若内存中无空闲块,则选择1页换出,将新调入页装入内存并分配一个空闲物理块)----> 修改(修改页表中表项的状态位及物理块号,修改空闲物理块表)---->恢复(恢复现场)
    *-----/页的换入换出:/考虑页的分配(为每个进程 分配多少物理块)(固定分配 + 可变分配) + 页的置换策略:在什么范围内选择淘汰页(全局置换:从整个内存中选择淘汰页 + 局部置换:只从缺页进程中选择) + 页的调入策略:何时调入?(请求调入 + 预调页:一次调入多个连续的页<局部性原理:有非常大的可能会访问缺页的下几页>) + 从何处调入(文件区 + 交换区)
页的置换算法:

*作用:选择换出页
*目的:减少缺页率
*思路:以过去预测未来
①.最优置换算法(Optimal,OPT)
淘汰以后永不使用的,或者过最长时间后才会被访问的页。
优点:保证了最低的缺页率
缺点:无法实现,因为无法知道将来的访问情况
结论:该算法只能作为衡量其他算法优劣的一个标准。
②.先进先出置换算法(FIFO)
淘汰最早进入内存的页。
实现方法:将已调入内存的页,按先后次序链成一个队列
优点:实现简单,开销小
缺点:与进程访问内存的动态特性不相适应(不符合局部性原理)、会产生belady现象(当分配给进程的物理块数增加时,有时缺页次数反而增加)
③.最近最久未使用算法(LRU)
淘汰最近一次访问距离当前时间最久的页,即淘汰未使用时间最长的页
关键:如何快速地判断出哪一页是最近最久未使用的
优点:算法好
缺点:实现代价高
*----实现方法:计时器移位寄存器(每页配置一个移位寄存器,当访问某页时,相应的最高位置1,每隔一段时间,寄存器右移一位;最终淘汰寄存器值最小的页)、(每次访问某页时,将其页号移到栈顶,则栈底是最近最久未使用的。
④.最近未使用算法(NRU)
简单的NRU算法:页表中设置访问位,当访问某页时,将访问位置1;将内存中所有页链成一个循环队列;从上次换出页的下一位置开始扫描,在扫描过程中,将访问位为1的页清0,访问位为0的淘汰。
*NRU算法是用得较多的LRU的近似算法,也称CLOCK算法
改进的NRU算法:①对于已经修改的页换出时必须重新写回到磁盘上,因此,优先选择未访问未修改的页换出;②淘汰一个最近未访问的已修改页比淘汰一个被频繁访问的干净页好。
*基本方法:设置一个访问位A,一个修改位M,按如下次序淘汰页:
第一类:A=0,M=0
第二类:A=0,M=1
第三类:A=1,M=0
第四类:A=1,M=1
实现算法:找第一类页淘汰---->若无,则查找第二类页,并将扫描过的页的访问位清0,将遇到的第一个页淘汰—>若没有则重复上述,则一定能找到
⑤.最少使用算法(LFU)
选择最近访问次数最少的页淘汰
实现:采用移位寄存器,类似于LRU
⑥.页缓冲算法(PBA)
与上述算法配合,提高效率
基本方法:设置两个链表:空闲页链表、已修改页链表
*----若淘汰页未修改则放入空闲页链表,否则放入已修改页链表;当已修改页达到一定数量时,再一起写回磁盘,即成簇写回,可减少I/O操作次数。

局部性原理:

被访问过的程序,下次可能被再次访问。
时间局部性:一条指令被执行了,则在不久的将来它可能还被执行
空间局部性:某一存储单元被访问,则在一定时间内,与它相邻的存储单元可能被访问。(页的调入:预调页:一次调入连续的多个页)
*局部性特征是虚拟存储技术能有效发挥作用的基础

抖动:

由于页在内存和外存中频繁换入换出,导致调度页的时间比进程实际运行的时间还多的现象

工作集:
  • 一个进程在时刻t、参数为x的工作集W(t,x)表示该进程在过去x个时间单位中被访问到的页的集合。x称为工作集的窗口大小。例如:W={5,26,8,7}//数字为页号
影响缺页次数的因素:
  • 分配的物理块数(分配给进程的内存块数太少是导致抖动现象发生的最主要原因)
  • 页的大小
  • 程序的编写方法(程序的局部性)
  • 页置换算法

虚拟段式管理

  • 段表项的扩充:段号+ 段基址、长度+访问位+状态位+修改位+外存地址+存取方式+扩充位
  • 分段的保护措施:越界检查、访问控制检查

虚拟段页式管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值