1、Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,第四章 存储管理,4.2,连续存储空间管理,4.2.1,固定分区存储管理,4.2.2,可变分区存储管理,4.2.3,伙伴系统,4.2.4,主存不足的存储管理技术,4.2.1,固定分区存储管理,固定分区存储管理是实现多道程序设计的最简单的一种存储管理技术。,基本思想,:在作业未进入内存之前,就由操作员或操作系统把内存可用空间划分成若干个固定大小的存储区,除操作系统
2、占用一个区域外,其余区域为系统中多个用户共享。,在系统运行期间,分区大小、数目都不变,所以固定式分区也称为静态分区。,为了便于管理整个内存,建立一个表格,“,主存分配表,”,来登记和管理整个内存。,在这个表中登记了每一个,分区的大小,起始地址,和,分配状态,。当有作业装入时,系统便可以搜索这个表,找出一个大小合适的分区分配给它。当程序运行结束时,可以把它所占用的空间再释放回去。,4.2.1,固定分区存储管理,大小相等的分区,使用哪个分区都一样,对大小不等的分区,有两种方法:,多个输入队列,:将每个进程指定到适应它的最小分区;每个分区都需要一个调度队列,用于保存为这个分区换出的进程。,一个输入队
3、列,:,为所有进程提供一个队列,当需要把一个进程装入主存时,选择可以保存该进程的可用分区。如果所有分区都被占用,需要等待。,4.2.1,固定分区存储管理,优点,可以支持多道程序;实现简单,开销小。,缺点,作业必须预先能够估计自己要占用多大的内存空间,有时候这是难以做到的;存在内碎片;分区总数固定,限制了并发执行的程序个数。,4.2.1,固定分区存储管理,4.2.2,可变分区存储管理,基本思想:内存不是预先划分好的,而是当作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配。,若有足够的空间,则按需要分割一部分分区给该进程,否则令其等待主存空间,可变分区主存分配表可由两张表格组成:,“,
4、已分配区表,”,和,“,未分配区表,”,分区分配,:寻找某个空闲分区,其大小需大于或等于程序的要求。若是大于要求,则将该分区分割成两个分区。分区的先后次序通常是从,内存低端到高端。,分区释放,:需要将相邻的空闲分区合并成一个空闲分区,登记到“未分配区表”中。(可分为,4,中情况),4.2.2,可变分区存储管理,可变分区管理分配算法,1,)最先适应分配算法,2,)下次适应分配算法,3),最优适应分配算法,4,)最坏适应分配算法,5),快速适应分配算法,为了将一个进程装入内存,应按照一定的分配算法从空闲分区表(链)中选 出一个满足进程需求的分区分配给作业。目前常用分配算法有:,最先适应分配算法,算
5、法:空闲分区(链)按,地址递增,的次序排列。在进行内存分配时,,从空闲分区表,/,链首开始顺序查找,,直到找到第一个满足其大小要求的空闲分区为止。然后再按照进程大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表(链)中。,下次适应分配算法,算法要求,又称为循环首次适应算法,,由首次适应算法演变而来,。在为进程分配内存空间时,不再每次从空闲分区表,/,链首开始查找,而是,从上次找到的空闲分区的下一个空闲分区开始查找,,直到找到第一个能满足其大小要求的空闲分区为止。然后,再按照进程大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表,/,链中。,最
6、优适应分配算法,算法要求:,空闲分区表,/,链按,容量大小递增,的次序排列。在进行内存分配时,从空闲分区表,/,链的,首开始,顺序查找,直到找到第一个满足其大小要求的空闲分区为止。,按这种方式为进程分配内存,就能把既满足进程要求又与进程大小最接近的空闲分区分配给进程。如果该空闲分区大于进程的大小,则与首次适应算法相同,将剩余空闲分区仍留在空闲分区表,/,链中。较大的空闲分区可以被保留。,最坏适应分配算法,算法要求:,空闲分区表,/,链,按容量大小递减,的次序排列。在进行内存分配时,取最前面所有空闲区中最大的一块,把剩余的块再变成一个新的小一点的空闲区。,基本不留下小空闲分区,但较大的空闲分区不
7、被保留。,地址转换,固定分区存储管理采用静态地址重定位,可变分区存储管理采用动态地址重定位,存储保护,存储保护是为了防止一个作业有意或无意地破坏操作系统或其它进程。常用的存储保护方法有:,界限寄存器方法,存储保护键方法,地址转换与存储保护,1,、界限寄存器方法,上下界寄存器方法,:用这两个寄存器分别存放进程的起始地址和结束地址。在进程运行过程中,将每一个访问内存的地址都同这两个寄存器的内容比较,如超出这个范围便产生保护性中断。,基址、限长寄存器方法,:用这两个寄存器分别存放作业的起始地址和作业的地址空间长度。当作业执行时,将每一访问内存的相对地址和限长寄存器比较,如果超过了限长寄存器的值,则发
8、出越界中断信号,并停止作业的运行。,地址转换与存储保护,2,、存储保护键方法,给每个存储块(大小相同,一个分区为整数倍存储块)分配一个单独的保护键,它相当于一把锁。进入系统的每个进程也赋予一个保护键,它相当于一把钥匙。当进程运行时,检查钥匙和锁是否匹配,如果不匹配,则系统发出保护性中断信号,停止进程运行。,地址转换与存储保护,4.2.4,主存不足的存储管理技术,1,移动技术,内碎片,:在固定分区方式中,一个分区分配给作业后,分区中未使用的空间区称为内碎片,又称内零头。,外碎片,:主存中的一个空闲区域在分配给作业后,一般总是剩余一个更小的空闲区。当这样的小分区不能再装入一个作业时,即不能被利用时
9、它们也成为主存碎片,这样的分区在作用使用的分区之外,所以称为外碎片。,可用移动技术来解决碎片问题。,4.2.4,主存不足的存储管理技术,操作系统,作业,1,空闲区,作业,2,空闲区,作业,3,空闲区,操作系统,作业,1,作业,2,作业,3,空闲区,操作系统,作业,1,作业,2,作业,3,空闲区,作业,4,将内存中所有作业移到内存一端,使本来分散的多个小空闲分区连成一个大的空闲区。,有关移动问题讨论,移动条件,空闲区的总和满足分配要求,移动时机,分区回收时,当找不到足够大的空闲分区且总空闲分区容量可以满足作业要求时,移动算法,作业在内存中的位置发生了变化,这就必须对其地址加以修改或变换即称为重
10、定位,2,对换技术,对换技术也是,“,扩充,”,内存容量和提高内存利用率的有效措施。现代,OS,中广泛采用。,最早用在,MIT,的兼容分时系统,CTSS,中,任何时刻系统中只有一个完整的用户作业,当运行一段时间后,因时间片用完或等待某事件发生,系统就把它交换到外存上,同时把另一作业调入内存让其运行,这样,可以在内存容量不大的小型机上分时运行,早期的一些分时系统多数采用这种交换技术。,交换技术,:,将暂时不用的某个进程及数据,(首先是处于阻塞状态优先级最低的),部分(或全部)从内存移到到外存,(备份区或对换区,采用连续分配的动态存储管理方式),中去,让出内存空间,同时将某个需要的进程调入到内存中
11、让其运行。交换到外存的进程需要时可以被再次交换回,(选择换出时间最久的),内存中继续执行。这种内存扩充技术就是对换技术。,2,对换技术,3,覆盖技术,覆盖技术主要用在早期的,OS,中(内存,64KB,),可用的存储空间受限,某些大作业不能一次全部装入内存,产生了大作业与小内存的矛盾。,例:,大作业:,108KB,内存:,64KB,覆盖:,把一个程序划分为一系列功能相对独立的程序段(称为覆盖),让执行时并不要求同时装入内存的覆盖组成一组(称为覆盖段),共享主存的同一个区域,从而解决在小的存储空间中运行大作业问题。这种内存扩充技术就是覆盖。,3,覆盖技术,对换与覆盖技术的对比,覆盖与对换技术是在多道程序环境下用来,扩充内存,的两种方法。,覆盖技术主要用在早期的,OS,中,而对换技术则主要用在现代,OS,中,解决在小的内存空间运行大作业的问题,是,“,扩充,”,内存容量和提高内存利用率的有效措施。,对换技术不要求程序员给出程序段之间的覆盖结构,对换主要在,作业或进程之间,进行。,覆盖技术要求程序员必须把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序,操作系统根据,程序员提供的覆盖结构,来完成程序段之间的覆盖。覆盖技术主要在,同一个作业或进程中,进行,同时覆盖只能覆盖与覆盖程序段无关的程序段。,对换与覆盖技术的对比,Thank You!,






