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

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

  • 用户地址空间:用户态程序使用的虚拟内存区域区域
  • 内核地址空间:操作系统内核使用的虚拟内存区域
相关推荐
方便面不加香菜36 分钟前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通3 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..3 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
跨境数据猎手4 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA5 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter6255 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木5 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师5 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发6 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员6 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu