可变分区多道管理技术

固定分区存储管理

把主存分成若干个固定大小的存储区(又称存储块),每个存储区分给某一个作业使用,直到该作业完成后才把该存储区归还系统;
分单道作业和多道作业两种情况;
 单用户、单道作业情况
 多道作业情况
• 操作系统区、用户使用的分区;
• 主存中分区的区数是固定不变的,每区的大小也是固定不变的;
• 分给每个作业一块大于或等于作业大小的主存分区,不允许两个作业同时放于同一个分区中;
• 问题:分区中常有未用的、剩下的空闲部分,即存储碎片,降低了主存的利用率;
• 存储分块表:主存分区情况说明信息,存储区的使用状况信息,包括大小、位置和状态三项信息。
存储分块表
大小:指出该存储块的大小,以字节为单位;
位置:指出该存储块在主存中的起始地址;
状态:表明该存储块是否已被使用。
存储保护功能
一对“界地址寄存器”,如果处理器要访问主存某单元时,系统硬件自动将该单元地址与界限寄存器的内容进行比较,以判断此次访问是否合法。
优点:简单,要求的硬件支持只是一对界地址寄存器,软件算法简单;
缺点:主存利用率不高。

可变分区存储管理

所谓可变分区,是指主存事先并未划分成一块块分区,而是在作业进入主存时,按该作业的大小建立分区,分给作业使用;
特点:
分区个数是可变的,每个分区的大小也是不固定的;
主存中分布着个数和大小都是变化的空闲分区或碎片,这些空闲分区有些可能
相当大,而有些则相当小。

数据结构的组织方法

存储分块表
 这种存储分块表存在两个缺点:
• 由于分区个数是变化的,所以表长不好确定,造成表格管理上的困难,若给该表留的空间不足,又无法登记各分区的情况,若留的空间过大,造成浪费;
• 分配主存时,为查找一块合适的空闲分区所需扫描的表目增加了,查找速度变慢了。
分开设置两个存储管理表
 用已使用分区表(UBT)和空闲分区表(FBT)分别登记和管理系统中的已分分区和空闲分区;
减少存储分配和释放时查找表格的长度,提高查找速度。
空闲存储块链
使用链指针把所有的空闲分区链结在一起,构成一条空闲存储块链;
实现方法:把每个空闲存储块的起始若干个字节分成两部分,前一部分作为链指针,指向下一空闲存储块的起始地址,后一部分指出本空闲存储块的大小,用一固定单元作为空闲存储链的头指针用以指出该链中的第一块空闲存储块的起始地址,最后一块空闲存储块的链指针中放着链尾标志;
这种方法使得数据基的管理和维护比较简单。

存储分配算法

最佳适应法
从所有未分配的分区中挑选一个最接近作业尺寸且大于或等于作业大小的分区分给要求的作业;
尽量多保留大的分区,使被选中分区剩下尽可能小的未用碎片;
使系统中产生了许多小得无法再用的碎片。
最先适应法
按分区序号从存储分块表的第一个表目起查找该表,把最先找到的且大于或等于作业大小的未分配分区分给要求的作业;
尽可能地缩短了存储分配时间;
对空闲块的管理采取不同的办法:表格法、空闲存储块链法、位图法。
最坏适应法
从所有未分配的分区中挑选最大的且大于或等于作业大小的分区分给要求的作业;
可用于可变分区分配技术中。
保证分配后剩下的分区足够大,以便满足后续要求。

碎片问题和存储器的紧缩

由于各作业请求和释放主存块的结果,产生很多小的碎片,碎片的存在降低了多
道的程度,造成了主存空间的大量浪费;

解决碎片问题:
 把程序分成几部分装入不同的分区中去,改变一直把程序作为一个连续的整体在主存中存放的要求;
• 改善了碎片问题,但却增加了程度管理和执行的复杂性;
 把小碎片集中起来使之成为一个大分区;
• 移动各用户分区中的程序,使它们集中于主存的一端,使碎片集中于另一端,从而连成一个完整的大分区,即存储器的“紧缩”或“澄清”。

动态重定位

动态重定位:是指程序的重定位时机不是在程序执行前进行,而是在程序执行过程中才进行
地址转换,更确切地说是在每次访问主存单元前才进行地址转换;
重定位过程:
首先将用户按相对地址编址的目标程序原封不动地装入主存中分给该用户使用的分区中;
当该用户程序被调度到处理器上执行时,操作系统自动将该用户作业的起址由作业表中取出,并将分区起始地址减去用户目标程序的相对基地址,然后将其减得值装入定位寄存器中;
当处理器要访问主存时,地址转换硬件自动将程序中的相对地址与定位寄存器中的内容相加,并按相加的和作为主存绝对地址去访问数据。

采用动态重定位后,由于目标程序装入主存后不需要修改地址指针及所有与地址有关的项,因而程序可在主存中随意浮动而不影响其正确执行,从而可以方便地进行存储器紧缩,较好地解决了碎片问题。

多重分区/多对界地址管理

单对界地址管理技术:
每个用户只占据主存的一个分区,存储保护只需使用一对界地址寄存器;
弊病:
• 首先,解决碎片问题时,移动程序进行存储器紧缩时需要硬件支持;
• 其次,不便于在进程之间共享数据。

多对界地址管理技术:
系统中设置多对界地址寄存器,并且在为每个作业或进程分配主存时,可按界地址寄存器对的个数为其分配多个不相邻接的空闲分区;
该技术既可以改善碎片情况,又便于共享;
但是,在实存管理技术中,多重分区的多重程度不宜过多,否则会增加管理的复杂性