操作系统内存知识点( 二 )


分页的话,页的长度是固定的,所以偏移量的最大值是固定的
分段的话不限制偏移量最大值,即可以很长一段 。
分段属于二维地址空间,因为他除了给出逻辑地址,还得给出段长
有利于做动态链接: 程序动态修改

操作系统内存知识点

文章插图
3.2.3 段页结合
作业先分成若干段,再把段分页,每个段可以找到一个也变
段号S 页号P 页内偏移
操作系统内存知识点

文章插图
【操作系统内存知识点】Q: 遍历二维数组的时候, 行遍历优先和列遍历优先的效率差别, 为什么会这样
A: 按行遍历比按列遍历的效率高体现在这些方面:
  1. CPU高速缓存
  2. CPU缓存从内存中抓取一般都是整个数据块,所以它的物理内存是连续的,几乎都是同行不同列的,而如果内循环以列的方式进行遍历的话,将会使整个缓存块无法被利用,而不得不从内存中读取数据,而从内存读取速度是远远小于从缓存中读取数据的 。随着数组元素越来越多,按列读取速度也会越来越慢 。
4 虚拟内存
4.1 概念
虚拟地址可以让进程获得比实际内存要大的内存
特征:
  • 多次性——作业可分多次装入内存
  • 对换性——可在运行时对内存做兑换处理
  • 虚拟性——逻辑上可充分扩充容量
要求:
必须使用非连续分配方式——分页、分段、段页
硬件需要支持 页表、中断、地址变换机构
理论依据:
时间局部性—— 指令和数据总是会在一段时间内被连续访问
空间局部性——某单元被访问,那么他附件的单元也很大概率会被访问
操作系统内存知识点

文章插图
4.2 请求分页机制
再分页的基础上,增加了2个功能:
请求调页——当页面不在内存中时,从外村申请调入
页面置换——把暂时不用的内存换出去,给其他需要进来的页腾出空间
页表项:
页号、物理块号
状态位P:是否已经调入内存
访问字段A: 记录访问次数或者访问标记,用于置换策略判断
修改维 M: 记录是否被修改过
外村地址——当页被换出去时,指明这个页在外存的何处
缺页中断机构: 当页面不存在时,负责产生缺页中断,进行页面置换操作 。
缺页只能高端和系统中断不同,属于指令中的操作,在执行期产生多次
地址变换机构:
1.先检索块表,如果能找到,则直接修改页表项的访问位 。
2.块表中没有,则去 再检索内存中的页表,通过状态为P确认是否在内存中
如果不在,则产生缺页中断 。
4.3 工作集概念
驻留集:指系统给每个进程分配的内存中实际页面集合
但是可能分配了10个,却只有5个经常在用
工作集: 某时间段内,这个进程访问和使用的页面集合
通过工作集,系统可以评估这个驻留集是否需要做删减,以及哪些页应该持续保留 。
这样可以减少抖动,即减少内外村之间频繁的交换页
4.4 页面置换算法
  • 最佳置换算法:
    选未来最长时间不会被用到的页
    这个要基于预测,比较难
  • 先进先出FIFO
    可能引发bleady异常:
较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出,并且有Belady现象 。所谓Belady现象是指:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象 。

推荐阅读