操作系统课程笔记
地址空间与地址生成
逻辑地址 -> 物理地址 是通过MMU查表得到,操作系统所起的作用是建立MMU这张映射表。
内存碎片
有程序与程序之间的外碎片和程序内部无法利用的内碎片, 操作系统关注如何减少外碎片和内碎片。
分配空间策略:
- 首次适配
- 最佳适配
- 最差适配
程序需要的空间是无法预知的,所以这几种分配内存的策略都不是银弹。 目标是尽可能多的有大的地址空间,
除了分配策略,还考虑其他解决地址空间的方式。
方法一是碎片整理,需要考虑:整理的时机?拷贝的开销?
方法二 swapping ,内存与硬盘swap,需要考虑:换哪个程序?什么时候换入换出?开销? 虚拟内存管理考虑这个问题。
非连续内存
为什么采用非连续内存分配?
答:连续内存空间分配容易产生内碎片、外碎片,
非连续内存分配优点:
- 更好的内存利用和管理
- 允许共享代码和数据(共享库等)
- 支持动态加载和动态链接
问题: 管理开销比较大
如何建立虚拟地址和物理地址之间的转换呢?有软件方案和硬件方案,为了加速,采用硬件方案,硬件方案有两种:
- 分段(例如程序各个段(数据段,代码段…)的特点(有些只读,有些可读写)来管理与共享)
- 分页(现代操作系统分段管理方式比较少,更多的是分页的管理方式)与分段不同点在于页的尺寸是固定的,而各个段的尺寸可以不一样
分页
逻辑地址和物理地址的分页大小要一致,例如如果逻辑地址是4k每页,物理地址也要4k每页。
frame物理页,page逻辑页
逻辑页和物理页的映射关系:
- 页表
- MMU/TLB
为了加速,通过TLB缓存最近使用的映射到CPU的缓存。
分页需要类似一个map,从逻辑页地址映射到物理页地址。
如果只有以及映射,需要的空间将很大,例如如果每页大小为2^10
,那么64位的地址空间就需要2^54
条记录,
需要缓解这一空间问题有几种方案,
方案一:多级页表的方式可以缓解空间压力,虽然实际上总空间增加了,但有些未使用的内存可以不存在子页,节省空间
方案二:反向页表,通常页表是逻辑页到物理帧的映射,但通常逻辑空间大于物理空间,例如物理空间可能只有4G,逻辑空间2^64
,所以如果是物理帧映射逻辑页则需要的空间少很多。只是这需要硬件设计得很复杂,否则查找耗时大
方案三:hash页表,通过hash表即可以节省空间,由可以加速查找,但需要注意防hash碰撞以及硬件设计有些复杂。