虚拟存储器-11.1
1.虚拟存储器概述
1.1局部性原理
1.程序的局部性原理:程序在运行的时候局限在某个局部的地方。
2.虚拟存储器的工作基本情况
- 运行时在内存
- 运行时不在内存
- 需要时调入内存
- 不需要调出内存
2.虚拟存储器实现的方法
2.1请求分页技术
2.1.1思想
分页:
- 运行时只装入当前需要运行的界面
- 运行后动态装入其他的页面
- 满的话淘汰某个页面
2.1.2数据结构
- 页号
- 状态位:0代表不在内存,1代表调入内存。判断是不是调入了内存中。
- 内存块号:内存中的地址块号。
- 外存地址:页在外存中的地址。
- 修改位:调入内存后是不是被修改过。
- 当发生置换的时候,回写。
- 当不发生置换的时候,不回写。
- 访问位:作为页面置换算法的依据。
2.1.3缺页中断
缺页中断可以发生在程序执行的过程中,但是一般的程序的中断都是发生在程序执行完之后才会发生的。
1.缺页中断和一般的中断的区别
相同点:
- 都是中断
- 保护现场 中断处理 恢复现场
不同点:
- 一般中断是一条指令完成后中断,缺页中断是一条指令执行时中断
- 一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页中。
2.缺页中断的过程
当某一条指令找对应的页号的时候没有找到,就会发生缺页中断。
发生缺页->缺页中断(将当前要执行的程序挂起,调用缺页中断程序)->采用某种置换算法,将缺页的调入内存->恢复现场(唤醒中断的程序)
3.中断处理的特例:
涉及到6次中断的过程。
原因:一条指令在两个页面中,指定一条指令都会置换两次。
2.2请求分页技术内存分配
2.2.1内存分配策略
可变分区的全局置换是用的次数最多的。
1.内存分配策略
- 固定分区
- 分区太多:老是出现缺页中断
- 分区太少:造成CPU或其他资源的浪费
- 可变分区
2.内存置换策略
- 局部置换
- 全局置换
2.2.2物理块的分配算法-基于固定分区分配策略
1.物理块的分配算法-基于固定分区分配策略
- 平均分配:按照进程的数目进行平局的分配
- 按比例分配:用的最多。按照进程的大小进行分配。
- 基于优先权的分配:先按照比例进行分配,再去按照对应的优先级进行分配。优先级高的进程对应的份额多一点。
2.3页面调入策略
就是事先调入内存中的部分程序和数据。
2.3.1何时调入
1.何时调入
- 预调页策略:50%。
- 请求调页策略:常用,容易实现的。但是每次调入一页,系统的开销是比较大的。
2.3.2何处调入
1.常见的调入的三种情况
- 对换空间足够大:把所有的页面放入对换区。
- 对换空间不够大:
- 不会修改的放到文件区
- 已经修改放到对换区
- UNIX方式:
- 未运行过的放到对换区
- 曾经运行但是被对换出的页面,下次调入的时候还是从对换区调入
2.3.3如何调入
调入的过程就是发生缺页中断处理的过程
发生缺页->缺页中断(将当前要执行的程序挂起,调用缺页中断程序)->采用某种置换算法,将缺页的调入内存->恢复现场(唤醒中断的程序)
2.3.4缺页率
1.缺页率的计算公式
- f=F/A
- f:缺页率
- F:缺页的次数
- A:缺页的次数+成功的次数
2.4页面置换算法
1.常见的5中页面置换的算法
- 理想淘汰算法—最佳页面算法(OPT)
- 先进先出页面淘汰算法(FIFO)
- 最近最久未使用页面淘汰算法(LRU)
- 最不经常使用(LFU)
- 页面缓冲算法 (PBA)
2.4.1最佳页面算法(OPT)
算法简介,只是一种最理想话的算法。具有最好的性能但是最难实现。将永不使用的和长时间最不会被访问到的调出内存。
作用:可以用来评价其余算法的好坏。
注意点:如果预先装入内存的话,算是命中。没有预先装入的就算是失败的。
案例:
假定系统为某进程分配了三个物理块, 并考虑有以下的页面号引用串:
- 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
- 进程运行时, 先将7,0,1三个页面装入内存。(预先装入内存中)
内存分配图如下:
所以:缺页率为:30%
期待下期再见!ヾ(•ω•`)o