操作系统—内存分层体系 & 地址空间/生成
计算机体系结构
内存分层体系
CPU可以访问的内存包括两大类 : 寄存器 / cache(L1缓存 / L2缓存)
主存(物理内存)/ 磁盘(虚拟内存)主存是在运行程序时所需要保存的数据空间,而磁盘是用于持久化数据保存的数据空间。
从CPU寄存器到磁盘,读写速度不断降低,容量不断增大。
操作系统的内存管理
目标
-
抽象:逻辑地址空间
-
保护:独立地址空间
-
共享:访问相同内存
-
虚拟:更多的地址空间
-
物理地址空间:主存和硬盘
-
逻辑地址空间:运行的程序
内存管理的不同方法
-
程序重定位(relocation)
-
分段(segmentation)
-
分页(paging)
-
虚拟内存(virtual memory)
-
按需分页虚拟内存
➢ 目前多数系统(如 Linux)采用
实现高度依赖于硬件
- 必须知道内存架构(与计算机存储架构紧耦合)
- MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求
地址空间
地址空间定义
- 物理地址空间 —— 硬件支持的地址空间( a d d r e s s : [ 0 , M a x s y s ] address : [0, Max_{sys}] address:[0,Maxsys])
- 逻辑地址空间 —— 一个运行在程序所拥有的的内存范围( a d d r e s s : [ 0 , M a x p r o g ] address : [0, Max_{prog}] address:[0,Maxprog])
逻辑地址生成
- .c file 函数位置、变量名即逻辑地址。
- .s file 汇编语言中更加贴近机器语言,但是依然用符号代表变量名字。
- .o file 机器语言中,起始地址都是从0开始的,把变量名转换为地址。
- linker把多个.o file变成一个单一的.exe file。
- .exe file 中,地址已经做了全局的分布,不同的.o file程序的地址在单一程序中已经有各自的定义。
- .exe file 通过loader放到内存中运行,会有一定的偏移量,所以程序依照偏移量来进行正确数据的访问和指令的操作。
物理地址生成
- CPU根据指令,查找逻辑地址的物理地址在什么地方。
- 根据什么查找?MMU将逻辑地址映射到物理地址。
地址安全检查
操作系统建立逻辑地址到物理地址的映射,这个关系可以放到内存中,由CPU进行缓存,加快访问过程。
- 使应用程序在内存中正常执行,同时保证在内存中不同的应用程序之间不会相互破坏,因为操作系统会进行地址安全检查。
整理自 【清华大学】 操作系统