Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机系统漫游
  • 进程与线程:操作系统的核心调度单元
  • 12.内存管理-操作系统的资源分配大师
  • 16.内存管理-操作系统的资源分配艺术
    • 前言
    • 内存管理的目标
    • 内存分配机制
      • 连续分配
      • 非连续分配
    • 分页系统
      • 基本概念
      • 地址转换
    • 分段系统
      • 基本概念
      • 分页与分段的比较
    • 虚拟内存
      • 工作原理
      • 页面置换算法
    • 内存管理优化
    • 结语
  • 内存管理-操作系统的核心资源分配
  • 内存管理-操作系统的核心资源分配器
  • 内存管理-操作系统的核心资源分配机制
  • 内存管理:操作系统的核心资源调度
  • 内存管理:操作系统的资源分配大师
  • 内存管理 - 操作系统的资源分配核心
  • 内存管理:操作系统的资源分配艺术
  • 文件系统与I/O管理-操作系统的数据持久化桥梁
  • 设备管理-操作系统的硬件交互之门
  • 进程间通信-操作系统的对话桥梁
  • 操作系统安全与保护-数字世界的守护者
  • 调度算法-操作系统的指挥棒
  • 死锁-操作系统的资源竞争困境
  • 系统调用-应用程序与操作系统的对话桥梁
  • 虚拟化技术-操作系统的资源抽象魔法
  • 实时操作系统-时间的守护者
  • 并发控制-操作系统的协同艺术
  • 中断处理-操作系统的生命线
  • 分布式操作系统-跨越多机的资源协调大师
  • 操作系统启动过程-从按下电源键到可用的奇妙旅程
  • 页面置换算法-操作系统的内存魔术师
  • operating_system
Jorgen
2023-11-15
目录

16.内存管理-操作系统的资源分配艺术

# 前言

在之前的文章中,我们已经了解了计算机系统的基本构成和操作系统的核心调度单元——进程与线程。然而,当我们谈论进程运行时,有一个至关重要的资源往往被忽略:内存。内存管理是操作系统的核心功能之一,它决定了系统如何高效、安全地利用有限的内存资源。

内存管理就像是操作系统的"管家",负责在众多进程间公平分配资源,同时确保系统不会因为资源争用而崩溃。

# 内存管理的目标

操作系统进行内存管理主要实现以下几个目标:

  1. 抽象性:为进程提供统一的内存访问接口,隐藏硬件细节
  2. 保护:防止进程间相互干扰,保护操作系统内核不受用户程序影响
  3. 共享:允许多个进程安全地访问相同内存区域
  4. 虚拟化:为每个进程提供独立的地址空间,使它们认为自己拥有完整的内存
  5. 效率:尽可能减少内存访问时间,提高系统整体性能

# 内存分配机制

内存管理主要分为两大类:连续分配和非连续分配。

# 连续分配

连续分配为进程分配一块连续的物理内存空间。这种方法实现简单,但容易产生外部碎片问题。

  • 固定分区分配:将内存划分为固定大小的分区,每个分区只能装入一个进程
  • 动态分区分配:根据进程需求动态分配大小不一的分区,常用算法有:
    • 首次适应算法(First Fit)
    • 最佳适应算法(Best Fit)
    • 最坏适应算法(Worst Fit)

# 非连续分配

非连续分配允许进程的物理地址空间不连续,有效解决了外部碎片问题,主要包括:

  • 分页:将内存划分为固定大小的块(页框),进程的地址空间也划分为同样大小的页
  • 分段:根据程序的逻辑结构划分地址空间
  • 段页式:结合分段和分页的优点

# 分页系统

分页是现代操作系统最常用的内存管理方式之一。

# 基本概念

  • 页框(Frame):物理内存中固定大小的块
  • 页(Page):进程逻辑地址空间中同样大小的块
  • 页表(Page Table):记录逻辑页到物理页框的映射关系

# 地址转换

当进程访问内存时,系统需要进行地址转换:

  1. 逻辑地址 = 页号 + 页内偏移
  2. 通过页表查找页号对应的页框号
  3. 物理地址 = 页框号 + 页内偏移

THEOREM

页表通常存储在内存中,为了加速地址转换,现代CPU中引入了TLB(Translation Lookaside Buffer),即快表,用于缓存最近使用的页表项。

# 分段系统

分段根据程序的逻辑结构划分地址空间,每个段有独立的意义。

# 基本概念

  • 段(Segment):具有逻辑意义的地址空间部分,如代码段、数据段、堆栈段
  • 段表(Segment Table):记录各段的起始地址和长度

# 分页与分段的比较

特性 分页 分段
划分依据 固定大小 逻辑意义
地址空间 二维(页号+偏移) 二维(段号+偏移)
外部碎片 无 有
内部碎片 有 无

# 虚拟内存

虚拟内存是现代操作系统的关键技术,它允许进程使用比物理内存更大的地址空间。

# 工作原理

虚拟内存通过按需调页实现,即只在需要时才将页面加载到内存:

  1. 进程开始运行时,只有少量页面加载到内存
  2. 当访问未加载的页面时,触发缺页中断
  3. 操作系统将所需页面从磁盘调入内存
  4. 如果内存已满,使用页面置换算法选择一个页面换出

# 页面置换算法

常用的页面置换算法包括:

  1. 最佳置换算法(OPT):理论上最优,但无法实现
  2. 先进先出算法(FIFO):实现简单,但可能产生Belady异常
  3. 最近最少使用算法(LRU):性能较好,但实现成本高
  4. 时钟算法(CLOCK):LRU的近似实现,性能较好

提示

LRU算法虽然性能优秀,但需要硬件支持或额外的维护开销。在实际系统中,通常采用Clock算法或其变种作为折中方案。

# 内存管理优化

为了提高内存管理效率,现代操作系统采用多种优化技术:

  1. 内存压缩:将内存中的页面重新排列,减少碎片
  2. 内存过度分配:允许系统分配的总内存略大于物理内存
  3. 大页支持:使用比标准页更大的页,减少TLB miss
  4. 内存预取:预测程序未来的内存访问模式,提前加载可能需要的页面

# 结语

内存管理是操作系统的核心功能之一,它通过抽象、保护和虚拟化等手段,为进程提供了稳定、高效的内存访问环境。从早期的连续分配到现代的虚拟内存技术,内存管理一直在不断发展,以应对日益增长的内存需求和复杂的计算环境。

理解内存管理不仅有助于我们更深入地认识操作系统的工作原理,还能帮助我们编写出更高效、更可靠的应用程序。在未来的发展中,随着新型存储介质和计算架构的出现,内存管理技术也将继续演进,为计算世界提供更坚实的基础。

正如我们之前讨论的进程与线程是操作系统的核心调度单元,而内存管理则是这些调度单元能够高效运行的"后勤保障"。只有理解了内存管理的艺术,我们才能真正掌握操作系统的精髓。🏗️💡

#内存管理#虚拟内存#分页#分段#内存分配
上次更新: 2026/01/28, 14:21:05
12.内存管理-操作系统的资源分配大师
内存管理-操作系统的核心资源分配

← 12.内存管理-操作系统的资源分配大师 内存管理-操作系统的核心资源分配→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式