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. 如果数据在硬盘上(页面交换),触发"缺页中断",操作系统将数据从硬盘加载到内存,然后继续执行

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

  • 用户地址空间:用户态程序使用的虚拟内存区域区域
  • 内核地址空间:操作系统内核使用的虚拟内存区域
相关推荐
一叶知秋yyds12 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
斯普信云原生组13 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
safestar201214 小时前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
来一颗砂糖橘14 小时前
负载均衡的多维深度解析
运维·负载均衡
楠奕14 小时前
CentOS7安装GoldenDB单机搭建及常见报错解决方案
linux·运维·服务器
GCTTTTTT15 小时前
远程服务器走本地代理
运维·服务器
剑锋所指,所向披靡!15 小时前
Linux常用指令(2)
linux·运维·服务器
不愿透露姓名的大鹏15 小时前
Oracle归档日志爆满急救指南
linux·数据库·oracle·dba
飞Link15 小时前
逆向兼容的桥梁:3to2 自动化降级工具实现全解析
运维·开发语言·python·自动化
W.W.H.15 小时前
嵌入式常见的面试题1
linux·网络·经验分享·网络协议·tcp/ip