03-计算机体系结构及内存分层体系
03-计算机体系结构及内存分层体系
计算机体系结构/内存分层体系
计算机体系结构
CPU/内存/IO
内存分层体系
CPU
寄存器
一级缓存 寄存器和一级缓存是在CPU内部的,速度很快3.6GHz,容量很小
二级缓存 在微处理器内部 速度稍快
主存 速度快 1.3GHz
硬盘(虚拟内存)速度慢 5ms(寻道时间)
在操作系统的内存管理范例
操作系统内核的职责
- 抽象 对逻辑地址空间的抽象
- 保护 独立地址空间
- 共享 访问相同内存
- 虚拟化 更多的地址空间
在操作系统中管理内存的不同方法
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
实现高度依赖于硬件
- 必须知道内存架构
- MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求
地址空间 & 地址生成
地址空间定义
物理地址空间-硬件支持的地址空间
起始地址0,到地址$Max_sys$ 包括主存和磁盘
逻辑地址空间-一个运行的程序所拥有的内存范围
起始地址0,到地址$Max_prog$
地址生成
CPU方面
- 运算器需要在逻辑地址的内存内容
- 内存管理单元寻找在逻辑地址和物理地址之间的映射
- 控制器从总线发送在物理地址的内存内容的请求
内存方面 - 内存发送物理地址内存的内容给CPU
操作系统方面
在以上4步之前建立逻辑地址和物理地址的映射
地址安全检查
操作系统需要设置逻辑地址空间的基址和界限
在程序执行之前会判断所需要的程序或数据是否在地址范围内
连续内存分配
内存碎片问题
空闲内存不能被利用
外部碎片 在分配单元间的未使用内存
内部碎片 在分配单元中的未使用内存
分区的动态分配
简单的内存管理方法
1)当一个程序准许运行在内存中时,分配一个连续的区间
2)分配一个连续的内存区间给运行的程序以访问数据
操作系统需要跟踪内存的状态
满块
空块(孔洞)
三种简单的算法进行内存分配
- 第一适配
为了分配n字节,使用第一个可用的尺寸比n大的空闲块
需求:
按地址排序的空闲块列表
分配需要寻找一个合适的分区
重分配需要检查,看是否分区能合并于相邻的空闲分区(若有)
优势
简单
易于产生更大空闲块,向着地址空间的结尾
劣势
外部碎片
不确定性 - 最佳适配
找到比所需空间大的,但是差值最小的空闲块
为了避免分割大空闲块
为了最小化外部碎片产生的尺寸
需求:
按尺寸排列的空闲块列表
分配需要寻找一个合适的分区
重分配需要搜索及合并于相邻的空闲分区,若有
优势:
当大部分分配是小尺寸时非常有效
比较简单
劣势:
外部碎片
重分配慢
易产生很多没用的微小碎片(不怎么好)
- 最差适配
为了分配n字节,使用最大可用空闲块,以致块的尺寸比n大
为了避免有太多微小的碎片
需求:
按尺寸排列的空闲块列表
分配很快(获得最大的分区)
重分配需要合并于相邻的空闲分区,若有,然后调整空闲块列表
优势:
假如分配是中等尺寸效果最好
劣势:
重分配慢
外部碎片
易于破碎大的空闲块以致大分区无法被分配
压缩式碎片整理
重置程序以合并孔洞
要求所有程序是动态可重置的
议题
何时重置?在程序停止的时候进行
开销 如果频繁拷贝,开销会比较大,而且有可能导致功能出问题
交换式碎片整理
运行程序需要更多的内存
抢占等待的程序 & 回收他们的内存
虚拟内存