操作系统6——虚拟存储器
操作系统6——虚拟存储器
目录
1、虚拟存储器的基本概念
(1)程序装入内存时可能会出现如下问题
- 程序太大,要求的空间超出了内存总容量
- 有大量作业要求运行,但内存不能容下所有作业
(2)常规存储器管理方式的特征
- 一次性:要求作业全部装入内存才能运行
- 驻留性:程序装入内存后便一直驻留内存,直至运行结束
(3)虚拟存储器定义
是指具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而其成本却又接近于外存。
(4)虚拟存储器的工作情况
- 程序运行之前没必要全部装入内存;
- 如果此时内存已满,则利用页面置换功能将不用的页面调出内存;
- 如果程序需要访问的页不在内存则发出缺页中断请求,此时OS调用页面到内存;
- 程序运行时,将他需要访问的页在调入内存;
- 仅将需要运行的少数页面或段装入内存运行,其余停留在磁盘上;
(5)虚拟存储器的特征
1、多次性:一个作业被分成多次调入内存运行
2、对换性:允许在作业的运行过程中进行换进、换出
3、虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
(6)虚拟存储器的实现方法
主要有,请求分页系统;请求分段系统
请求分页系统,在分页系统的基础上增加了请求调页功能和页面置换功能。
请求分页系统需要:请求分页的页表机制;缺页中断机构;地址变换机构
2、请求分页存储管理方式
(1)请求页表机制
(2)缺页中断机制
在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断。
(3)地址变换机制
如果在快表中未找到该页的页表项,则应再到内存中去查找页表,再从找到的页表项中的状态位P,该页是否调入内存。其结果可能是:
- 该页已经调入内存,这是应将此页的页表项写入快表,当快表已满时,应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项。
- 该页尚未调入内存,这时便应产生缺页中断,请求OS从外存中把该页调入内存。
(4)请求分页中的内存分配
a、最小物理块数的确定
- 最小物理块数指保证进程正常运行所需的最小物理块数。
- 对于单地址指令且采用直接寻址方式的机器,则所需最少2个物理块;
- 允许间接寻址的机器,至少要求有3个物理块;
- 对于长度是两个或多于两个字节指令的机器,其指令本身可能跨两个页面,且源和目标地址所涉及的区域也可能跨两个页面,至少需要6个物理块
b、内存分配策略
内存分配策略:固定和可变分配策略。
- 固定分配:每个进程分配一组固定的数目的物理块,早进程运行过程中不能更改;
- 可变分配:先为进程分配一定数目的物理块,在进程运行期间可以适当增加和减少
置换策略:全局置换和局部置换。
- 全局置换:如果进程在运行过程中出现缺页,则将OS所保留的空闲物理块取出一块分配给该进程,或者在所有物理块范围内选择一个换出,然后调入缺的页面。
- 局部置换:如果进程在运行过程中出现缺页,只能从分配给该进程的n个物理快中选出一项调出,然后调入新的页,保证分配给该进程的物理块数目不变。
c、物理块分配算法
- 平均分配算法:将系统中所有可供分配的物理块,平均分配给各个进程。
- 例如,当系统中有100个物理块,有5个进程在运行时,每个进程可分得20个物理块。
- 按比例分配算法:根据进程的大小按比例划分物理块。
- 考虑优先权的分配算法:把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权,适当地增加其相应份额后,分配给各进程。
(5)请求分页中的内存分配
a、何时调入页面?
- 1)预调页策略:采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面预先调入内存,成功率50%
- 2)请求调页策略:当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便提出请求,由OS将其所需页面调入内存
目前的虚拟存储中大多采用此种策略
b、从何处调入页面
- 若系统要有足够的对换区空间,全部从对换区调入所需页面;
- 系统要缺少对换区空间,对于不会修改的文件从文件区调入,对于会修改的文件从对换区调入;
c、页面调入过程
(6)页面置换算法
1)最佳置换算法
其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。
2)先进先出置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中的驻留时间最久的页面予以淘汰。
3)最近最久未使用(LRU)置换算法
LRU置换算法是选择最近最久未使用的页面予以淘汰。把LRU算法作为页面置换算法是比较好的,它对于各种类型的程序都能适用。
4)CLOCK置换算法
利用Clock算法时,只须为每页设置一位访问位,在将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只须检查其访问位。
- 当采用简单的CLOCK算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。
- 当某页被访问时,其访问位被置1。
- 置换算法在选择一页淘汰时,只需检查页的访问位,是0换出,是1重新置0且暂不换出,再按FIFO检查下一个页面。检查到最后一个页面,若其访问位仍为1,则再返到队首检查。
- 由于该算法是循环地检查各页面的访问情况,故称为CLOCK算法,置换的是未使用过的页,又称为最近未用算法NRU。
5)改进clock算法
在将一个页面换出时,如果该页已被修改过,便须将它重新写到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。同时满足两条件的页面作为首选淘汰的页。
6)最少使用(LFU)置换算法
为内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该算法选择在最近使用最少的页面作为淘汰页。
7)页面缓冲算法
页面缓冲算法则既改善分页系统的性能,又可采用一种较简单的置换策略。 特点:淘汰的页只是修改标志;若页被修改过,则在欲复盖它时回写,否则成批回写。在欲重访问该页时,若页换出则只需修改标志。
影响缺页次数的因素:分配给进程的物理页面数;页面本身的大小,程序的编制方法:页面淘汰算法。
3、请求分段存储管理方式
(1)段表
(2)分段的共享与保护
共享段表:为了实现分段共享,可在系统中配置一张共享段表所有各共享段都在共享段表中占有一表项。
共享进程计数count:记录有多少个进程需要共享该分段。
存取控制字段:对于一个共享段,应给不同的进程以不同的权限。
段号:对于一个共享段,不同的进程可以各用不同的段号去共享该段。
- 非共享段仅为一个进程所需要。当进程不再需要该段时,可立即释放该段,并由系统回收该段所占用的空间。而共享段是为多个进程所需要的,当某进程因不在需要而释放它时,系统并不回收该段所占内存区。
- 对于同一个共享段,不同的进程可以使用不同的段号去共享该段。
- 对于一个共享段,应给不同的进程以不同的存取权限。
分段保护:越界检查+存取控制检查 (只读,只执行,读/写)
环保护机构:
- 低编号的环具有高优先权,操作系统位于最核心环
- 一个程序可以调用驻留在相同环或较高特权环中的服务
- 一个程序可以访问驻留在相同环或较低特权环中的数据
A可以访问B和C程序的的数据和方法;
B不能访问A的方法但是不能访问A的数据;
B可以访问C的方法和数据;