操作系统内存管理通过页来管理的

一个程序读取一个文件的过程

  1. 进程发起 read 请求,调用系统API 进入内核空间:
    • 当一个进程需要从文件系统或者其他设备(如硬盘)读取数据时,它会通过系统调用(如 read())进入内核空间。进程不能直接访问硬件,因此需要通过系统调用请求操作系统帮助完成读取操作。
  2. 系统查询内存页是否已经存在该数据:
    • 在进入内核空间后,操作系统首先会检查请求的数据是否已经被加载到内存中。如果请求的数据页已经在内存中(可能通过缓存技术或预加载技术),操作系统可以直接返回数据给进程,避免了额外的磁盘访问时间。
  3. 数据不存在且系统内存不足:
    • 如果请求的数据页不在内存中,而且系统的内存空间不足以容纳新的数据页,操作系统需要触发内存页置换策略。内存页置换策略可以是一种算法,用于决定哪些数据页将被替换出去,以便为新的数据页腾出空间。
  4. 引发缺页异常中断信号:
    • 当操作系统确定需要从磁盘或其他存储介质加载数据页时,会引发缺页异常(Page Fault)。这是一种特殊的中断信号,告知操作系统当前发生了访问不在内存中的数据页的情况。
  5. CPU 处理中断并向磁盘控制器发起请求:
    • 当 CPU 收到缺页异常后,操作系统会采取措施去获取数据。通常情况下,操作系统会向磁盘控制器发起请求,请求将数据页从磁盘读取到内存中。这个过程可能会通过 DMA(直接内存访问)来提高效率,减少 CPU 的介入。
  6. MMU 使用映射技术将数据映射到进程虚拟内存地址空间:
    • 一旦数据页加载到内存中,操作系统的内存管理单元(MMU)会使用映射技术,将数据页的物理地址映射到请求进程的虚拟地址空间中。MMU 确保进程能够正确访问其虚拟地址空间中的数据,而不需要直接了解物理内存的详细布局。
  7. 数据拷贝到进程虚拟内存空间中:
    • 最后,操作系统会将请求的数据页内容从物理内存复制到进程的虚拟内存空间中。这样,进程就能够通过访问其虚拟地址空间来获取所需的数据。
posted @ 2024-06-26 11:38  vx_guanchaoguo0  阅读(2)  评论(0编辑  收藏  举报