一、程序局部性原理
程序的局限性表现在 时间局限性 和 空间局限性 两个方面。
| 局限性类型 | 说明 |
|---|---|
| 时间局限性 | 如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问 |
| 空间局限性 | 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问 |
二、页面存储管理
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
- 其次淘汰未被访问过的页面,即访问位为0
- 最后淘汰未被修改的页面,即修改位为0
注意: 修改位为0的页面被淘汰时无需写回磁盘,修改位为1的页面被淘汰时需要写回磁盘。
2. 常见页面置换算法
| 算法 | 说明 |
|---|---|
| 最佳置换算法(OPT) | 淘汰以后永不使用或最长时间内不再被访问的页面(理论最优,不可实现) |
| 先进先出(FIFO) | 淘汰最先进入内存的页面 |
| 最近最久未使用(LRU) | 淘汰最近最长时间未被访问的页面 |
| 时钟置换算法(Clock) | 基于访问位的循环扫描算法 |
六、缓冲区
1. 单缓冲区
- 只有一个缓冲区
- 处理机和设备轮流使用缓冲区
2. 双缓冲区
- 有两个缓冲区
- 处理机和设备可以同时工作
- 使用前提:满足 T > C 时(T为设备输入时间,C为处理机处理时间)
3. 缓冲池
- 由多个缓冲区组成
- 可以提高设备和CPU的并行程度
评论