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.内存管理-操作系统的资源分配大师
    • 前言
    • 内存的基本概念
      • 什么是内存?
      • 地址空间
    • 虚拟内存:内存管理的革命
      • 为什么需要虚拟内存?
      • 虚拟内存的工作原理
    • 页面置换算法
      • 页面错误
      • 常见的页面置换算法
      • LRU算法的实现
    • 内存分配策略
      • 固定分区 vs 动态分区
      • 动态分区分配算法
    • 内存映射文件
      • 什么是内存映射文件?
      • 内存映射的优势
    • 结语
  • 16.内存管理-操作系统的资源分配艺术
  • 内存管理-操作系统的核心资源分配
  • 内存管理-操作系统的核心资源分配器
  • 内存管理-操作系统的核心资源分配机制
  • 内存管理:操作系统的核心资源调度
  • 内存管理:操作系统的资源分配大师
  • 内存管理 - 操作系统的资源分配核心
  • 内存管理:操作系统的资源分配艺术
  • 文件系统与I/O管理-操作系统的数据持久化桥梁
  • 设备管理-操作系统的硬件交互之门
  • 进程间通信-操作系统的对话桥梁
  • 操作系统安全与保护-数字世界的守护者
  • 调度算法-操作系统的指挥棒
  • 死锁-操作系统的资源竞争困境
  • 系统调用-应用程序与操作系统的对话桥梁
  • 虚拟化技术-操作系统的资源抽象魔法
  • 实时操作系统-时间的守护者
  • 并发控制-操作系统的协同艺术
  • 中断处理-操作系统的生命线
  • 分布式操作系统-跨越多机的资源协调大师
  • 操作系统启动过程-从按下电源键到可用的奇妙旅程
  • 页面置换算法-操作系统的内存魔术师
  • operating_system
Jorgen
2023-10-15
目录

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

# 前言

嗨,大家好!在前面的文章中,我们已经一起漫游了计算机系统的奇妙世界,也深入探讨了操作系统的核心调度单元——进程与线程。但是,有没有想过,当我们的程序在CPU上欢快地运行时,它们的数据都待在哪里呢? 没错,就是内存!今天,我们就来聊聊操作系统如何像一位精明的资源分配大师,高效地管理着计算机中最珍贵的资源之一——内存。

提示

内存管理是操作系统的核心功能之一,它负责跟踪每个内存单元的状态,决定哪些进程可以使用哪些内存单元,以及何时分配和回收内存。

# 内存的基本概念

# 什么是内存?

内存(Memory)是计算机中用于临时存储数据和指令的硬件组件。与硬盘不同,内存的读写速度非常快,但断电后数据会丢失。我们可以把内存想象成一张办公桌,而硬盘则是文件柜:

  • 办公桌(内存):空间有限,但取放东西非常快,适合当前正在处理的工作
  • 文件柜(硬盘):空间大,但取放东西慢,适合长期存储

# 地址空间

每个进程都有自己的地址空间(Address Space),这是进程可以使用的内存地址范围。地址空间分为几个部分:

  • 代码段:存储程序的机器指令
  • 数据段:存储全局变量和静态变量
  • 堆:用于动态内存分配
  • 栈:存储局部变量和函数调用信息

内存布局示意图

THEOREM

地址空间隔离是操作系统的基本要求之一,确保一个进程不能随意访问另一个进程的内存空间,从而保证系统的安全性。

# 虚拟内存:内存管理的革命

# 为什么需要虚拟内存?

没有虚拟内存的早期计算机系统中,程序必须完全加载到物理内存中才能运行。这带来了几个问题:

  1. 内存碎片:随着程序的加载和卸载,内存中会产生许多无法利用的小块空间
  2. 内存容量限制:程序大小不能超过物理内存大小
  3. 内存利用率低:同时运行的程序总大小可能远小于物理内存,但无法有效利用空闲内存

# 虚拟内存的工作原理

虚拟内存技术通过以下方式解决了这些问题:

  • 地址转换:将程序的虚拟地址转换为物理地址
  • 分页:将内存和进程地址空间划分为固定大小的块(页)
  • 按需加载:只将程序实际需要的部分加载到内存中

虚拟内存工作原理

提示

虚拟内存让每个进程都认为自己拥有独立的、连续的地址空间,而实际上这些地址可能分散在物理内存的不同位置。

# 页面置换算法

# 页面错误

当进程访问的页面不在内存中时,就会发生页面错误(Page Fault)。此时,操作系统必须从磁盘加载所需的页面到内存中,如果内存已满,还需要先选择一个页面换出到磁盘。

# 常见的页面置换算法

下面是一些经典的页面置换算法及其特点:

算法名称 描述 优点 缺点
FIFO 先进入内存的页面先被换出 实现简单 可能会出现Belady异常
LRU 最近最少使用的页面被换出 性能较好 实现成本高
LFU 访问频率最低的页面被换出 适合访问模式稳定 可能换出短期频繁使用的页面
OPT 换出最长时间不会被使用的页面 理论最优 无法实现,仅用于比较

# LRU算法的实现

LRU(Least Recently Used)算法是一种性能较好的页面置换策略,但实现起来有一定挑战:

// 使用哈希表+双向链表实现LRU缓存
struct Node {
    int key;
    int value;
    struct Node* prev;
    struct Node* next;
};

struct LRUCache {
    int capacity;
    int size;
    struct Node* head;
    struct Node* tail;
    struct HashTable* hash_table;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

"程序员的三大美德:懒惰、急躁和傲慢。" —— Larry Wall,Perl语言创造者

# 内存分配策略

# 固定分区 vs 动态分区

内存分配主要有两种策略:

  1. 固定分区:将内存划分为固定大小的分区,每个分区可以容纳一个进程

    • 优点:实现简单,分配速度快
    • 缺点:分区大小固定,难以适应不同大小的进程需求
  2. 动态分区:根据进程的实际需求分配内存

    • 优点:内存利用率高
    • 缺点:容易产生外部碎片

# 动态分区分配算法

常见的动态分区分配算法包括:

  • 首次适应(First Fit):选择第一个足够大的空闲分区
  • 最佳适应(Best Fit):选择足够大的最小空闲分区
  • 最坏适应(Worst Fit):选择足够大的最大空闲分区

动态分区分配

# 内存映射文件

# 什么是内存映射文件?

内存映射文件(Memory-mapped File)是一种将文件或文件部分直接映射到进程地址空间的技术。这使得文件访问就像访问内存一样简单高效。

# 内存映射的优势

  1. 简化文件I/O:无需显式的read/write系统调用
  2. 提高性能:利用操作系统的页面缓存和预读机制
  3. 进程间通信:多个进程可以映射同一文件,实现高效的数据共享
// 使用mmap映射文件的示例
void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);
1
2

# 结语

今天,我们一起探索了操作系统内存管理的精彩世界。从基本的内存概念到革命性的虚拟内存技术,从页面置换算法到内存分配策略,我们看到了操作系统如何巧妙地管理这一宝贵资源。

内存管理是操作系统中最复杂也最有趣的部分之一,它直接影响着应用程序的性能和系统的稳定性。理解内存管理不仅有助于我们写出更高效的程序,也能让我们对计算机系统有更深的认识。

提示

作为开发者,了解内存管理原理可以帮助我们写出更高效的代码,避免常见的内存问题,如内存泄漏、缓冲区溢出等。 ::>

未来,随着计算机体系结构的不断演进,内存管理技术也将继续发展。从NUMA架构到持久性内存,从非易失性内存到新型存储级内存,这些新技术都将为操作系统带来新的挑战和机遇。

希望这篇文章能帮助你更好地理解操作系统的内存管理机制。如果你有任何问题或想法,欢迎在评论区留言交流!让我们一起在计算机科学的奇妙旅程中继续前行!🚀

#内存管理#虚拟内存#页面置换
上次更新: 2026/01/28, 13:30:02
进程与线程:操作系统的核心调度单元
16.内存管理-操作系统的资源分配艺术

← 进程与线程:操作系统的核心调度单元 16.内存管理-操作系统的资源分配艺术→

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