不怕再失去 2024-06-14 20:18 采纳率: 33.3%
浏览 4

关于linux内存映射机制的疑问

今天看x86内存管理,有个疑惑,程序是从硬盘加载到内存。这时内存里存的是虚拟内存,但是这个虚拟内存没有经过cpu的mmu内存管理单元进行段页式地址映射,是怎么转换成虚拟内存,难道通过总线进入内存的时候就是虚拟内存了,但这样好像说不通,难道先进入cpu进行映射吗再到内存去吗

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-14 20:18
    关注

    引自免费微信小程序:皆我百晓生

    在Linux系统中,内存管理是通过虚拟内存机制实现的,这涉及到多个层次的抽象与转换。当一个程序从硬盘加载到内存时,并非直接加载到物理内存,而是首先被加载到虚拟内存空间。虚拟内存是一个由操作系统提供的抽象概念,它为每个进程提供了独立的、连续的地址空间,而这些地址并不直接对应于物理内存中的地址。

    虚拟内存到物理内存的映射过程

    1. 程序加载:当程序启动时,其可执行文件(通常位于硬盘)被加载到进程的虚拟地址空间。这个虚拟地址空间是进程的视角,它看到的是一个连续的地址范围,但实际上,这些地址并未立即映射到物理内存。

    2. 分页机制:Linux使用分页机制将虚拟地址空间划分为固定大小的页面(通常是4KB)。每个页面都有一个唯一的虚拟地址,但它们并没有直接映射到物理内存的特定位置。相反,操作系统维护了一个页表结构,这个结构记录了虚拟页面到物理页面的映射关系。

    3. MMU的作用:CPU的内存管理单元(MMU)负责处理虚拟地址到物理地址的转换。当进程尝试访问一个虚拟地址时,MMU会检查页表,找到对应的物理地址。如果页表中没有对应的条目(即页面不在物理内存中),MMU会触发一个缺页异常,操作系统接收到这个信号后,会将相应的页面从磁盘读入物理内存,并更新页表。

    4. TLB缓存:为了加速地址转换过程,MMU内部有一个称为转换查找缓冲区(Translation Lookaside Buffer, TLB)的高速缓存。当MMU成功完成一次虚拟到物理地址的转换时,它会将这对映射存储在TLB中,以便后续的相同地址访问可以直接命中缓存,从而避免了每次访问都查询页表的开销。

    总结

    • 程序加载时,数据和代码被加载到虚拟地址空间,而不是直接加载到物理内存。
    • 通过页表和MMU,虚拟地址被转换为物理地址,这一过程包括页表查询和可能的缺页异常处理。
    • TLB缓存用于加速地址转换过程,提高内存访问效率。

    这种机制允许操作系统和硬件层面上的高效内存管理,同时为每个进程提供隔离的内存环境,增强了系统的安全性和稳定性。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月14日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?