可重定位分区分配
动态分区很完美地在内存初次分配阶段解决了内存空间浪费的问题。但是,内存是需要重复利用的。
随着任务的不断运行完毕,内存空间会被回收;同时,操作系统又会不断接收新的任务,内存空间会被分配。
于是,当运行一个新任务时,只能从回收回来的分区上分配内存,一方面动态分区技术在一定程度上退化为固定分区,另一方面分配后余下的碎片(小块的内存空间)就被保留了下来,较小的内存空间被分配出去的可能性很小,造成了浪费(碎片)。
最终,内存空间会存在很多小块的空闲空间,而不再有大块的空闲空间,于是当较大型的任务到达时,没有足够的空间供分配(尽管这些小块的空闲内存空间之和比任务所需的空间大)
- 针对动态分区中碎片之和大于任务所需空间的情况,考虑对内存空间采用紧凑技术进行整理,将已进入内存的任务所占有的内存空间尽量搬到较低的地址,相对的,空闲碎片的会被换到了高地址空间。
- 当所有进入内存的任务都被搬到较低的地址后,空闲碎片都被移动到了内存空间的高地址空间。
- 于是,所有的碎片被整合成了一个大块,从而可以装载任务。这就是可重定位的动态分区。
将碎片合成一大块---可重定位的动态分区
实现
- 1)动态重定位依靠硬件地址变换机构完成。
- 2)地址重定位机构需要基地址寄存器(BR)和程序虚地址寄存器(VR)。
指令或数据的虚地址(VA),也称为逻辑地址(LA)。内存地址MA(MA),也称物理地址(PA)
实现逻辑地址到物理地址的转换,可以通过公式MA=(BR)十(VR)完成。
图5-10所示为指令或数据的逻辑地址到物理地址的转换过程
优点
- 1)可以对内存进行非连续分配。
- 2)动态重定位提供了实现虚拟存储器的基础。
- 3)有利于程序段的共享。
4 动态重定位分区的分配算法
- 1)主干是动态分区的分配算法。
- 2)在动态分区的基础上增加了紧凑技术。
- 3)内存分配算法,如图5-11所示。
基本分页存储管理
上面的存储都是连续的内存分配技术,我们的分页存储是离散的
与其花费巨大的代价搬家,不如离散地存储在这些碎片中
- 一种离散存储的方法是面向系统的,将内存用户空间划分为大小相等(2nB,如4KB)的物理块;
- 另一种方法是面向用户的,将内存空间划分为物理段,32位系统中,以高16位表示段号,低16位表示段内地址。
这就是汇编语言中定义一个段时大小不可以超过64KB的根本原因。
离散存储思想产生的原因:
- (1)紧凑技术的弊端
- 尽管可重定位分区方式下的紧凑技术使得碎片得以利用,提高了内存空间的利用率。但这是以牺牲时间进行搬家而获得的,代价是很高的。
- (2)求变创新
- 从内存连续分配的思想上突破、创新,提出离散的内存分配方式,从而使存在大量碎片和无足够大的连续空间供分配这一矛盾得以缓解。
离散存储的基本概念
- 将一个进程直接分散地装入到许多不相邻的分区中,而无须“紧凑”的分配方式,称为离散分配。
- 离散分配的种类包括分页存储管理、分段存储管理和段页式存储管理。
- 不具备页面对换功能的分页存储管理方式称为基本分页存储管理方式。
分页存储管理
分页存储管理的基本方法
- 页面和物理块
- 页面。
- 页面大小。
将用户作业的地址空间分成若干个大小相同的区域,称为页面或页,并为每个页从“0”开始编号;
相应地,主存空间也分成与页大小相同的若干个存储块,或称为物理块或页框(frame),并且采用同样的方式为它们进行编号,从0开始:0块,1块,…,n-1块
分页地址中的地址结构如下:
对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:
页表
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表
进程在运行期间,需要对程序和数据的地址进行变换,即将用户地址空间中的逻辑地址变换为内存空间中的物理地址,由于它执行的频率非常高,每条指令的地址都需要进行变换,因此需要采用硬件来实现。页表功能是由一组专门的寄存器来实现的。一个页表项用一个寄存器。
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。
因此,我们采用:具有快表的地址变换机
分段存储管理
用户把自己的作业按照逻辑关系划分为若干个段,每个段都从0开始编址,并有自己的名字和长度。因此,程序员们都迫切地需要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的,这不仅可以方便程序员编程,也可使程序非常直观,更具可读性。
在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。
- 分页系统中的“页”只是存放信息的物理单位(块),并无完整的逻辑意义,这样,一个可被共享的过程往往可能需要占用数十个页面,这为实现共享增加了困难。
信息保护同样是以信息的逻辑单位为基础的,而且经常是以一个过程、函数或文件为基本单位进行保护的。
在实际应用中,往往存在着一些段,尤其是数据段,在它们的使用过程中,由于数据量的不断增加,而使数据段动态增长,相应地它所需要的存储空间也会动态增加。然而,对于数据段究竟会增长到多大,事先又很难确切地知道。对此,很难采取预先多分配的方法进行解决。