虚拟内存
两个效果
-
在主存中保留多个进程:由于对任何特定的进程都仅仅装入它的某些快,因此就有足够的空间放置更多进程。
-
进程可以比主存的全部空间还大:通过分段或分页的虚拟内存,可以获得巨大的主存,大小与磁盘储存器相关。
占有的是虚拟内存/逻辑地址
共享内存
按需调页
懒惰交换
调页程序pager:只是对进程的单个页进行操作
页面错误
第一步:页面错误的原因
1.非法访问
2.不在内存中
valid-invalid bit有效位
虚拟内存
两个特点:
在主存中保留多个进程
进程可以比主存的全部空间还大
需要的时候再载入
主要通过请求分页技术实现
当需要时载入物理内存运行
好处:
更少的IO,更少的内存,更快的响应速度,更多的用户。
Page Fault 页面错误
1.非法访问——终止
2.不在内存中——载入
写时拷贝COM
页面替换算法:
不再用的替换出来
问题:哪个页面是不再用的?
脏位:
是否被修改过(0/1)
目的:降低额外开销,减少写入操作
FIFO
Belady异常
在某些情况下会出现分配给进程的页面数增多,缺页次数反而增加的奇怪现象。
最优置换OPT
算法:调入一页而必须淘汰一个旧页时,所淘汰的页应该是以后不再访问的页或距现在最长时间后再访问的页。
特点:不是实际可行的算法,可用来作为衡量各种具体算法的标准,具有理论意义。
最近最少使用LRU
Counting Algorithms
计数器
引用位
9.5 帧分配
全局置换
牺牲帧的选择范围:操作系统中的全部
不能控制其页错误率,但它通常会有更好的系统吞吐量
(总资源不变)一个人越来越多,其他人就会越来越少,其他人的页面错误率就会变大,总体错误率就会变高
局部置换
保持一定的错误率
只会在自己的内存中置换
但内存使用效率上可能会不太公平
抖动/颠簸Thrashing
进程很多,大量时间用于IO,忙于页面交换
死机,硬盘在快速运转(灯在闪)
如果分配的帧数少于现有局部的大小,那么进程会颠簸。
物理内存不足以让这几个页面载入,势必会产生大量的页面错误
局部是一个经常使用页的集合
工作集working set
空间局部性
如果所有工作集合之和的增加超过了可用帧的总数,那么操作系统会选择暂停一个进程。
该进程的页被写出,且其帧可分配给其他进程。
挂起的进程可以在以后重启。
工作集合知识能用于预先调页。
对于页面错误率的处理方案
可接受的页面错误率(定义上下界)
PFF