news 2026/2/21 2:26:10

存储管理技术主要分为页式、段式和段页式三种,它们在内存空间的划分方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
存储管理技术主要分为页式、段式和段页式三种,它们在内存空间的划分方式

存储管理技术主要分为页式、段式和段页式三种,它们在内存空间的划分方式、地址结构及映射机制上各有特点:

1. 页式存储管理

  • 核心思想:将程序的逻辑地址空间和物理内存划分为大小相等的“页”(Page)和“页框”(Frame),以页为单位进行内存分配。
  • 地址结构:虚地址由“页号 + 位移量(页内偏移)”组成。
  • 映射机制:系统为每个进程建立一张“页表”,记录逻辑页号到物理页框号的映射关系。
  • 优点:实现简单,内存利用率较高(仅存在内部碎片)。
  • 缺点:不支持分段保护与共享,缺乏对程序逻辑结构的支持。
// 示例:页表项结构structPageTableEntry{intvalid;// 是否在内存中intframe_num;// 对应的物理页框号intdirty;// 是否被修改过};

2. 段式存储管理

  • 核心思想:按程序的逻辑模块(如主函数、堆栈、数据段等)划分成若干个大小不一的“段”(Segment)。
  • 地址结构:虚地址由“段号 + 段内位移”构成。
  • 映射机制:系统为每个进程建立“段表”,每项包含段基址、段长、访问权限等信息。
  • 安全控制:通过存储保护键或访问权限位防止越界访问。
  • 优点:支持模块化编程、便于共享与保护、符合用户视角。
  • 缺点:产生外部碎片,内存分配与回收较复杂。

3. 段页式存储管理

  • 核心思想:先按逻辑意义分段,再在段内部分页,结合两者优势。
  • 地址结构:虚地址 = “段号 + 页号 + 位移量”。
  • 映射机制:每个进程有“段表”,段表项指向该段对应的“页表”;页表再完成页到页框的映射。
  • 优点:既支持逻辑分段管理,又提高内存利用率(减少外部碎片)。
  • 缺点:地址转换需两次查表(段表+页表),增加硬件开销,适用于大型操作系统。

页面调度算法(页面置换算法)

当发生缺页中断且内存已满时,需选择一个页面换出。目标是尽量减少缺页率。

算法原理特点
最优算法(OPT)淘汰将来最长时间不会被使用的页面理论最优,无法实现,用于性能评估基准
随机算法(RAND)随机选择一个页面淘汰实现简单,但命中率低,性能不稳定
先进先出(FIFO)淘汰最早进入内存的页面实现容易,但可能出现Belady现象(内存越多缺页越多)
最近最久未使用(LRU)淘汰最长时间未被访问的页面接近OPT效果,但实现成本高(需维护访问历史)
时钟算法(Clock / NRU)使用访问位模拟LRU,像钟面指针扫描淘汰候选页折中方案,广泛应用于实际系统

⚠️抖动(Thrashing)问题:当系统频繁进行页面换入换出时,CPU利用率急剧下降。原因通常是并发进程过多或工作集管理不当。解决方法包括:局部置换策略、工作集模型控制调入调出。


页式存储中的“内部碎片”是由于内存按固定大小的页面进行分配,而进程最后一页的数据可能不满一个完整的页面,导致该页中未被使用的部分形成浪费,这种浪费称为内部碎片

一、内部碎片的产生原因:

  • 页面大小通常是2的幂(如4KB、8KB),系统以整页为单位分配内存。
  • 进程逻辑空间的最后一个页可能只使用了部分空间,剩余空间无法分配给其他进程。
  • 例如:进程总大小为10KB,页面大小为4KB,则需分配3个页(共12KB),浪费2KB → 内部碎片 = 2KB。

📌关键点:内部碎片存在于已分配但未充分利用的页内空间,属于单个进程自身的空间浪费。


二、如何减小内部碎片的影响?

  1. 选择合适的页面大小

    • 小页面 → 减少每页浪费,降低内部碎片。
    • 但页面太小会导致页表项增多,增加内存开销和地址转换时间。
    • 需权衡:现代系统常用4KB~64KB作为折中。
  2. 采用多尺寸页支持(Large Page / Huge Page)

    • 操作系统提供多种页面尺寸(如4KB小页 + 2MB/1GB大页)。
    • 对大内存应用(如数据库)使用大页,减少页表项数量,同时相对降低碎片比例。
    • Linux 中通过hugetlbfs支持大页。
  3. 使用可变分区或混合管理机制

    • 在某些特殊场景下结合段式管理,避免强制等分。
    • 或在用户级内存池中实现细粒度分配(如malloc使用sbrk/mmap后自行分块)。
  4. 优化程序内存布局

    • 编译器或链接器对齐控制,尽量让数据紧凑排列,减少尾部空隙。
    • 使用内存对齐指令时注意不要过度填充。
  5. 引入伙伴系统 + Slab分配器(内核层面)

    • 虽不直接用于页式虚存,但在物理内存管理中配合使用,提升整体利用率。
    • 如Linux内核用Slab分配器管理小于一页的对象,避免频繁申请整页造成浪费。

总结对比表

方法减少碎片效果开销/复杂度适用场景
减小页面大小明显减少增加页表项、TLB压力通用系统设计
多页面尺寸有效平衡实现复杂大型服务器、高性能计算
用户态内存池规避问题编程复杂度高应用层优化
内核分配器(Slab)提升物理内存利用率系统级实现操作系统内部

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/20 9:05:27

asgiref终极指南:高效解决Python异步通信难题

asgiref终极指南:高效解决Python异步通信难题 【免费下载链接】asgiref ASGI specification and utilities 项目地址: https://gitcode.com/gh_mirrors/as/asgiref 在当今高并发的Web应用开发中,你是否经常面临同步代码阻塞异步流程、线程安全问题…

作者头像 李华
网站建设 2026/2/20 14:30:10

医学影像深度学习知识点总结

T1像和T2像的区别 T1像便于显示解剖结构,T2像便于显示病灶部位.FLAIR像便于显示结合水变化情况,人体内有自由水和结合水的分布,结合水的变化情况往往反映了局部组织出现梗塞情况,这种情况下采用FLAIR成像可以将这样的变化显示出来. FLAIR像(液体反转恢复),约等于T2成像 TR,TE,F…

作者头像 李华
网站建设 2026/2/20 11:51:46

从零到一:自动化3D建模的免代码解决方案

从零到一:自动化3D建模的免代码解决方案 【免费下载链接】nerfstudio A collaboration friendly studio for NeRFs 项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio 还在为复杂的3D建模软件感到头疼吗?想象一下,你只需要…

作者头像 李华
网站建设 2026/2/20 23:16:37

Kali中生成被控端

操作步骤:生成的被控端提交到www.virustotal.com检测

作者头像 李华
网站建设 2026/2/20 15:05:36

13、Linux 文本编辑与命令操作实用指南

Linux 文本编辑与命令操作实用指南 1. XEmacs:强大的编辑器 XEmacs 是 GNU 超级编辑器 Emacs 的变体,包含在 Caldera OpenLinux 中。在图形环境(如 X (KDE))下使用时,XEmacs 有额外的增强功能,这也是它名字中 “X” 的由来。而在终端中,它与普通的 Emacs 几乎完全相同…

作者头像 李华
网站建设 2026/2/20 20:39:09

20、Linux 备份全攻略

Linux 备份全攻略 1. 备份介质选择 如今,备份介质的选择丰富多样,以下为你详细介绍常见的几种备份介质: | 备份介质 | 特点 | 容量 | 速度 | 价格 | 可靠性 | | — | — | — | — | — | — | | 软盘 | 系统可能自带驱动器,方便获取,但速度慢、价格相对高,适合少量…

作者头像 李华