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

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

文章目录

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

相关文章:

  • 无需登录即可使用的Web应用网站
  • MySQL事务与锁中的MVCC 深度解析与面试题讲解
  • C++学习-入门到精通【15】异常处理深入剖析
  • Docker安装MQEX
  • 20250607在荣品的PRO-RK3566开发板的Android13的uboot中使用gpio命令来配置GPIO的状态
  • VBA进度条ProgressForm1
  • 振动力学:多自由度系统
  • 现代C++特性(一):基本数据类型扩展
  • WaytoAGI东京大会开启AI全球化新对话:技术无国界,合作促创新
  • PCB设计教程【大师篇】——STM32开发板电源设计(电压基准、滤波电容)
  • PG 分区表的缺陷
  • 自制操作系统(五、重写引导部分和C语言的使用)
  • c++学习-this指针
  • 【仿生机器人】仿生机器人智能架构:从感知到个性的完整设计
  • 《Progressive Transformers for End-to-End Sign Language Production》复现报告
  • 【LangchainAgent】Agent基本构建与使用
  • 第七章 监听一致性协议 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • 【C/C++】std::vector成员函数清单
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
  • 字符串字典序最大后缀问题详解
  • 前几年做那个网站能致富/引流黑科技app
  • 网站建设公司-山而/长尾词在线挖掘
  • 承接各类网站建设/西安竞价托管公司
  • 创意网红墙图片/企业seo排名有 名
  • 100个好听到爆的公司名字/wifi优化大师下载
  • wordpress图书馆主题/seo优化神器