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

linux学习笔记 (10) 进程的内存管理

内存管理

核心元素与逻辑

物理内存

  • 图中上方从 0 到 23 编号的区域是物理内存的分块(物理页 / 页框),不同颜色标注了被使用的情况,比如 “内核使用” 区域是操作系统内核占用的内存,其他带数字(如 0、1、2 等)的块是用户进程使用的物理页。

逻辑页(用户进程的地址空间分块)

  • 图中下方左侧橙色的 “0、1、2、3” 和右侧绿色的 “0、1、2、3、4、5”,分别代表两个用户进程的逻辑地址空间分块(逻辑页)。进程的逻辑地址是连续的,但实际在物理内存中可能不连续。

页表(映射关键)

  • 每个进程都有一个页表,用来记录 “逻辑页号” 与 “物理页号(物理内存块编号)” 的对应关系。
  • 以左侧进程为例,页表中 “逻辑页 0” 对应 “物理页 4”、“逻辑页 1” 对应 “物理页 10” 等,这意味着:当进程访问 “逻辑页 0” 的内容时,实际会被映射到物理内存的 “页 4” 中去读取 / 写入数据。
  • 右侧进程的页表同理,“逻辑页 0” 对应 “物理页 7”、“逻辑页 1” 对应 “物理页 14” 等,实现了自身逻辑地址到物理地址的转换。

分页管理的作用

  • 内存离散分配:进程的逻辑页可以分散存放在物理内存的不连续页框中,提高内存利用率(避免大段连续空闲内存才能加载进程的限制)。
  • 地址转换:通过页表,CPU 能把程序中的逻辑地址(“逻辑页号 + 页内偏移”)自动转换为物理地址(“物理页号 + 页内偏移”),让进程 “以为” 自己在访问连续的内存,实则由页表完成底层的离散映射。

虚拟内存

结合了 页表 + 地址转换硬件(MMU) + 换页策略(Page Replacement) + 磁盘交换区(Swap/Pagefile)
  1. 虚拟地址空间:程序看到的连续内存范围。
  2. 页表:记录每个虚拟页的状态(在物理内存 / 磁盘 / 未分配)。
  3. MMU(内存管理单元):硬件,负责在访问内存时自动做地址转换。
  4. 交换区(Swap/Pagefile):硬盘上的区域,存放暂时不用的页。
  5. 操作系统的换页策略:决定什么时候把页换入 / 换出。
它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,根据需要在磁盘和主存之间来回传送数据,使得能够运行比内存大的多的进程。
它为每个进程提供了一致的地址空间,从而简化了存储器管理
它保护每个进程的地址空间不被其他进程破坏

进程与虚拟内存的关系

1. 为每个进程提供统一的、独立的地址空间
  • 没有虚拟内存:所有进程和操作系统都直接读写物理内存。进程A的错误写入可能覆盖进程B或操作系统的重要数据,导致崩溃。
  • 有虚拟内存:每个进程都认为自己独享整个CPU地址空间(例如,在32位系统上,每个进程都认为自己拥有从0x000000000xFFFFFFFF的4GB连续内存)。
  • 实现方式:操作系统和内存管理单元(MMU)通过页表将每个进程的虚拟地址映射到物理内存的物理地址
  • 好处
  • 进程隔离:进程无法直接访问其他进程或内核的数据,安全性、稳定性极大提升。
  • 简化编程:程序员无需关心程序具体被加载到物理内存的哪个位置,链接器和加载器的工作变得非常简单。
2. 允许高效共享内存
  • 共享库(如DLL, .so文件):多个进程可以将自己的虚拟内存页映射到同一份物理内存中的共享库代码。节省大量内存。
  • 进程间通信(IPC):可以通过共享内存的方式,让两个进程的虚拟地址空间映射到同一块物理内存,从而实现高速数据交换。
3. 使得内存分配(Heap)更加灵活和安全
  • 进程中使用mallocnew申请堆内存时,分配的是虚拟地址。
  • 只有在实际读写该内存时,操作系统才会通过缺页中断为其分配真正的物理页帧(按需分配)。
  • 进程的堆空间可以远大于物理内存,因为不常用的内存页可以被交换到磁盘上。
4. 工作流程示意
进程A执行指令 -> 访问虚拟地址0x4000 -> CPUMMU查询进程A的页表 -> 映射到物理地址0x12345000
进程B执行指令 -> 访问虚拟地址0x4000 -> CPUMMU查询进程B的页表 -> 映射到物理地址0x54321000
  • 相同的虚拟地址,通过不同的页表,映射到完全不同的物理地址。这就是实现隔离的核心机制。
虚拟内存是操作系统为了实现进程的“隔离性”和“独立性”而采用的核心底层机制。没有虚拟内存,现代意义上的多进程操作系统就无法安全、稳定地运行。
http://www.dtcms.com/a/435801.html

相关文章:

  • Java学习笔记Day13
  • .net网站设计企业信息公示网站
  • 网站后台建设招聘中山专业网站制作
  • 怎么免费建设自己网站什么网站可以分享wordpress
  • 做影片的网站描述网络平台建设公司排名
  • 有阿里云主机管理平台如何自己做网站自己制作头像的网站 设计 动漫
  • 滨州的网站建设深圳推广软件十年乐云seo
  • .ent做的网站有哪些安卓市场下载app
  • 免费发外链的网站工会网站建设比较好的工会
  • 网站开发完整视频做平面设计的网站
  • 凡科建设网站怎样收录百度上海网站建设服务多少钱
  • 如何设计一个自动化测试框架?
  • 企业网站空间多大建设数据库搜索网站
  • 网站建设基本流程心得用dede做的网站首页
  • 从ModelScope下载模型(平替huggingface 的最优选择)
  • 免费创建属于自己的网站平顶山网站开发
  • 学校网站首页制作公司网站快速备案
  • 汝阳县住房与城乡建设局建局网站房产最新消息今天新闻
  • 免费企业建站开源系统破解asp网站后台地址
  • I/O模型:用select实现多路复用I/O(linux下C语言版)
  • uni做网站首页网站宝的作用
  • MySQL连接时提示ERROR 2002 (HY000)解决方案
  • ORB_SLAM2原理及代码解析:InsertKeyFrame() 函数
  • 大文件去重 (上)
  • 自建企业网站教程有没有做网站的高手
  • 网上做家教的网站知名seo电话
  • 线程中信号量与条件变量详解
  • 做网站的收获wordpress怎样恢复数据库
  • 泉州专门做网站怎么确定网站关键词
  • 七台河北京网站建设电子商务具体是做什么的