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

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

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

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)提升物理内存利用率系统级实现操作系统内部

http://www.jsqmd.com/news/88210/

相关文章:

  • 19、Debian 系统初始化与自动进程管理全解析
  • 【设计模式|第四篇】适配器模式:让不兼容的接口协同工作
  • 线程是进程内的独立调度单位,是CPU调度的基本单元
  • 20、Debian系统管理:备份与设备管理全解析
  • 终于有人把大模型讲明白了:LLM 从入门到精通全解析
  • 2025年行业内评价好的3A信用认证代办多少钱,3A信用认证/3A企业信用认证/企业信用等级认证3A信用认证代理怎么选择 - 品牌推荐师
  • **P(Bufferfull)**:表示执行 wait 操作(即信号量减 1),用于判断是否有产品可消费
  • 21、Linux 备份指南:保障数据安全的实用方法
  • QMS软件系统:质量成本直降40%,让质管变“智造“——全星质量管理QMS软件系统应用解析
  • 永生数字系统:与之配套的测试哲学
  • 自动化?先搞懂这几点
  • asgiref终极指南:高效解决Python异步通信难题
  • 16、Debian内核:管理、特性与定制全解析
  • 早停法(Early_Stopping)
  • 探索四种商品售货机:MCGS 7.7 与三菱 PLC 联机之旅
  • 突破性多模态架构革命:Qwen3-VL-235B-A22B-Instruct-FP8重塑视觉语言交互边界
  • 医学影像深度学习知识点总结
  • 如何快速定位某个域名(如 deepskai.cn)对应的部署配置与代码目录(CentOS 示例)
  • CentOS 8 中可以使用 **dnf**(yum 的继任者)来安装 Docker。
  • 如何通过AutoGPT生成高质量技术博客为GPU算力引流
  • 18、Linux 远程操作与文件搜索实用技巧
  • Refine Next.js Turbopack 兼容性实战手记:从构建冲突到性能优化的完整指南
  • LIO-SAM性能实战评测:多传感器方案对比与场景适配深度解析
  • PAT 1175 Professional Ability Test
  • 22、Linux系统:备份、安装与管理全攻略
  • 缓存高可用架构-写缓存 - 实践
  • 多目标蜣螂优化算法NSDBO:微电网多目标优化调度的利器
  • 经典Agent架构实战之工具使用 (Tool Use)
  • 2025年市场上有实力的下水道疏通公司推荐,评价高的下水道疏通哪家强永邦环卫显著提升服务 - 品牌推荐师
  • 字符串移位包含问题与删除单词后缀问题