操作系统精髓与设计原理复习笔记 第八章 虚拟内存

第八章 虚拟内存

操作系统精髓与设计原理第八章复习笔记整理。整理笔记很快乐,就是有点费时间。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加载控制

研究确定驻留在内存中进程的数目
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值