第八章 虚拟内存
操作系统精髓与设计原理第八章复习笔记整理。整理笔记很快乐,就是有点费时间。o( ̄▽ ̄)ブ
1 硬件和控制结构
1.1局部性和虚拟内存
1、系统抖动
如果一个内存块需要被其它进程使用,该块的进程内容就需要被交换出去
处理器大部分的时间都用于交换块,而不是执行指令。
对未来可能使用到的块进程预测可以避免系统抖动。
2、局部性原理
一个进程中的代码和数据的访问有集簇的倾向,
因此,假设在很短时间内,仅需要访问进程的一部分块是合理的。
对未来可能使用到的块进程预测可以避免系统抖动。因此,虚拟内存机制是合理的。
局部性原理表明虚拟内存方案是可行的。虚拟内存所需要的支持
(1)硬件必须支持分页或分段
(2)OS必须能管理页或段在主存和辅存间的移动
1.2 分页
1、概述
(1)每个进程有一个自己的页表
(2)每个页表项包含进程的页、内存的帧、以及二者的对应关系,还包括以下
一个位P用于表明该页是否在主存中(与普通分页不一样的地方)
一个位M用于表明该页是否被修改(是否需要换出)
其它项
(姑且认为页表项是页表的每一项)页表项没有偏移地址!
2、页表结构
由于要换入换出,页表不能用寄存器保存,而且必须要在内存中。当进程正在运行时,一个寄存器保存该进程页表的起始地址。**(用来找到页表,找到页表虚拟地址才能检索,即页号+页表指针)**虚拟地址的页号用于检索页表、查找相应的帧号。
3、两级页表
原因:
(1)页表可能很大,整个页表会占用大量的内存
(2)页表也可以存储在虚拟内存上
(3)当一个进程正在运行时,只有部分的页表在主存中
虚拟地址的前10位来检索根页表(同上面一样,都是加上根页表指针),来查找二级页表的页表项(确定是哪一页),如果查不到,发生缺页中断。确定了二级页表具体是哪一页后,再二级页表地址加上二级页号查找物理页号,最后加上偏移量得到物理地址。(相当于多了一个二级页表地址)
4、倒排页表(反向页表:用帧号而不是虚拟地址页号来查找页表项)
(1)虚拟地址的页被映射到一个哈希(hash)值
(2)哈希值指向反向页表
(3)反向页表大小固定(主存大小决定、与进程数量和大小无关)
(4)反向页表每项包括
页号、进程ID、控制位、链指针
5、转移后备缓冲器 TLB
因为每次虚存访问需要访问两次物理内存:一次访问页表+一次访问数据(拓展,寄存器访问只需要一次)
所以为页表使用一个高速缓冲来解决该问题:即转移后备缓冲器(TLB)(转移检测缓冲区)其中包含最近最常使用的页表项。
TLB关联映射(相当于如何根据TLB找到帧号)
虚拟内存机制与cache交互(TLB+Cache共5种访问内存方式)
页尺寸
1.3分段
1、段大小不相等,并且动态确定
(1)简化了不断增长的数据结构的处理
(2)允许程序独立地改变或重新编译,而不要求整个程序集合重新连接和重新加载
(3)有助于进程间的共享
(4)有助于保护
2、段表
3、地址转换
页号+段表指针找到段号,查询段表得到基地址,再与偏移量相加,得到物理地址。
1.4段页式
1、分页对程序员来说是透明的;分段对程序员来说是可见的。结合二者优点,有了段页式管理。
用户内存被划分为若干个段,每段内被分成许多固定大小的页。页的大小等于帧的大小。
因此,存在一个段表,多个页表。因为每一个段就有一个页表
简称:进程分段、段内分页、内存分帧、页帧等大小。本质是页式管理。
2、地址转换
虚拟地址段号+段表指针得到段号来检索段表从而找到该段的页表地址,再加上虚拟地址页号得到页号来检索页表得到帧号,最后加上偏移量得到物理地址。
2 操作系统软件
2.1读取策略
1、请求式分页
2、预约式分页
2.2放置策略
1、最佳适配
2、首次适配
3、临近适配
2.3替换策略
为了防止系统抖动。评判标准:移出最近最不可能访问的页。
被锁定的帧不能被替换。称为帧锁定。每个帧有一个lock位。
1、最佳替换算法OPT
2、最近最少使用LRU
3、先进先出FIFO
3、时钟Clock
增加一个使用位
当一页首次加载入内存时,该位为1
当该页被访问时,使用位设成1
当需要进行页替换时,第一个使用位为0的帧被替换(找0的替换,1表示使用中)
(1)循环扫描(扫描次数最少一次,最多n+1次)
(2)遇到使用位为1的,变成0
(3)当一页被置换时,指针指向缓冲区的下一帧
更有效的时钟替换算法
因为帧被修改,要写回辅存,所以增加一位(修改位),回写是指页被修改过,所以要回写到要求的样子。
使用位+修改位
u=0;m=0;
u=0;m=1;
u=1;m=0;
u=1;m=1;
替换算法(最少扫描次数是1、最多扫描次数是3*n+1)
①从指针位置开始扫描,查找第一个u=0;m=0的帧
②没找到,找u=0;m=1的帧
对于跳过的帧,使用位设成0
③没找到,使用位均位0,转①
综上,各种算法的缺页率比较如下:
4、页缓冲
(1)被替换的页加入两个列表之一
•如果页没有被修改,则加入自由页表(未修改页表)
•如果页被修改了,则加入修改页表
因此,被替换的页还在内存中,访问速度加快。而且被修改的页以簇的方式回写,而非一次一页,大大减少了IO操作次数。
2.4驻留集管理
1、驻留集研究的是给特定的进程分配多大的主存空间,通常采用以下两种策略:
(1)固定分配策略
(2)可变分配策略
2、窗口的大小=分配给进程的帧的总数量
3、窗口的大小对页错误率有影响
其中、窗口越大、页错误率越小
2.5清除策略
1、请求式清除
2、预约式清除
3、页缓冲
2.6加载控制
研究确定驻留在内存中进程的数目