目录
存储器管理的对象主要是主存
主要包括主存空间的分配和回收、提高主存利用率、扩充主存、对主存信息实现有效保护
存储结构
虚拟地址、相对地址、程序地址、逻辑地址
虚拟地址空间:地址集合
(主存)物理地址:
(主存)物理地址空间:地址集合
地址重定位
操作系统将装入可执行文件时,将逻辑地址对应到主存地址
静态地址重定位和动态地址重定位
静态重定位
已经完成变化,执行期间不会变化:缺点:分配连续的存储空间,不能扩充存储空间,不能移动,难以共享
动态重定位
在程序运行期间进行变换,依赖硬件地址变化机构,如基址存储器。解决空间不足,不能移动,难以共享问题。
存储管理方案
解决多用户使用主存的情况
分区存储管理
把主存分为多个区域,每个区域分配给一个用户使用,限定只能在自己的用户区域使用。将区域划分为固定分区、可变分区、可重定位分区。
固定分区
将主存划分为若干个分区,突出问题,造成未用的空间(内碎片)。
可变分区
动态分区的方式,在作业装入是进行的,分区的个数可变,分区大小等于作业的大小。需要两种表格管理分区,已分配记录表管理已经分区的情况;未分配记录表管理未分区的情况
对可变分区的请求及释放的算法
- 最佳适应算法:将n个空白空间找到最接近的需求的空间。但不能完全相等,需要将分区一分为2.随着不断释放空间,可能产生小分区无法分配(外碎片)。
- 最差适应算法:将作业装入最大的空白区间。将最大的分区一分为2,剩下的空白很大,不容易产生外碎片。
- 首次适应算法:从主存的底地址进行选择能装入的空白区。当释放空间时,将当前空间与相邻地址进行合并。
- 循环首次适用算法:每次分配的都是从刚分配的空白区域寻找一个能满足用户要去的空白区
引入可变分区,提高主存利用率,但产生不连续的小的空闲区,不连续无法分配,产生外碎片。解决方法:拼接,向一个方向移动已分配的作业。
可重定位分区
解决碎片问题简单有效的方法。移动所有已经分配好的区域,形成连续的区域。当请求空间分配得不到满足时进行。但存在地址重定位问题
分区保护
防止未经核准的用户访问分区
采用上界/下界寄存器保护
上界寄存器存放作业装入地址,下界寄存器存放作业结束地址
形成的物理地址满足下列条件:上界寄存器≤物理地址≤下界寄存器
采用基址/限长寄存器保护
基址寄存器存放作业装入地址,限长寄存器存放作业长度。
形成的物理地址满足下列条件:基址寄存器≤物理地址≤基址寄存器+限长寄存器
分页存储管理
分区存储需要连续的地址空间,分区靠拢耗时。引入分页存储管理
纯存分页存储管理
分页原理
将进程地址划分若干的区域:页。将主存空间划分成与页同大小的物理块:块或页框。进程分配主存时,将进程中的若干个页分别装入多个不想领的块中。
地址结构
由两部分组成:页号,偏移量(业内地址)。
页表
当进程的多个页面离散地分配到主存的多个物理块,系统需要在主存中找到对应的页面的物理块。为此建立了一张页面映射表。简称页表。
每个页在页表中占一个表项,记录该页在主存中对应的物理号。
页表实现页号到物理块的地址映射:将程序中的逻辑地址转换成主存中的物理地址。
为了实现地址转换,系统中存在页表寄存器,存放页表的起始地址和页表的长度。在进程未执行的时候,每个进程对应的页表的起始地址和长度存放在进程的PCB中,当进程被调用时,将他们装入页表寄存器,在地址转换时,将页号与页表长度进行比较,如果页号大于等于页表寄存器中的页表长度L,则访问越界,产生越界中断。若未产生越界,则根据页表寄存器的页表起始地址和页号计算出该页在页表项的位置,得到该页的物理号,将物理号装入物理地址寄存器中。与此同时,将逻辑地址寄存器中的页内地址直接装入物理地址寄存器的块内地址字段中,就完成了逻辑地址到物理地址的转换。
快表
在地址映射机构中增加一个小容量的联想存储器(一组高速寄存器)需要硬件开销。只存放当前进程最活跃的少数几页的物理块号。系统先从快表中寻找物理块,找不到则通过主存的页表进行,同时将物理块号填写到联想存储器空闲单元。
两级页表机制
减少页表在主存中占用连续空间
建立一张页表:外层页表(页目录表):存放某个页表的物理地址;页表:存放页的物理块号
分段存储管理
作业的地址空间被划分为若干个段,每个段是一组完整的逻辑通信,例如主程序段,子程序段。
分段的地址结构:段号S 段内地址d
系统为每个进程建立一张段映射表,简称“段表”。每个段在表中占用一个项。在该记录中记录了段号 起始地址(基址) 段的长度
在执行时,段号≤段表长&&段内地址≤起始地址+段的长度。对应的物理地址 = 起始地址+段内地址
段页式存储管理
将主存先划分为相等的存储块,将用户程序划分为若干个段,将段赋予一个段名。将每个段划分若干个页,以页框进行单位离散分配。
段表结构:
逻辑地址:(段号s 段内页号p 页内地址w)
段表:段号 段表内容(页表起始地址 页表长度)
页表(页号 物理块号)
过程:
段号S查段表获得页表的起始地址
根据页号S查页表 获得物理块号b
物理块号b拼接页内地址W得到物理地址