# 4.3 基本分页存储管理 ## 一、分页存储的基本概念 ### 1.1 什么是分页 **分页**:将进程的地址空间和内存空间都划分为固定大小的页(Page)和页框(Page Frame),以页为单位进行分配。 ### 1.2 页和页框 **页(Page)**: - 进程地址空间划分为若干大小相等的页 - 页号从0开始 **页框(Page Frame)**: - 内存空间划分为若干大小相等的页框 - 页框号从0开始 **页大小**: - 通常为2的幂次方(512B, 1KB, 2KB, 4KB等) - 典型值:4KB ### 1.3 地址结构 **逻辑地址**: ``` +----------------+-------------+ | 页号 P | 页内偏移 W | +----------------+-------------+ ``` **地址转换**: - 逻辑地址 = 页号 × 页大小 + 页内偏移 - 页号 = 逻辑地址 / 页大小 - 页内偏移 = 逻辑地址 % 页大小 --- ## 二、页表 ### 2.1 页表的作用 **页表**:记录页与页框的映射关系。 **页表项**: - 页框号:该页对应的页框号 - 状态位:该页是否在内存 - 访问位:该页是否被访问过 - 修改位:该页是否被修改过 - 保护位:该页的访问权限 ### 2.2 页表的组织 **页表在内存中**: - 每个进程有一个页表 - 页表驻留在内存中 - 页表基址寄存器(PTBR)指向页表起始地址 **页表大小计算**: - 逻辑地址空间:2^n - 页大小:2^m - 页数:2^(n-m) - 页表项大小:假设为4字节 - 页表大小:2^(n-m) × 4字节 ### 2.3 地址转换过程 1. 根据逻辑地址计算页号和页内偏移 2. 根据页表基址和页号找到页表项 3. 从页表项中取出页框号 4. 物理地址 = 页框号 × 页大小 + 页内偏移 --- ## 三、快表(TLB) ### 3.1 什么是快表 **快表(Translation Lookaside Buffer)**: - 高速缓存,存储最近使用的页表项 - 位于CPU内部或MMU中 - 访问速度比内存快得多 ### 3.2 快表的作用 - 加速地址转换 - 减少内存访问次数 ### 3.3 快表的工作原理 **命中**: - 页号在快表中找到 - 直接获取页框号 - 只需1次内存访问 **未命中**: - 页号不在快表中 - 访问内存中的页表 - 将页表项加入快表 - 需要2次内存访问 ### 3.4 快表的命中率 **命中率**:在快表中找到页表项的概率。 **影响因素**: - 快表大小 - 替换算法 - 程序局部性 **有效访问时间**: ``` EAT = h × (t_TLB + t_M) + (1-h) × (t_TLB + 2×t_M) ``` 其中: - h:命中率 - t_TLB:快表访问时间 - t_M:内存访问时间 --- ## 四、两级页表和多级页表 ### 4.1 为什么需要多级页表 **问题**: - 大地址空间需要大页表 - 页表占用大量内存 **解决**: - 将页表分页 - 使用多级页表 ### 4.2 两级页表 **结构**: ``` 逻辑地址:| 外层页号 | 内层页号 | 页内偏移 | ``` **地址转换**: 1. 外层页表找到内层页表 2. 内层页表找到页框号 3. 计算物理地址 ### 4.3 多级页表 **n级页表**: - 逻辑地址分为n+1个部分 - n级页表 + 页内偏移 **优点**: - 节省内存空间 - 只需装入使用的页表 **缺点**: - 地址转换时间增加 - 需要多次内存访问 --- ## 五、分页的特点 ### 5.1 优点 - 无外部碎片 - 内存利用率高 - 实现简单 - 便于共享和保护 ### 5.2 缺点 - 有内部碎片 - 页表占用内存 - 地址转换需要额外时间 --- ## 六、考研重点 1. **分页的基本概念**:页、页框、页大小 2. **地址结构**:页号和页内偏移的计算 3. **页表**:页表项的内容、页表大小计算 4. **地址转换过程**:逻辑地址到物理地址的转换 5. **快表(TLB)**:作用、命中率、有效访问时间计算 6. **多级页表**:为什么需要、两级页表的地址转换 7. **分页的优缺点** --- *下一节:4.4 基本分段存储管理*