操作系统【内存分配】

动态分区分配

需要考虑的问题

1. 系统要用什么样的数据结构记录内存的使用情况。
2. 当多个内存分区满足要求时,应该选择哪个分区进行分配。
3. 如何进行分区的分配与回收操作。

动态分区分配算法

操作系统【内存分配】

基本分页存储管理方式

页表、页框

进程中的块称为页( Page ),内存中的块称为页框( Page Frame ),外存也可以同样的单位进行划分,称为块。页表,为了便于在内存中找到进程的每个页面所对应的物理块。
页面大小应适中。若页面太小,则进程的页面数过多,页表过长,占用大量内存,增加地址转换开销,降低页面换入 / 换出的效率;若页面太大,又会使页内碎片增多,降低内存的利用率。

基本地址变换机构

地址变换机构的任务是将逻辑地址换为内存中的物理地址。
操作系统【内存分配】

块表

 

操作系统【内存分配】

两级页表

单级页表存在的问题
1. 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
2. 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

解决思路:
同单级页表的方法,将页表再次划分,划分后的页表项称为二级页表,新生成一个页目录表。但此时访存所需的时间就增加了。

基本分段存储管理方式

段表

每个进程都有一张逻辑空间与内存空间映射的段表,记录该段在内存中的起始地址和长度。

分段地址变换机构

操作系统【内存分配】

分段与分页的区别

1. 分页管理中的地址越界保护只需要判断页号是否越界;而分段管理中,若段号大于段表长度,则产生越界中断,若段内偏移大于段长,也会产生越界中断。
2. 分段式管理不能通过给出一个整数便能确定对应的物理地址,因为每个段长不是固定的,需要段号+段内偏移。
3. 分段管理相比于分页管理,很方便按照逻辑模块实现信息共享与保护。
4. 分页管理内存空间利用率高,不会产生外部碎片,只会有少量内部碎片;而分段管理,如果段太长,为其分配很大的连续空间很不方便,因此容易产生外部碎片。

段页式管理方式

结合分页、分段管理的优势,对程序先进行分段,再分页。
与段式管理不同,这里的段表存放的是段号、页表长度、页表存放块号。
用户只需要显示得给出段号和、段内地址,由系统自动得拆分为页号和页内偏移量,地址结构是二维的。

操作系统【内存分配】