操作系统笔记------存储管理(3)

虚拟存储器

所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
特征:多次性,对换性,虚拟性。

局部性原理

在一段时间内一个程序的执行往往呈现出高度的局部性,表现在时间与空间两方面。
时间局部性:一条指令被执行了,则在不久的将来它可能再被执行;在一段时间内,访问的代码范围是有限的。
空间局部性:若某一存储单元被使用,在一定时间内,与该存储单元相邻的单元可能被使用。

请求分页系统

请求分页系统(页式虚拟存储器,分页请求系统):在基本分页系统基础上,增加以页面为单位的请求调入和自动置换功能 。

请求分页的页表机制

用于处理页面不在主存,请求分页时的相关操作。请求页表结构:

除了原先的地址映射和存取控制外,还新加了四个字段。
状态位P:表示该页是调入了内存中还是没有调入内存。(由于内存有限,只调入部分,用以标识)
访问字段A:用于记录在一段时间内本页被访问的次数,或记录有多久没有被访问,以供置换算法在选择换出页面时参考。
修改位M:用于记录该页调入内存之后是否被修改过,如果修改了就要将修改的写回外存中,如果没有修改就不用写回,减少开销。
外存地址:指明该页在外存中的地址,用以在调入时参考。

缺页中断机制

在请求分页系统中,如果要访问的页面不在内存中时,便产生缺页中断。
指令执行期间发出中断并响应和处理中断,完成后返回(保证更快的将页数据调入内存),一条指令可能发出多次缺页中断;

地址重定位


与之前的地址映射机制相似,只不过多了一些对于标志位的操作,首先还是先找快表,快表中所有的页表已载入了内存,找到的话,对应修改访问字段,再根据是否修改来修改修改位。如果没有找到就访问页表来查询,根据状态位来判断是否已经载入内存,如果没有就使用缺页中断来将其调入内存中,根据相关的替换算法修改快表和标志位,最后形成物理地址。

最小物理块个数

保证程序正常运行需要的最小物理块个数
由机器指令的结构决定

  1. 单字节指令,直接寻址:2块;
  2. 单字节指令,间接寻址:3块;
  3. 多字节指令,直接寻址:3块;
  4. 多字节指令,间接寻址:4块;

进程的工作集 :驻留在物理内存中的虚拟页面的子集。

工作集大小的变化:进程开始执行后,随着访问新页面逐步建立较稳定的工作集。当内存访
问的局部性区域的位置大致稳定时,工作集大小也大致稳定;局部性区域的位置改变时,工
作集快速扩张和收缩过渡到下一个稳定值。

内存分配

物理块分配策略

  1. 固定分配局部置换:为进程分配物理块;在进程运行期间,物理块个数不变;新页面,只能置换入该进程已经分配的物理块;但是物理块个数难以指定;
  2. 可变分配全局置换:为进程分配物理块;在进程运行期间,物理块个数随时变化;新页面,在全局范围内置换物理块(用空闲块就将其分配给需要的进程,并调入页面,如果内存都占满了就随机取一个进程中的页调出(全局),该进程缺页率增大);但是进程之间的执行互相影响,页面“抖动”
  3. 可变分配局部置换:为进程分配物理块;在进程运行期间,物理块个数可变化;新页面,在该进程已经分配物理块内置换避免物理块初始设置不合理的难题;引入缺页率,保证:低限阈值 <= 缺页率 <= 高限阈值,缺页高了就在调几块给进程,缺页率低了就收回几块,保证在阙值之间。

物理块分配算法

  1. 平均分配:将物理块平均分配给进程,但是忽略了各个进程的不同情况。
  2. 按比例分配:按进程使用的页面数占总体的比例来分配物理块数量。
  3. 加权分配:一种是将物理块分为两类一类直接均分,另一类根据进程的优先权或者运行的紧迫程度来分;还有一种就是直接按照进程的优先权和运行的紧迫程度分,优先级高的,运行急迫的分到的块多一点。

调入策略(何时):
预先调页:一次调入多个页面;减少后期I/O;
请求式调页:需要时,调入;
调入策略(何处):外存对换区(对换区足够,提高速度)文件区(对换区不够)UNIX方式:没运行过的存储在文件区(第一次运行时调入),运行过的存储在对换区(下次调入时由此进行调入);

置换算法

缺页率=缺页置换次数/页面访问总数*100%

最佳置换

选择以后再也不用的页面;没有的话,选择以后最长时间不用的页面进行置换;
但是无法实现,因为页面的访问顺序无法预知,仅具有理论意义。

先进先出置换(FIFO)

基于程序的顺序执行特点,选择到达内存最早的页面,予以淘汰并置换;
页面在内存中按时间排序;但是效果不佳(程序不是严格顺序执行);

最近最久未使用置换(LRU)

基于程序运行的局部性原理;选择最近以来最久未使用的页面,予以淘汰并置换;
通过移位寄存器,栈实现,调度性能较好。
移位寄存器实现记录:每个物理块设置一个移位寄存器,初值为0;访问一次页面,高位置1定时(100ms)将所有物理块的移位寄存器右移1位,高位补0;选择移位寄存器数值最小的物理块,淘汰其中页面。

请求分段系统

请求分段系统段式虚拟存储器,分段请求系统):在基本分段系统基础上,增加以分段为单位的请求调入和自动置换功能 。

请求分段的段表机制


除了基本的段号与段基地址,段长与存取控制外还设置了五个控制位。
存在位P:描述该段是否调入了内存。
访问字段A:用于描述最近该段数据的访问情况,便于在置换时参考。
修改位M:用于描述该段在进入内存后是否进行了修改。
增补位:用于记录该段在运行中是否有过动态增长。
外存地址:对应段在外存中的地址(起始盘号)。

缺段中断机制

当访问的段不在内存中时提出缺段中断请求。在指令执行期间,发出中断并响应和处理中断(保证更快的将段数据调入内存),返回,一条指令可能发出多次缺段中断;

由于段的空间大小不想页空间那样定长,所以实现要比缺页中断困难。

地址重定位

分段共享与保护

共享段表:记录了分段信息,共享该分段进程的信息(存取控制,进程数量count,段号)。被共享分段可由各进程以不同方式(存取控制,段号)共享。
分配算法
a)检索共享分段,如果共享分段存在转c) ;
b)创建共享段表的段表项,填写分段信息,分配相应内存并调入分段;
c)记录本进程信息到共享段表的段项,count+1;
d)复制共享段表的段表项相应信息(段基址、段长、存取控制)到进程段表;
进程段表(私有段表):与前面所述共享段表相同在进程内部(私有);
回收算法
a) 撤消进程时,将所有该进程共享之分段的count-1 ;
b) 当某分段count =0时,回收该分段所占据内存;

段页式虚拟存储器

段页式虚拟存储器:在段页式系统基础上,增加以分页为单位的请求调入和自动置换功能 。

发布了62 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_36945592/article/details/90749262