Binder 预备知识

虚拟内存与物理内存

为什么要引入虚拟内存机制?可以说,虚拟内存是现代操作系统的核心基石,它解决了如下几个问题:

  1. 内存容量限制:早期计算机的物理内存非常有限,程序可能需要的内存超过实际安装的物理内存。虚拟内存允许程序使用比物理内存更大的地址空间,通过将部分数据临时存储在硬盘上来扩展可用内存。
  2. 内存隔离与保护:如果多个程序直接访问物理内存,一个程序可能会意外(或恶意)修改另一个程序的数据,导致系统崩溃。虚拟内存为每个进程提供独立的地址空间,进程之间互不干扰。
  3. 简化编程:程序员不需要关心物理内存的实际布局、其他程序占用了哪些内存,或者如何避免冲突。每个程序都认为自己拥有完整、连续的内存空间,从地址 0 开始。
  4. 内存管理效率:物理内存可能是碎片化的,但虚拟内存可以将分散的物理内存块映射为连续的虚拟地址,使内存分配和使用更高效。

虚拟内存像是一种"幻术"。它让每个程序都以为自己独占整个的 4GB(32 位)或 256TB(64 位系统低 48 位是有效的寻址位数)。但实际上,物理内存是有限的、多程序共享的,甚至可能是不连续的。

虚拟内存的实现通常依赖于硬件支持和操作系统的协作。硬件通常是指 CPU 中的硬件组件 MMU(内存管理单元),在 x86 架构中,虚拟内存通过分页机制实现,将虚拟地址转换为物理地址。虚拟地址转换为物理地址的示意图如下:

图中虚拟地址侧面的箭头,以及页表中的虚拟地址表明,虚拟地址是从 0 开始的连续内存。但物理地址则是不连续的(进程 1 的虚拟地址 0、1 分别对应物理内存的 1、4;进程 2 虚拟地址 0、1 对应物理地址 2、3)。

工作流程:

  1. 程序所在的进程访问某个虚拟地址
  2. MMU 查找 Page Table(页表),将虚拟地址转换为物理地址
  3. 如果数据在物理内存中,直接访问
  4. 如果数据在硬盘上(页面交换),触发"缺页中断",操作系统将数据从硬盘加载到内存,然后继续执行

虚拟地址空间会被进一步划分为用户地址空间与内核地址空间:

  • 用户地址空间:用户态程序使用的虚拟内存区域区域
  • 内核地址空间:操作系统内核使用的虚拟内存区域
相关推荐
聆风吟º1 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客2 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉5 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力5 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp5 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎5 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力5 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene5 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.5 小时前
02-本地部署Ollama、Python
linux·运维·服务器
醇氧5 小时前
【linux】查看发行版信息
linux·运维·服务器