3.2虚拟内存管理
3.2.1 传统内存和虚拟内存对比
传统内存 | 虚拟内存 |
---|---|
一次性 :全部装入内存才能运行 | 多次性 :仅装入当前需要的数据 |
驻留性 :作业装入内存,运行时一直驻留内存 | 对换性 :暂时用不到的数据换出外存 |
虚拟性 :逻辑上扩充内存 | |
作业过大无法装入,作业过多也无法装入 | |
需要添加请求调页 功能和页面置换 功能 |
3.2.2 请求分页管理
- 1.页表格式
页号 | 物理块号 | 状态位[是否在内存] | 访问字段[最近是否访问] | 修改位[标记是否修改] | 外存位置 |
---|
-
2.缺页中断
页面不在内存,产生缺页中断(异常/内中断)
,操作系统处理完后,重新执行被中断的指令。一条指令可以产生多次缺页中断
。
①请求调页 ②页面置换 ③修改新增表项 -
3.地址变换
发生缺页
:①查块表 (没中) ②查慢表 (没中) ③调入页 (修改慢表,同时加入块表)
3.2.3页框分配
-
1.
驻留集
:进程的物理块的集合- 过大:多道程序并发下降
- 过小:缺页频繁
-
2.
内存分配策略
- 1.固定分配局部置换:开始时分配全部内存,运行期间不变。
- 2.可变分配全局置换:开始时分配部分内存,运行期间缺页使用
任意
空闲物理块。[缺页分配新物理块] - 2.可变分配局部置换:开始时分配部分内存,运行期间缺页使用
进程拥有的
空闲物理块。
-
3.
调入时机
- 1.预调页策略:由局部性原理,调入连续几个页面。
【在首次调入使用】
- 2.请求调页策略:
缺页
才调入内存。【运行期间使用】
- 1.预调页策略:由局部性原理,调入连续几个页面。
-
4.
何处调入
- 对换区充足::先将进程相关文件放入对换区,再调入内存
- 对换区不足:不会修改的文件从对换区调入,
被修改的文件调出时 写入对换区
- UNIX方式:进程相关的文件放入
文件区
,被换出的放在对换区
。
3.2.4 页面置换算法
- 1.最佳
(OPT)
置换算法 【无法实现】:换出不再使用的页面或最长时间不会使用的页面。 - 2.先进先出
(FIFO)
页面置换算法【实现简单,性能差,唯一可能出现Belady异常】:淘汰最先进入内存页面 - 3.最近最久未使用
(LRU)
置换算法【需要专门硬件实现排序,性能好,但实现困难,性能最接近OPT】:换出最久没有使用的页面 - 4.时钟
(CLOCK)
置换算法- 1.简单版:【访问位】
- ①寻找访问位为0的,所经过的都置为0
- ②第二轮一定可以找到
- 2.改进版【访问位,修改位】
- ①第一轮找(0,0),不做任何修改
- ②第二轮找(0,1),经过的将访问位置为0
- ③第三轮找(0,0),不做任何修改
- ④第四轮找(0,1)
- 总结:①未访问,未修改②未访问,被修改③被访问,未修改④被访问,被修改
- 1.简单版:【访问位】
3.2.5 抖动和工作集
- 1.抖动:频繁换入换出。主要原因:频繁访问的页面数目大于进程拥有的物理块数。
- 2.工作集:
驻留集大小应该大于等于工作集,否则发生抖动
3.2.6 内存映射文件【系统调用】
- 1.方便访问文件数据
- 传统文件访问:①open打开文件 ②seek移动读写指针 ③read读入多少数据 ④write 写回磁盘
- 内存映射文件:①open打开文件 ②mmap文件映射到虚拟地址 ③访问内存一样访问数据 ④操作系统完成文件读入读出 ⑤OS自动写回被修改文件
- 2.方便进程共享文件
- 不同进程将虚拟存储映射到同一个物理块。
- 不同进程将虚拟存储映射到同一个物理块。