操作系统:分页存储管理方式(精简版、含例题)
文章目录
- 操作系统分页存储管理方式:从概念到实践的深度剖析
- 一、引言
- 二、分页存储管理的基本概念
- (一)定义与核心思想
- (二)页与物理块
- (三)优势与场景
- 三、分页存储管理的具体实现
- (一)逻辑地址结构
- (二)页表
- (三)页表寄存器与地址转换
- (四)内存分配与回收
- 四、分页存储管理的优化技术
- (一)快表(TLB)
- (二)多级页表
- (三)反置页表
- 五、分页存储管理的性能分析
- (一)访问时间与有效访问时间
- (二)缺页中断
- (三)页面置换算法
- 六、实际操作系统中的分页应用案例
- (一)Windows
- (二)Linux
- (三)其他操作系统
- 七、考研例题
- 例题1
- 例题2
- 例题3
操作系统分页存储管理方式:从概念到实践的深度剖析
一、引言
存储管理在计算机系统中至关重要,负责高效管理内存资源,包括分配、回收,保障安全稳定,提升使用效率。随着应用场景变复杂、程序规模扩大,传统连续存储弊端凸显,分页存储管理应运而生。它通过分页处理,解决内存碎片问题,提高内存利用率与系统性能,为多道程序并发执行提供高效方案,是现代操作系统的基础,深入理解它对掌握操作系统原理和优化性能意义重大。
二、分页存储管理的基本概念
(一)定义与核心思想
分页存储管理将内存和程序空间划分为等大的“页”,内存物理空间分“物理块”,程序逻辑地址空间分“逻辑页”,程序离散存于不同物理块,避免内存碎片,提高内存利用率。
(二)页与物理块
- 页:逻辑地址空间中程序的基本划分单位,大小固定(如4KB、8KB ),便于程序分页与管理,页内逻辑地址连续。
- 物理块:内存物理空间基本划分单位,与页大小相同,是数据存储单元,使内存管理更灵活,提升内存利用率与系统并发能力。
(三)优势与场景
分页存储管理可解决内存碎片问题,支持多道程序并发执行,便于程序动态加载卸载。适用于多用户多任务系统(如Windows、Linux )、大型应用程序及服务器环境。
三、分页存储管理的具体实现
(一)逻辑地址结构
逻辑地址由页号和页内偏移组成,页号用于定位页表项获取物理地址,页内偏移确定页内位置。如页大小4KB时,逻辑地址低12位为页内偏移,高位为页号。
(二)页表
页表是逻辑地址到物理地址映射的关键结构,记录逻辑页对应物理块号等信息,由页表项组成,含物理块号、页状态及访问权限等。结构有单级、多级、反置页表,分别适用于不同场景。
(三)页表寄存器与地址转换
页表寄存器存当前进程页表始址和长度。地址转换时,依逻辑地址页号和寄存器信息找到页表项,取物理块号,与页内偏移组合得物理地址。若页不在内存,产生缺页中断,需从外存调入并更新页表。
(四)内存分配与回收
内存分配有静态和动态两种,静态简单但易浪费资源,动态按需分配,常见算法有首次适应、最佳适应、最坏适应。回收时标记物理块为空闲,归还到空闲链表,注意合并相邻空闲块以减少碎片。
四、分页存储管理的优化技术
(一)快表(TLB)
快表是高速缓存,存近期频繁访问页表项。地址转换先查快表,命中则直接获物理块号,未命中再访内存页表并更新快表。以典型系统为例,可大幅缩短地址转换时间,提升系统性能,适用于频繁访存程序。
(二)多级页表
程序规模扩大使页表占内存空间剧增,多级页表将其分层(如二级页表 ),可按需调入活跃部分,节省内存空间,适用于大地址空间系统(如64位 ),但增加地址转换复杂度与时间开销。
(三)反置页表
反置页表以物理块为中心管理,表项记录物理块被占用情况,地址转换需遍历,常结合哈希表加速查询。它减少页表内存占用,适用于内存有限但进程多的系统(如嵌入式 ),但进程多时有地址转换效率问题。
五、分页存储管理的性能分析
(一)访问时间与有效访问时间
基本分页系统访问时间为两次内存访问时间之和。有效访问时间综合快表命中率、缺页率等因素,公式为 E A T = h × ( t T L B + t m e m ) + ( 1 − h ) × ( t T L B + 2 × t m e m ) EAT = h×(t_{TLB} + t_{mem}) + (1 - h)×(t_{TLB} + 2×t_{mem}) EAT=h×(tTLB+tmem)+(1−h)×(tTLB+2×tmem) ,缺页时需加上调页时间。
(二)缺页中断
程序访页不在内存时触发缺页中断,流程为暂停进程、选置换页(内存满时 )、写回外存(页修改时 )、调入目标页、更新页表、恢复进程。影响因素有页面大小、程序局部性、页面置换算法。
(三)页面置换算法
- 最佳置换(OPT):选未来最长时间不用的页,理论上缺页率最低,用于理论分析。
- 先进先出(FIFO):选最早入内存的页,简单但可能出现“Belady现象”,性能差。
- 最近最久未使用(LRU):依页面访问历史选最长未访问页,性能接近OPT,实现成本高。
- 时钟(Clock):LRU近似算法,通过循环链表模拟指针,兼顾性能与复杂度,应用广泛。不同算法各有优劣,需依需求选择平衡内存利用率与响应速度。
六、实际操作系统中的分页应用案例
(一)Windows
采用多级页表结合快表机制,逻辑地址分页目录索引、页表索引和页内偏移。利用快表加速地址转换,引入“会话空间”“进程空间”实现内存隔离,内存分配回收结合伙伴系统,减少碎片。
(二)Linux
多级页表结构,支持多种页面大小。缺页中断和页面置换采用基于LRU的改进算法,维护多个LRU链表,引入透明大页技术优化内存使用。
(三)其他操作系统
- macOS:采用统一虚拟内存架构,结合分页技术动态管理内存,引入内存压缩技术,物理内存不足时压缩不活跃页面,推迟页面置换。
- 嵌入式操作系统(如VxWorks):分页管理轻量化高效化,用简单页表结构,针对硬件优化地址转换,依应用场景定制页面置换算法,保障关键任务实时稳定。
七、考研例题
例题1
在分页存储管理系统中,某进程的页表如下所示。已知页面大小为4KB,逻辑地址为0x12345(十六进制),则该地址对应的物理地址是多少?
页号 | 物理块号 |
---|---|
0 | 2 |
1 | 3 |
2 | 5 |
题目解答:
- 首先,将逻辑地址0x12345转换为二进制。0x12345对应的二进制为0001 0010 0011 0100 0101。
- 因为页面大小为4KB = 2^12B,所以页内偏移量占12位。那么,逻辑地址的低12位为页内偏移量,即00 0101 0001 0001 01,高4位为页号,即0001,也就是页号为1。
- 从页表中查得页号1对应的物理块号为3。
- 物理地址 = 物理块号 << 12 | 页内偏移量。将物理块号3转换为二进制为0011,左移12位后为0011 0000 0000 0000,再与页内偏移量00 0101 0001 0001 01进行按位或运算,得到物理地址为0011 0001 0100 0101,转换为十六进制为0x3145。
例题2
设有一页式存储管理系统,向用户提供的逻辑地址空间最大为16页,每页2KB,内存总共有8个存储块,试问逻辑地址至少应为多少位?内存空间有多大?
题目解答:
- 因为逻辑地址空间最大为16页,2^4 = 16,所以页号需要4位来表示。
- 每页2KB = 2^11B,所以页内偏移量需要11位来表示。
- 那么逻辑地址至少应为4 + 11 = 15位。
- 内存总共有8个存储块,每个存储块大小与页面大小相同为2KB,所以内存空间大小为8 × 2KB = 16KB。
例题3
在一个分页存储管理系统中,采用快表(TLB)和慢表(内存中的页表)相结合的方式进行地址转换。假设快表的命中率为80%,访问快表的时间为10ns,访问慢表的时间为100ns,访问内存的时间为100ns,处理一次缺页中断的平均时间为100ms(已含更新TLB和页表的时间),进程的驻留集大小固定为2页,采用最近最少使用(LRU)页面置换算法。若某进程在执行过程中访问了逻辑地址A,导致了一次缺页中断,请问该进程访问地址A的有效访问时间是多少?
题目解答:
- 由于发生了缺页中断,首先需要处理缺页中断,时间为100ms = 100,000,000ns。
- 缺页中断处理完后,要重新访问地址A,此时先访问快表(命中率80%),若命中则访问时间为10ns + 100ns(访问内存) = 110ns;若未命中,访问慢表,时间为100ns(访问慢表) + 100ns(访问内存) = 200ns。
- 这里因为之前发生了缺页中断,所以第一次访问快表肯定未命中,访问慢表后更新快表,第二次访问快表命中的概率为80%。所以平均访问时间为:
0.8 × ( 10 + 100 ) + 0.2 × ( 100 + 100 ) = 88 + 40 = 128 n s 0.8\times(10 + 100)+0.2\times(100 + 100)=88 + 40 = 128ns 0.8×(10+100)+0.2×(100+100)=88+40=128ns - 那么该进程访问地址A的有效访问时间 = 处理缺页中断时间 + 重新访问地址A的平均时间 = 100,000,000 + 128 = 100,000,128ns。