当前位置: 首页 > java >正文

操作系统:分页存储管理方式(精简版、含例题)

文章目录

  • 操作系统分页存储管理方式:从概念到实践的深度剖析
    • 一、引言
    • 二、分页存储管理的基本概念
      • (一)定义与核心思想
      • (二)页与物理块
      • (三)优势与场景
    • 三、分页存储管理的具体实现
      • (一)逻辑地址结构
      • (二)页表
      • (三)页表寄存器与地址转换
      • (四)内存分配与回收
    • 四、分页存储管理的优化技术
      • (一)快表(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)+(1h)×(tTLB+2×tmem) ,缺页时需加上调页时间。

(二)缺页中断

程序访页不在内存时触发缺页中断,流程为暂停进程、选置换页(内存满时 )、写回外存(页修改时 )、调入目标页、更新页表、恢复进程。影响因素有页面大小、程序局部性、页面置换算法。

(三)页面置换算法

  • 最佳置换(OPT):选未来最长时间不用的页,理论上缺页率最低,用于理论分析。
  • 先进先出(FIFO):选最早入内存的页,简单但可能出现“Belady现象”,性能差。
  • 最近最久未使用(LRU):依页面访问历史选最长未访问页,性能接近OPT,实现成本高。
  • 时钟(Clock):LRU近似算法,通过循环链表模拟指针,兼顾性能与复杂度,应用广泛。不同算法各有优劣,需依需求选择平衡内存利用率与响应速度。

六、实际操作系统中的分页应用案例

(一)Windows

采用多级页表结合快表机制,逻辑地址分页目录索引、页表索引和页内偏移。利用快表加速地址转换,引入“会话空间”“进程空间”实现内存隔离,内存分配回收结合伙伴系统,减少碎片。

(二)Linux

多级页表结构,支持多种页面大小。缺页中断和页面置换采用基于LRU的改进算法,维护多个LRU链表,引入透明大页技术优化内存使用。

(三)其他操作系统

  • macOS:采用统一虚拟内存架构,结合分页技术动态管理内存,引入内存压缩技术,物理内存不足时压缩不活跃页面,推迟页面置换。
  • 嵌入式操作系统(如VxWorks):分页管理轻量化高效化,用简单页表结构,针对硬件优化地址转换,依应用场景定制页面置换算法,保障关键任务实时稳定。

七、考研例题

例题1

在分页存储管理系统中,某进程的页表如下所示。已知页面大小为4KB,逻辑地址为0x12345(十六进制),则该地址对应的物理地址是多少?

页号物理块号
02
13
25

题目解答

  1. 首先,将逻辑地址0x12345转换为二进制。0x12345对应的二进制为0001 0010 0011 0100 0101。
  2. 因为页面大小为4KB = 2^12B,所以页内偏移量占12位。那么,逻辑地址的低12位为页内偏移量,即00 0101 0001 0001 01,高4位为页号,即0001,也就是页号为1。
  3. 从页表中查得页号1对应的物理块号为3。
  4. 物理地址 = 物理块号 << 12 | 页内偏移量。将物理块号3转换为二进制为0011,左移12位后为0011 0000 0000 0000,再与页内偏移量00 0101 0001 0001 01进行按位或运算,得到物理地址为0011 0001 0100 0101,转换为十六进制为0x3145。

例题2

设有一页式存储管理系统,向用户提供的逻辑地址空间最大为16页,每页2KB,内存总共有8个存储块,试问逻辑地址至少应为多少位?内存空间有多大?

题目解答

  1. 因为逻辑地址空间最大为16页,2^4 = 16,所以页号需要4位来表示。
  2. 每页2KB = 2^11B,所以页内偏移量需要11位来表示。
  3. 那么逻辑地址至少应为4 + 11 = 15位。
  4. 内存总共有8个存储块,每个存储块大小与页面大小相同为2KB,所以内存空间大小为8 × 2KB = 16KB。

例题3

在一个分页存储管理系统中,采用快表(TLB)和慢表(内存中的页表)相结合的方式进行地址转换。假设快表的命中率为80%,访问快表的时间为10ns,访问慢表的时间为100ns,访问内存的时间为100ns,处理一次缺页中断的平均时间为100ms(已含更新TLB和页表的时间),进程的驻留集大小固定为2页,采用最近最少使用(LRU)页面置换算法。若某进程在执行过程中访问了逻辑地址A,导致了一次缺页中断,请问该进程访问地址A的有效访问时间是多少?

题目解答

  1. 由于发生了缺页中断,首先需要处理缺页中断,时间为100ms = 100,000,000ns。
  2. 缺页中断处理完后,要重新访问地址A,此时先访问快表(命中率80%),若命中则访问时间为10ns + 100ns(访问内存) = 110ns;若未命中,访问慢表,时间为100ns(访问慢表) + 100ns(访问内存) = 200ns。
  3. 这里因为之前发生了缺页中断,所以第一次访问快表肯定未命中,访问慢表后更新快表,第二次访问快表命中的概率为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
  4. 那么该进程访问地址A的有效访问时间 = 处理缺页中断时间 + 重新访问地址A的平均时间 = 100,000,000 + 128 = 100,000,128ns。
http://www.xdnf.cn/news/12700.html

相关文章:

  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 6.7 打卡
  • AtCoder Beginner Contest 408 D-F 题解
  • JDK8安装与配置
  • 探索Python融合地学:斗之气七段(运算符)
  • 冰箱智能化升级方案:WT3000A离在线AI语音模组赋能AI在线对话功能
  • Cline核心说明文档
  • 基于Java的离散数学题库系统设计与实现:附完整源码与论文
  • mysql整体架构
  • 在 Windows 11 或 10 上将 Visual Studio Code 添加到系统路径
  • C++学习-入门到精通【15】异常处理深入剖析
  • (附实例代码及图示)混合策略实现 doc-doc 对称检索
  • FreeRTOS任务调度过程vTaskStartScheduler()任务设计和划分
  • redis分布式锁
  • Python训练营打卡DAY47
  • 4G物联网模块提升智慧农业的自动化生产效率
  • 【CSS-5】深入理解CSS复合选择器:提升样式表的精确性与效率
  • 第三章支线二 ·函数幻阶:语法召唤与逻辑封印
  • A Execllent Software Project Review and Solutions
  • 函数式接口实现分页查询
  • AI开发 | 生成式AI在企业软件中的演进形态:从嵌入式到智能体
  • nodejs:用 nodemailer 发送一封带有附件的邮件
  • 【JavaSE】集合学习笔记
  • C++ 对 C 的兼容性
  • 基于Scala实现Flink的三种基本时间窗口操作
  • 跨平台资源下载工具:res-downloader 的使用体验
  • Vue3中computed和watch的区别
  • OpenLayers 导航之运动轨迹
  • 深入剖析 RocketMQ 中的 DefaultMQPushConsumerImpl:消息推送消费的核心实现
  • Docker基础(二)