计算机体系结构/内存分层体系
地址空间&地址生成
连续内存分配
计算机体系结构
CPU:程序、软件执行的控制
内存:放置程序代码和数据
I/O:匹配外设
内存的层次结构(CPU要访问的程序或指令存储在内存的什么地方)
主存的数据一掉电就没了,所以需要把永久需要的数据保存到硬盘中
内存不够时,暂时不需要访问的数据放到硬盘
地址空间&地址生产:
- 地址空间定义:
- 物理地址空间:内存条代表的主存及硬盘代表的存储
- 逻辑地址空间:一个运行的程序所拥有的内存范围(一维)
- 地址生成:
函数名称、变量都是逻辑地址 - 地址安全检查:保护进程之间的访问,使他们互相不干扰
逻辑地址空间的生成:
- 以C程序为例(函数的位置、变量名称都是地址)
- 编译后成为汇编程序(用符号代表变量和函数的名字)
- 汇编器将汇编语言转为机器语言.o,起始地址从0开始,把变量名和函数转换成地址
- linker将多个单一的.o文件转换为exe文件
- loader把exe(硬盘中)放到内存中执行,放到内存后有个偏移量
物理地址空间的生成(逻辑地址如何对应到物理地址中):
CPU执行指令,需要从内存中取出,放到物理内存中的地址需要从MMU中找。CPU中的MMU(内存管理单元)完成了逻辑地址和物理地址的映射
- 当cpu执行指令时,aou部件需要指令的内容,发出请求带的参数是逻辑地址
- mmu查找逻辑地址是否有对应的物理地址,如果没有,到内存的map中去找 ,如果找到了,CPU的控制器给主存发请求,需要某个物理地址的内容,即指令的内容
- 主存把内存的内容通过总线传给CPU
- CPU拿到指令内容后开始执行指令
连续内存分配:
- 内存碎片(空间内存不能被使用)问题
- 外碎片:分配单元间的未使用内存
- 内碎片:分配单元中的未使用内存
- 分区的动态分配
简单的内存管理办法:
- 当一个程序准许运行在内存中时,分配一个连续的区间
- 分配一个连续的区间给运行的程序以访问数据
- 第一适配
- 优势:
1. 简单
2. 易于产生更大空闲块,向着地址空间的结尾
- 劣势:
1. 产生外部碎片
2. 不确定性
- 最佳适配
- 优势:
1. 当大部分分配时小尺寸时非常有效
2. 比较简单
- 劣势:
1. 产生外部碎片
2. 重分配慢
3. 易产生很多没用的微小碎片
- 最差适配
- 优势:
1. 假如分配是中等尺寸效果最好
- 劣势:
1. 重分配慢
2. 外部碎片
3. 易于破碎大的空闲块以致大分区无法被分配
连续内存分配的缺点:
- 分配给一个程序的物理内存是连续的
- 内存利用率较低
- 有外碎片、内碎片的问题
非连续分配:
- 优点:
- 一个程序的物理地址空间是非连续的
- 更好的内存应用和管理
- 允许共享代码与数据(共享库等…)
- 支持动态加载和动态链接
- 缺点:
- 虚拟地址和物理地址之间的转换 -> 管理开销大
分段机制、分页机制
硬件如何支持分段机制【分段寻址方案】:
操作系统建立段表,按段表去物理内存寻址
分页机制【主要】:
基于页的寻址:需要页号和页内的偏移,分段机制中,段的长度可变,分页中,页内的偏移单位帧的大小不变
页帧(frame):物理内存的地址,由帧号、帧内偏移构成
建立从逻辑地址到物理地址的转换(pages to frames):
- 页表(由操作系统建立)
- MMU
基于分页机制的硬件实现