基本本页的地址变换流程
例题
第二步越界检查很重要,别忘了
具有快表的地址变换机构 (基本地址变换机构的改进)
由于时间局部性和空间局部性。我们很有可能连续多次查询的是同一个页表项。
以此建立快表(cache)
例题:
快表找到的是内存中的绝对地址,找到地址后,还要去内存中访问地址,所以如果再快表中找到了页表项,只需要访问一次快表、一次内存(1+100);如果没找到,则需要访问一次快表、两次内存(一次找页表项,一次访问绝对地址)。题目如果没说,则默认先找快表再找内存,而不是一起找,这里和机组不同。
两级页表(页表的页表) 开始套娃
因为页表必须连续储存,单级页表非常大。本身也表示为了非连续存储而生的,可本身却只能连续存储,而且还非常大。也是有了多级页表。
一级页表一般称为页目录表
倒数第三行处加备注:对于二进制表示,存放2^10个页表项就对应着10位。页号有28位,因此需要3级页表
书上总结
基本分段存储管理 (与基本分页存储对比)
因为段是按逻辑功能划分的,所以这种方式的编程更方便,可读性更高
将进程按照功能划分。如 就可以表示为一个分段(把它当做绿色段),D称为段名,A称为单元号。编译程序时段名会转换成段号,单元号会转换成段内地址。每一段地址都是从0开始的;而页的地址是连续的。
段表:
跟页表相比,多了个段长,因为每一段的长度不同。而页是相同的。
逻辑地址转物理地址
与分页最大的区别是④:和分页不一样,分段每一段的长度不同,所以需要越界检测
信息共享:不通进程的相同功能分段直接重用
保护:分页无视内容,临界非临界资源可能在一个块里,不方便保护
段页式管理方式
虽然分段可以通过“紧凑”解决碎片,但紧凑的时间代价大
段表的第三部分从基址变成了连接的页表,页表没变化。段号和页号是可以隐含的。一个进程有多个段,一个段对应一个页,所以一个进程对应多个页
逻辑地址转绝对地址流程
④各个段的长度不同,需要的页数量也不同,所以需要检查越界
虚拟内存基础知识
传统存储方式(包括连续式和非连续式)的缺点:
一次性:要运行就要将程序全部装入
驻留性:运行完的部分仍在内存中,知道程序全运行完才移出
解决方法:虚拟内存:
多次性,对换性对应解决了一次性和驻留性的问题
请求分页管理方式(与基本分页管理方式对比)
页表机制
缺页中断机制:
当要访问的页面不在内存时,便产生一个缺页中断。然后由缺页中断处理程序处理中断:将缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。
缺页中断属于内中断,故障(不记得就看前面)
请求分页管理方式的地址变换流程:
在基本分页的基础上(看上面的基本分页流程图),加了四个步骤:
页面置换算法:
- 最佳置换算法OPT: 需要置换的时候,将内存中未来最晚用到的内容置换
当访问2的时候,2不在内存,内存满了,需要置换。往后看,先出现了0、1最后出现7,也就是说内存中的7是未来最后用到的,所以置换7。
整个过程缺页中断发生了9次,页面置换发生了6次。注意:缺页时未必发生页面置换。若还有可用的空闲内存块,就不用进行页面置换。
缺点:
- 先进先出置换FIFO: 淘汰最早进入内存的页面
如图,直接就淘汰了第一个
优点:简单
缺点:贝拉迪异常--- ;性能差
- 最近最久未使用LRU:淘汰最近最久没使用的页面
页表项加一个访问字段记录该页上次被访问的时间
做题:需要置换时往前找,找到最久未使用的
性能好(几个算法里最接近最佳置换算法);实现困难,开销大
- 时钟置换算法: 置换最近未使用的页面
流程:
- 改进时钟置换:
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,立优先淘汰有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。设置修改位。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1,1)表示一个页面近期被访问过,且被修改过。
第一轮找最近没访问、没修改的;第二轮找最近没访问、有修改的;第三轮找最近访问、没修改的、第四轮找最近访问、且修改的
页面分配策略
驻留集:OS给进程分配的内存块数量
驻留集太大:那还整啥虚拟内存,全放内存里得了
驻留集太小:频繁缺页
固定分配、可变分配:分配的内存块数量是否相同
局部置换/全局置换:进程占用的内存块只能是原本自己的其它页使用的/可以是空闲块甚至其他进程的内存块
(有点小问题别太较真)
预调页策略:根据局部性原理,调入一个页面时,它附近的页面也调入(预判附近的也会使用)。此策略一般用于进程的首次调用,即运行前调入。
请求调页策略:运行期间,发现缺页才把缺少的页调入
从何处调入页面? (复习:对换区速度快,文件区慢)
对换区足够大时: 对换区不够大:
抖动/颠簸现象:进程运行中频繁调换同一部分内容
工作集:某段时间内,访问的页面集合
应当根据工作集设置驻留集,驻留集不能小于工作集,否则就会有颠簸现象