操作系统(6)—— 早期存储管理

一、地址再定位
1.源程序经过汇编或编译后,再经过链接装配程序加工形成程序的装配模式形式,即转换为相对地址编址形式,它是以0为基址顺序进行编址的。相对地址也叫逻辑地址或虚地址,把程序中由相对地址组成的空间叫做逻辑地址空间。逻辑地址空间通过地址再定位机构转换到绝对地址空间。绝对地址空间也叫物理地址空间。
逻辑地址空间(简称地址空间)是逻辑地址的集合,物理地址空间(简称存储空间)是物理地址的集合。
2.地址的再定位:
一个逻辑地址空间的程序装入到物理地址空间时,由于两个空间不一致,就需要进行地址变换,或称地址映射,即地址的再定位。
分类:
静态再定位:在程序执行之前进行地址再定位

                优点:容易实现,无需硬件支持。只要求程序本身是可再定位的
                缺点:不能移动(不能重新分配内存),不利于内存的有效利用;只能连续分配,不能共享同一个程序。

**
动态再定位:在程序执行期间进行地址再定位。

        优点:用户程序在内存中可以移动,有利于内存的充分利用
            不必连续存放在内存中
        缺点:需要附加硬件支持(基地址寄存器,变址寄存器)

二、分区分配
1.固定式分区法:
基本思想:在系统生成时就将主存划分为若干个分区,每个分区的大小可以不等,但事先必须固定,以后也不能改变。这种分区分配方法会造成分区内零头
2.可变式分区法:
可变式分区法也就是动态划分存储器的分区方法,它是在作业装入和处理过程中建立的分区,并且要是分区的容量能正好适应作业的大小。
请求和释放分区的算法:

        1) **首次适应算法(First Fit)**
          我们以空闲分区链为例来说明采用FF算法时的分配情况。FF算法要求空闲分区链以地址递增的次序链接。
          -- 在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;
          -- 然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。
          -- 若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。
          首次适应算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区。这给为以后到达的大作业分配大的内存空间创造了条件。其缺点是低址部分不断被划分,会留下许多难以利用的、很小的空闲分区,而每次查找又都是从低址部分开始,这无疑会增加查找可用空闲分区时的开销。
    2) 循环首次适应算法(Next Fit)
        该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
         为实现该算法,应设置一起始查寻指针,用于指示下一次起始查寻的空闲分区,并采用循环查找方式,即如果最后一个(链尾)空闲分区的大小仍不能满足要求,则应返回到第一个空闲分区,比较其大小是否满足要求。找到后,应调整起始查寻指针。
      该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺乏大的空闲分区。 
3) 最佳适应算法(Best Fit)
  所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。
  孤立地看,最佳适应算法似乎是最佳的,然而在宏观上却不一定。因为每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的小空闲区。 
4) 最坏适应算法(Worst Fit)
  最坏适应分配算法要扫描整个空闲分区表或链表,总是挑选一个最大的空闲区分割给作业使用,其优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时最坏适应分配算法查找效率很高。该算法要求将所有的空闲分区按其容量以从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。
  但是该算法的缺点也是明显的,它会使存储器中缺乏大的空闲分区。最坏适应算法与前面所述的首次适应算法、循环首次适应算法、最佳适应算法一起,也称为顺序搜索法。 
5) 快速适应算法(Quick Fit)
  该算法又称为分类搜索法,是将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表,这样,系统中存在多个空闲分区链表,同时在内存中设立一张管理索引表,该表的每一个表项对应了一种空闲分区类型,并记录了该类型空闲分区链表表头的指针。
  空闲分区的分类是根据进程常用的空间大小进行划分,如2 KB、4 KB、8 KB等,对于其它大小的分区,如7 KB这样的空闲区,既可以放在8 KB的链表中,也可以放在一个特殊的空闲区链表中。 
  该算法的优点是查找效率高,仅需要根据进程的长度,寻找到能容纳它的最小空闲区链表,并取下第一块进行分配即可。另外该算法在进行空闲分区分配时,不会对任何分区产生分割,所以能保留大的分区,满足对大空间的需求,也不会产生内存碎片。
  该算法的缺点是在分区归还主存时算法复杂,系统开销较大。
  此外,该算法在分配空闲分区时是以进程为单位,一个分区只属于一个进程,因此在为进程所分配的一个分区中,或多或少地存在一定的浪费。空闲分区划分越细,浪费则越严重,整体上会造成可观的存储空间浪费,这是典型的以空间换时间的作法。 

3.可再定位式分区分配:
基本思想:移动所有的被分配了的分区,使之成为一个连续的区域,而留下一个较大的空白区。
这个过程称之为“靠拢”或“紧凑”。在一个队列中实现靠拢是简单的。然而各作业分区的移动却是复杂的。把一个作业移动位置后, 通常无法保证程序在新位置上能够正确运行。是因为一个程序总要涉及到基地址寄存器、访问内存指令、访问参数表或数据结构的缘故。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值