8.1硬件和控制结构
- 虚拟内存:进程执行时只将部分程序放入内存。因此程序可以比物理内存大
- 虚拟内存:用辅助存储器(一般指磁盘)作为内存的补充
- 虚拟内存大小:受计算机的寻址机制和辅助存储器限制
- 由os和硬件MMU虚拟出来
- 虚拟地址:即逻辑地址、
- 虚拟地址空间:分配给某进程(程序)的虚拟地址范围
- 实地址:即物理地址,物理内存中的某字节的地址
- 驻留集:程序运行时装入内存的部分(与工作集区分,工作集是某段时间工作的部分)
- 缺页(段)中断:访问的逻辑地址不在内存中时,os阻塞该进程,启动I/O,装入所需页(段)进程变为就绪态
- 虚拟内存优点
- 内存中可以保留更多进程,系统并发度提高,提高CPU利用率和内存利用率
- 进程可以比内存容量大,可以写大进程
- 访问速度接近内存,每位成本接近外存
- 理论支持:局部性原理(包括时间局部性和空间局部性)
- 分页
- 页表记录
- 帧号(该页存在哪一帧)
- p驻留位:0表示不在内存
- 引用字段:最近被访问次数,距上次访问时间间隔等数据
- m修改位(脏位):1表示修改过
- 磁盘地址:在磁盘中什么位置
- 页表记录
- 缺页中断
- 在第i条指令发生中断,重新执行时还是在第i条开始
- 一条指令可能引起多次缺页中断
- 虚实地址转换
- 通过页号(在虚拟地址中)找到页表中对应项,从而找到页帧号(作为物理地址的页帧号),页内偏移还是页内偏移
- 分页的多级页表
- 为了防止页表占用空间过大,将页表划分多个页表页,离散(甚至部分)装入内存
- 倒排页表(反置页表)
- 为内存的每一页框设置一个页表项
- 记录这一帧被那个进程哪一页存放
- 若只是简单排序,搜索时间长,故可以哈希
- 对虚拟地址散列,相同哈希值的页项被链在一起(为了减少搜索时间)
- TLB(快表)(转换检测缓冲区)
- 将也表中常用进程放入TLB
- 由CPU中的MMU控制
- 并行匹配查找时间很快(页在不在TLB中可以很快判断)
- 计算:命中率*(TLB访问处理(得出物理地址)时间+访存时间(拿取数据))+(1-命中率)*(访存时间(从磁盘装入所需页到内存中并更新TLB)+TLB访问处理时间+访存时间(拿取数据))
- TLB不命中后有两种情况,一是在内存页表中命中(更新TLB),二是不命中发生缺页中断,从磁盘中读入并更新页表和TLB
- 页尺寸的考虑
- 页越小,内碎片越小
- 页越大,页表越短(因为一个程序就那么大,页越大页数越少)
- 页越大,磁盘I/O开销越小
- 内存越大,页可以越大
- 页越小局部性越好,缺页率低
- 页增大时,缺页率先高后低(后面页大到和进程差不多大就不缺了)
- 分段
- 段不等长
- 发生缺段中断的时候,可能需要移动或淘汰多个段
- 段表记录
- 段长
- 段的内存起始
- 驻留位
- 修改位
- 访问字段
- 存取权限(所以方便共享)
- 扩充位:该段是否可扩充,若不可,越界时出错,否则增加段长
- 段页式
- 用户分段,段再分页
- 每个进程一个段表,每个段一个页表
- 保护和共享
- 简单分段和虚拟分段易于保护和共享
- 每段有执行,读,写权限
- 地址转换因为段表而可以防止越界
8.2操作系统软件——虚拟内存
- CPU必须支持分页和分段,才能实现虚拟内存(因为不是整个程序放进内存中)
- 需要考虑的问题
- 读取策略:什么时候将页读入内存
- 请求调入:需要访问时调入
- 预调入:在调入所需页同时,也调入可能马上访问的页面
- 置换策略:选择哪一页出去?基于局部性原理
- OPT最佳置换
- 淘汰用不再使用或者下次访问距当前时间最长
- 最佳,但不可实现
- LRU
- 最近最久未使用(上一次使用距离现今最长)
- 为每页添上时间戳,开销大
- FIFO
- 淘汰驻留内存时间最久的一页
- 性能差
- 可能出现belady异常现象(帧数越多,缺页越频繁)
- 时钟算法(第二次机会)
- 每个页表项有一个使用位
- 置换后指针前移
- 改进的时钟算法
- 增设修改位
- 最佳淘汰页是U=0,M=0,U的权重大于M
- 页缓冲技术
- 增加一条队列,淘汰时先不撤出内存,而是排到相应队队尾队尾,而所缺页则装入到链首空闲帧(因为下一个要运行)
- 当缺页时,先在空闲帧链表中寻找
- OPT最佳置换
- 放置策略
- 页:离散放到任意帧
- 段:FF,NF等
- 驻留集管理:如何分配帧,如何置换帧
- 帧越少,进程越多,并发度越高
- (考虑最小数量帧时)一条指令要用到的页应该同时在内存中
- 当一个进程的工作集(活跃页面)都在内存时,可使得缺页率达到可接受下限
- 固定分配
- 平均分配
- 按比例分配(按照进程大小)
- 按优先级分配
- 可变分配
- 进程所得页框数可增多或减少
- 局部置换
- 从该进程中选择置换
- 在整个内存范围内寻找置换帧
- 分配置换组合
- 固定分配+全局置换(不存在)(因为固定分配每个进程帧数相同,,若全局置换则影响某些进程帧数)
- 固定分配+局部置换 不灵活
- 可变分配+全局置换:要考虑剥夺哪个进程的帧数
- 可变分配+局部置换:最常用
- 清除策略:何时将脏页写回
- 请求时清除(置换时写回
- 预约式清除:一段时间或脏页达到一定数量时
- 加载控制:调整并发度,防止抖动
- 用于调页的时间比实际运行时间还多,CPU利用率急剧下降(并发度过高)
- 预防:
- L=S准则:产生缺页的平均时间(缺页中断之间的平均时间)等于处理一次缺页中断的平均时间
- 50%准则:磁盘利用率50%
- 采用局部置换
- 读取策略:什么时候将页读入内存