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

内存管理概念

1. 内存管理的基本功能

内存管理是操作系统核心模块,需实现以下功能:

  • 分配与回收:管理内存空闲空间,为进程分配内存,回收终止进程的内存。
  • 地址转换:将程序的逻辑地址映射为内存的物理地址(重定位)。
  • 内存扩充:通过虚拟存储技术(如分页/分段)从逻辑上扩充内存。
  • 内存共享:允许多进程访问同一内存区域(如共享库代码)。
  • 存储保护:确保进程仅访问自己的内存空间,防止越界和干扰。

2. 逻辑地址与物理地址

类型

定义

特点

逻辑地址

程序编译/链接后生成的地址(从0开始),进程运行时使用。

进程私有,允许不同进程地址重叠(独立空间)。

物理地址

内存中实际存储单元的地址(硬件地址)。

全局唯一,是CPU访问内存的最终地址。

地址重定位:将逻辑地址转换为物理地址的过程,分为:

  • 静态重定位:装入时一次性完成(程序运行时不可移动)。
  • 动态重定位:执行时通过重定位寄存器动态转换(程序可移动,支持非连续分配)。

3. 程序的装入与链接

将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:

  1. 编译。由编译程序将用户源代码编译成若干目标模块。
  2. 链接。由链接程序将编译后形成的一组目标模块,以及它们所需的库函数链接在一起,形成一个完整的装入模块。
  3. 装入。由装入程序将装入模块装入内存运行。

(1)装入方式

方式

时机

特点

绝对装入

单道程序环境,编译时确定物理地址。

逻辑地址=物理地址,仅适用于静态内存分配。

静态重定位

装入时完成地址转换。

需分配连续内存,运行中不可移动、不可扩存。

动态重定位

执行指令时动态转换地址。

支持非连续分配、动态扩存,需硬件(重定位寄存器)支持。

(2)链接方式

方式

时机

优点

静态链接

程序运行前,链接为完整模块。

运行时无需再链接,速度快。

装入时动态链接

装入内存时边装边链。

便于修改模块、共享目标代码。

运行时动态链接

程序执行中需调用模块时链接。

节省内存(未用模块不装入),加快启动速度。


 

4. 进程的内存映像

进程在内存中的布局(从低地址到高地址):

  • 代码段(.text):只读的可执行指令,可共享(如共享库)。
  • 数据段(.data/.bss):全局变量和静态变量(.data初始化,.bss未初始化/初始化为0)。
  • :动态分配空间(如malloc),从低地址向高地址增长。
  • :函数调用栈(局部变量、返回地址),从高地址向低地址增长。
  • PCB:进程控制块,存放于系统区(内核空间)。 

 

5. 内存保护机制

确保进程互不干扰,核心是越界检查,两种实现方式:

  1. 上下限寄存器:存放进程内存的最小/最大物理地址,访问地址需在范围内。
  2. 基址+限长寄存器
  • 基址寄存器(重定位寄存器):存放进程起始物理地址(逻辑地址+基址=物理地址)。
  • 限长寄存器:存放进程最大逻辑地址(逻辑地址>限长则越界)。

特权控制:基址/限长寄存器仅能由内核通过特权指令修改,防止用户进程篡改。


6. 内存共享

  • 共享对象:只读区域(如可重入代码、共享库),多进程可共享同一份物理内存。
  • 实现方式
    • 分页系统:各进程页表中对应共享页的页表项指向同一物理页。
    • 分段系统:共享段在各进程段表中对应段表项指向同一物理段(更灵活)。
  • 优势:节省内存(如40个用户共享160KB文本编辑器代码,仅需1份副本)。

7. 内存分配方式演变

随OS发展,分配方式从简单到复杂:

  1. 单一连续分配:单道程序,内存分为系统区和用户区(利用率低)。
  2. 固定分区分配:多道程序,内存划分为固定大小分区(内部碎片)。
  3. 动态分区分配:根据进程需求动态划分分区(外部碎片)。
  4. 离散分配:分页/分段存储管理,将进程分散装入内存(无连续内存要求,利用率高)。

核心考点

  1. 逻辑地址vs物理地址:逻辑地址是进程视角,物理地址是硬件视角,通过重定位转换。
  2. 动态重定位:需重定位寄存器,支持程序移动和非连续分配,是现代OS的基础。
  3. 内存保护:基址+限长寄存器实现越界检查,确保进程隔离。
  4. 内存共享:仅只读区域可共享(如代码段),通过页表/段表指向同一物理内存实现。

总结

        内存管理核心功能与机制 内存管理负责分配/回收内存、地址转换(逻辑→物理)、虚拟扩充及共享保护。逻辑地址为进程私有,物理地址全局唯一,通过静态或动态重定位转换。程序需经编译、链接(静态/动态)和装入(绝对/重定位)加载到内存,进程映像包含代码段、数据段、堆栈等。内存保护通过基址+限长寄存器实现越界检查,共享仅限只读区域(如代码段)。分配方式从单一连续到离散(分页/分段),动态重定位和离散分配提升利用率。核心在于地址转换、空间分配及保护共享,离散分配为现代OS高效管理关键

一句话记忆:内存管理核心是“地址转换(逻辑→物理)、空间分配(连续/离散)、保护共享(隔离与复用)”,动态重定位和离散分配是现代OS高效利用内存的关键! ✨

http://www.dtcms.com/a/277466.html

相关文章:

  • Docker安装Nginx
  • Web:JS的三种引用方式
  • 《每日AI-人工智能-编程日报》--2025年7月12日
  • Windows 常用命令
  • 网络编程 JAVA
  • 视觉语言导航与目标导航
  • 【银行测试】基金项目测试详细,测试点+面试(一)
  • ​​LangChain专家养成:工具扩展/Agent决策/记忆控制三维进阶
  • 250707脑电分析课题进展——EEGLAB的使用
  • 前端工程化-构建打包
  • 大模型-量化技术
  • 前端构建工具 Webpack 5 的优化策略与高级配置
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • 神经网络的层与块
  • 掌握系统设计的精髓:12个核心设计模式的通俗解读
  • 【编程实践】利用open3d生成物体的最长边方向并可视化
  • 面向对象设计模式详解
  • CD49.【C++ Dev】容器适配器模式
  • 深入解析5G核心网容灾:UDM 故障场景下 SMF 容灾机制深度解析
  • C++ 单例模式实现
  • 【读书笔记】《C++ Software Design》第五章:The Strategy and Command Design Patterns
  • Java学习------设计模式(1)
  • ZKmall开源商城技术攻略:轻松掌握规则引擎与Spring Boot3接口的开发技巧
  • Linux V4L2应用编程常用结构体介绍
  • STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南
  • 面试150 从前序与中序遍历构造二叉树
  • STM32-第五节-TIM定时器-1(定时器中断)
  • Clojure和Golang中的Channel有什么异同(TBC)
  • 构建应用内智能:衡石嵌入式BI如何打造“指标中台”驱动的场景化分析
  • Python文件路径操作全面指南:从基础到高级应用