1. 基础

虚拟存储器特性

  • 多次性:作业运行时允许分多次调入内存
  • 对换性:作业运行时不用常驻内存,不用的可以调至外存
  • 虚拟性:逻辑上扩充内存,用户看到的内存容量>>实际容量

虚拟技术实现方式

  • 请求分页
  • 请求分段
  • 请求段页式

2.请求分页

页表机制

image-20251109202139551

新增P(是否调入内存)、A(访问次数)、M(是否被修改)、外存地址

缺页中断机构

进程执行任务

→缺页

→产生中断

→操作系统检查内存有无空位

  • 有→放入

  • 没有→采用置换算法踢出一个旧页面

地址变换机构

**查快表 **

  • 命中 → 形成物理地址,结束
  • 未命中 → ** 查页表**
    • 页在内存 → 更新快表,形成物理地址,结束
    • 页不在内存 →缺页中断

3.⭐页面置换算法

①最佳置换算法(OPT)

淘汰:今后最长时间内不再使用的页面

image-20251109210031352

  • 性能最好,但无法实现

②先进先出置换算法(FIFO)

淘汰:最早进入内存的页面

③最近最久未使用置换算法(LRU)

淘汰:最近最久未使用的页面

  • 性能最接近OPT,但开销太大

④时钟置换算法(CLOCK)

  • 每个页面设一个访问位,初始为0,被访问时置为1。
  • 淘汰扫描到的第一个为0的页面。
  • 若扫描到时为1,则置为0,继续向前扫描

例:

五个内存块,引用串:1 3 4 2 5 6 3 4 7

image-20251109220553516

第一轮扫描,全部置为0image-20251109220607226

第二轮扫描,从1开始。1号页面访问位为0,淘汰,将6放入。以此类推

⑤改进型的时钟置换算法

增加一个修改位:若被淘汰页面未被修改则不用写回外存。仅写回修改过的页面。

image-20251109221339005

  • 第一优先级:0,0
  • 第二优先级:0,1 最近未访问有修改
  • 第三优先级:1,0 最近有访问未修改
  • 第四优先级:1,1

最多4轮扫描

4. 页面分配

  • 驻留集大小:给一个进程分配的页框的集合

    • 太小:缺页率上升
    • 太大:浪费内存
  • ①固定分配:驻留集大小不变

  • ②可变分配

  • ③局部置换:缺页时只能从自己的物理块进行置换

  • ④全局置换

①④不可组合

  • 抖动现象
    • 产生原因:进程频繁访问页面数>可用物理块数

5. 内存映射文件

open打开文件

mmap文件映射到进程的虚拟地址空间

不用read,write

  • 操作系统自动调入内存、写出

  • 多个进程可以映射到同一文件,实现共享

效率更高