一、程序局部性原理

程序的局限性表现在 时间局限性空间局限性 两个方面。

局限性类型 说明
时间局限性 如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问
空间局限性 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问

二、页面存储管理

1. 分页原理

  • 将进程的地址空间分成若干个大小相等的页(Page)
  • 将内存空间分成与页大小相等的物理块(Block)
  • 页的大小通常为 2 的幂,如 512B、1KB、2KB、4KB 等

2. 地址结构

逻辑地址由两部分组成:

|  页号 P  |  页内偏移 W  |
  • 页号 P:表示该地址所在页面的编号
  • 页内偏移 W:表示该地址在页面内的位置

3. 页表

页表用于记录页面与物理块的映射关系。

页号 物理块号 状态位 访问位 修改位
0 3 1 1 0
1 5 1 0 1
2 - 0 0 0
  • 状态位:表示该页是否在内存中(1-在内存,0-不在内存)
  • 访问位:表示该页最近是否被访问过(1-被访问过,0-未被访问)
  • 修改位:表示该页在内存中是否被修改过(1-被修改过,0-未被修改)

4. 地址转换

逻辑地址 → 页号 + 页内偏移 → 查页表 → 物理块号 + 页内偏移 → 物理地址


三、分段存储(了解)

1. 分段原理

  • 将程序的地址空间按逻辑意义划分为若干个段(Segment)
  • 每个段是一个独立的逻辑单位,如代码段、数据段、栈段等
  • 段的长度不等,由程序决定

2. 段表

段表用于记录段与内存的映射关系。

段号 段长 基址 状态位
0 1K 1000 1
1 2K 3000 1

3. 分页与分段的比较

特性 分页 分段
划分依据 物理单位(固定大小) 逻辑单位(可变大小)
页/段大小 固定 不固定
用户可见性 不可见 可见
目的 提高内存利用率 满足用户需求
地址空间 一维 二维

四、段页式存储

1. 段页式原理

  • 先将程序按逻辑意义分段
  • 再将每个段分成固定大小的页
  • 兼具分段和分页的优点

2. 地址结构

|  段号 S  |  页号 P  |  页内偏移 W  |

3. 地址转换

逻辑地址 → 段号 + 页号 + 页内偏移 → 查段表 → 查页表 → 物理块号 + 页内偏移 → 物理地址


五、页面置换算法

1. 淘汰页面问题

当内存空间不足时,需要淘汰某些页面。淘汰原则:

淘汰顺序:状态位 -> 访问位 -> 修改位

  1. 淘汰的页面必须在内存中的页面,即状态位为1
  2. 其次淘汰未被访问过的页面,即访问位为0
  3. 最后淘汰未被修改的页面,即修改位为0

注意: 修改位为0的页面被淘汰时无需写回磁盘,修改位为1的页面被淘汰时需要写回磁盘。

2. 常见页面置换算法

算法 说明
最佳置换算法(OPT) 淘汰以后永不使用或最长时间内不再被访问的页面(理论最优,不可实现)
先进先出(FIFO) 淘汰最先进入内存的页面
最近最久未使用(LRU) 淘汰最近最长时间未被访问的页面
时钟置换算法(Clock) 基于访问位的循环扫描算法

六、缓冲区

1. 单缓冲区

  • 只有一个缓冲区
  • 处理机和设备轮流使用缓冲区

2. 双缓冲区

  • 有两个缓冲区
  • 处理机和设备可以同时工作
  • 使用前提:满足 T > C 时(T为设备输入时间,C为处理机处理时间)

3. 缓冲池

  • 由多个缓冲区组成
  • 可以提高设备和CPU的并行程度