《操作系统原理》PPT课件.ppt
《《操作系统原理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《操作系统原理》PPT课件.ppt(170页珍藏版)》请在三一办公上搜索。
1、1,第二章 存储管理,2.1 存储管理基础 2.2 基本存储管理方法 2.3 可变分区存储管理方法 2.4 内存扩充技术 2.5 纯分页的存储管理 2.6 请求分页系统 2.7 段式存储管理 2.8 段页式存储管理 2.9 Linux存储管理,2,存储器可分为:内存储器和外存储器;内存储器:可以被CPU直接访问。外存储器:不可以被CPU直接访问,外存与CPU之间只能够在输入输出控制系统的管理下,进行信息交换。,3,2.1 存储管理基础,2.1.1 虚拟地址与物理地址,4,内存储器是由一个个存储单元组成,一个存储单元可存放若干个二进制的位(bit),8个二进制位被称为一个字节(Byte)。内存中
2、的存储单元按一定顺序进行编号,每个单元所对应的编号,称为该单元的单元地址。物理地址(绝对地址,实地址):内存中存储单元的地址。物理地址可直接寻址。逻辑地址(相对地址,虚地址):用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相对地址的形式。其首地址为0,其余指令中的地址都相对于首地址来编址。不能用逻辑地址在内存中读取信息。,5,6,地址重定位,地址重定位(地址映射):将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。当程序装入内存时,操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地址与分配到内存物理地址不一致,而CPU执行指令时,是按物理地址进行的,所以要进行地址转
3、换。,7,2.1.2 地址定位方式,1.固定定位方式,由程序员在编写程序时或由编译连接程序对源程序进行编译连接时,直接指定程序在执行时访问的实际存储器地址的方式称为固定定位方式。此种定位方式一般只适合于单板机或单用户系统。在多道程序环境下,应保证各个作业的地址互不重叠,这就比较困难了。,8,9,2.静态重定位方式,源程序经编译和连接后生成目标代码中的地址是以0为起始地址的相对地址。当需要执行时,由装入程序运行重定位程序模块,根据作业在本次分配到的内存起始地址,将可执行目标代码装到指定内存地址中,并修改所有有关地址部分的值。修改的方式是对每一个逻辑地址的值加上内存区首地址(或称基地址)值。,10
4、,11,静态重定位的特点,(1)静态重定位是在程序运行之前完成地址重定位工作的;(2)静态重定位由软件实现,无须硬件提供支持;(3)实行静态重定位时,地址重定位工作是在程序装入时被一次集中完成的;(4)绝对地址空间里的目标程序与原相对地址空间里的目标程序面目已不相同,因为前者进行了地址调整;(5)实施静态重定位后,若用户程序在内存中做了移动,那么程序指令中的地址就不再反映所在的存储位置了,除非重新进行地址重定位。,12,3.动态重定位方式,采用动态重定位方式,将程序在装入内存时,不必修改程序的逻辑地址值,程序执行期间在访问内存之前,再实时地将逻辑地址变换成物理地址。动态重定位要靠硬件地址变换机
5、构实现。当程序开始执行时,系统将程序在内存的起始地址送入地址变换机构中的基地址寄存器BR中。在执行指令时,若涉及到逻辑地址,则先将该地址送入虚拟地址寄存器 VR,再将BR 和 VR 中的值相加后送入地址寄存器 MR,并按 MR 中的值访问内存。(MR)=(BR)+(VR),13,14,2.2 基本存储管理方法,2.2.1 单一连续分区存储管理,基本思想:内存分为两个区域:系统区,用户区。应用程序装入到用户区,可使用用户区全部空间。最简单,适用于单用户、单任务的OS;单用户系统在一段时间内,只有一个进程在内存。,15,特点,(1)系统总是把整个用户区分配给一个用户使用。(2)实际上,内存用户区又
6、被分为“使用区”和“空闲区”两部分。在操作系统中,把分配给用户、但又未使用的区域称为“内部碎片”。(3)由于任何时刻内存的用户区中只有一个作业运行,因此这种系统只使用于单用户的情况。(4)进入内存的作业,独享系统中的所有资源,包括内存中的整个用户区。,16,特点,(5)由于整个用户区都分配给了一个用户使用,因此作业进入用户区后,没有移动的必要。采用这种存储分配策略时,将对用户程序实行静态重定位。(6)实行静态重定位,并不能阻止用户有意无意地通过不恰当地指令闯入操作系统所占用的存储区域,如何阻止对操作系统的侵扰,就是所谓的“存储保护”问题。用于存储保护的专用寄存器“界限寄存器”,17,存储保护过
7、程:在用户态下,对内存的每一次访问,都要在硬件的控制下,与界限寄存器中的内容进行比较。一旦发现该访问的地址小于界限寄存器中的地址,就会产生“地址越界”中断,阻止这次访问的进行。优点:易于管理,便于用户的了解和使用。缺点:由于每次只能有一个作业进入内存,故它不适用于多道程序设计,整个系统的工作效率不高,资源利用率底下。只要作业比用户区小,那么在用户区里就会形成碎片,造成内存储器资源的浪费。若用户作业的相对地址空间比用户区大,那么该作业就无法运行。,18,2.2.2 固定分区存储管理,把内存区固定地划分为若干个大小相等(和不等)的连续分区。每个分区装一个且只能装一个作业,分区的划分原则一般由系统操
8、作员或操作系统决定,分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数将保持不变。分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。,19,固定分区(大小相同),固定分区(多种大小),20,内存分配,为了便于内存分配,通常将分区按大小进行排队,并为之建立一张分区说明表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配)。当有一用户程序要装入时,由内存分配程序检索该表,从中找出一个能满足要求的、尚未分配的分区,将之分配给该应用程序,然后将该表项中的
9、状态置为“已分配”;若未找到大小足够的分区,则拒绝为该用户程序分配内存。,21,22,地址重定位与存储保护,固定分区存储管理中,每个分区只允许装入一个作业,作业在运行期间没有必要移动自己的位置,因此,应该对程序实行静态重定位。在固定分区存储管理中,不仅要防止用户程序对操作系统形成的侵扰,也要防止用户程序与用户程序之间形成侵扰。因此必须在CPU中设置一对专用的寄存器,用于存储保护。将两个专用寄存器分别起名为“下界寄存器”和“上界寄存器”,23,存储保护过程,当进程调度程序调度某个作业进程运行时,就把该作业所在分区的低边界地址装入到低界限寄存器,高边界地址装入到高界限寄存器。作业运行时,对内存的每
10、一次访问,都要在硬件的控制下,与两个界限寄存器中的内容进行比较。一旦发现该访问的地址小于界限寄存器中的地址,就会产生“地址越界”中断,阻止这次访问的进行。,24,固定分区存储管理的特点,(1)它是最简单的、具有“多道”色彩的存储管理方案。(2)当把一个分区分配给某个作业时,该作业的程序将一次性的全部被装入到分配给它的连续分区里。,25,优点:易于实现,开销小。缺点:内碎片造成浪费(小作业不能有效地利用分区空间。分区总数在系统生成时确定(固定),限制了并发执行的程序数目。如果到达作业的尺寸比任何一个分区的长度都大,那么它就无法得到运行。,固定分区方式的评价,26,2.3 可变分区存储管理,基本思
11、想:内存不是预先划分好的,而是当作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配。若有足够的空间,则按需要分割一部分分区给该进程否则令其等待主存空间优点:没有内碎片。缺点:有外碎片。,27,外部碎片问题,作业A(16KB),空闲区(236KB),空闲区(220KB),作业B(100KB),空闲区(120KB),作业C(70KB),空闲区(50KB),空闲区(100KB),作业D(75KB),空闲区(25KB),内碎片:占用分区之内未被利用的空间外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)。,28,2.3.1 空闲存储区表,管理空闲内存区的数据结构可采用链接法和连续线性
12、表格法。下面举一个连续线性表格管理空闲内存的方法,如采用链接法,就需要在表项中增加一个指向下一个空闲区的指针。每一个空闲分区用一个map结构管理:struct map unsigned m_size;/空闲分区的长度 char*m_addr;/空闲分区的起始地址;struct map coremapN;各个空闲分区按起始地址由低到高顺次登记在空闲存储区表中,m_size为0的表项是空白表项,它们集中在表的后部,29,在系统初始阶段,拥有一块很大的内存空白区,这时空闲存储区表coremap中只需有一项登记该空闲区。其余的coremap表项为空白项,即m_size皆为零。,30,以后随着很多作业的
13、不断申请内存和释放内存,整个存储空间将出现许多大小不等的区域,存储区表和实际的内存空间就可能变成如图所示的情况。,31,2.3.2 首次适应算法,1.分配算法。采用首次适应法为作业分配大小为size的内存空间时,总是从表的起始端的低地址部分开始查找。当第一次找到大于或等于申请大小的空闲区时,就按所需大小分配给作业。如果分配后原空闲区还有剩余空间,就修改原存储区表项的 m_size 和 m_addr,使它记录余下的“零头”。如果作业所需空间正好等于该空闲区大小,那么该空闲区表项的m_size就成为0。接下来要删除表中这个“空洞”,即将随后的各非零表项依次上移一个位置,32,char*malloc
14、(mp,size)struct map*mp;unsigned size;register char*a;register struct map*bp;for(bp=mp;bp-m_size;bp+)if(bp-m_size=size)a=bp-m_addr;bp-m_addr+=size;if(bp-m_size-=size)=0)do bp+;(bp-1)-m_addr=bp-m_addr;while(bp-1)-m_size=bp-m_size);return(a);return(0);,33,2.回收算法,当某一作业释放以前所分配到的内存时,就要将该内存区归还给系统,使其成为空闲区而可
15、被其他作业使用。释放区与原空闲区相邻情况可归纳为如图所示的4种情况。,34,仅与前空闲区相连:合并前空闲区和释放区构成一块大的新空闲区,并修改空闲区表项。该空闲区的m_addr不变,仍为原前空闲区的首地址,修改表项的长度域m_size为原m_size 与释放区长度之和。与前空闲区和后空闲区都相连:将三块空闲区合并成一块空闲区。修改空闲区表中前空闲区表项,其起始地址m_addr仍为原前空闲区起始地址,其大小m_size等于三个空闲区长度之和,这块大的空闲区由前空闲区表项登记。接下来还要在空闲区表中删除后项,方法是将后项以下的非空白表项顺次上移一个位置。,35,仅与后空闲区相连:与后空闲区合并,使
16、后空闲区表项的m_addr为释放区的起始地址,m_size为释放区与后空闲区的长度之和。与前、后空闲区皆不相连:在前、后空闲区表项中间插入一个新的表项,其 m_addr为释放区的起始地址,m_size为释放区的长度。为此,先要将后项及以下表项都下移一个位置,36,若采用首次适应法,则其分配算法简单且合并相邻空闲区也很容易。该算法的实质是尽可能利用存储区低地址部分的空闲区,而尽量在高地址部分保存较大的空闲区,以便一旦有分配大的空闲区的要求时,容易得到满足。其缺点是由于查找总是从表首开始,前面的空闲区往往被分割得很小,能满足分配要求的可能性较小,查找次数就较多。系统中作业越多,这个问题就越严重。,
17、37,2.3.3 循环首次适应算法,把空闲表设计成顺序结构或链接结构的循环队列,各空闲区仍按地址从低到高的次序登记在空闲区的管理队列中。同时需要设置一个起始查找指针,指向循环队列中的一个空闲区表项。循环首次适应法分配时总是从起始查找指针所指的表项开始查找。第一次找到满足要求的空闲区时,就分配所需大小的空闲区,修改表项,并调整起始查找指针,使其指向队列中被分配的后面的那块空闲区。下次分配时就从新指向的那块空闲区开始查找。,38,2.3.3 循环首次适应算法,循环首次适应法的实质是起始查找指针所指的空闲区和其后的空闲区群常为较长时间未被分割过的空闲区,它们已合并成为大的空闲区可能性较大。比起首次适
18、应法来,在没有增加多少代价的情况下却明显地提高了分配查找的速度。释放算法基本同首次适应法一样。首次适应法和循环首次适应法不仅可用于内存的分配和释放,也可用于进程图像交换的辅存空间的分配和释放,其管理空闲区的数据结构也相同。,39,2.3.4 最佳适应算法,所谓最佳适应算法就是在所有大于或等于要求分配长度的空闲分区中挑选一个最小的分区,在分割后,所余下的剩余存储区最小或等于零。因此,该算法的空闲区利用率高,较大的空闲区被保存下来。空闲存储区管理表的组织方法可以采用顺序结构,也可采用链接结构。如采用顺序结构,空闲分区按地址由小到大的顺序登记在表中,分配时需要搜索所有的空闲分区,以在其中挑出一个满足
19、分配大小的最小的分区。此种管理结构的释放算法可用顺序结构的首次适应法。,40,2.3.4 最佳适应算法,当采用链接结构时,空闲区也可按由小到大的非递减次序排列。分配时总是从最小的第一项开始,这样第一次找到的满足条件的空闲区必定是最合适的。平均而言,只要搜索一半数目的空闲区表项就能找到最佳配合的空闲区,但寻找较大空闲区比较费时。采用按存储区大小排序的链接表会降低释放算法的效率。由于空闲区是按大小而不是按地址序号排序的,因此释放回收空闲区时要在整个链表上寻找地址相邻的前、后空闲区,合并后又要插入到合适的位置,因此释放算法比前两种算法耗时得多。,41,2.3.5 最差适应算法,最差适应法所分割的空闲
20、存储区是所有空闲分区中的最大的一块。在实施最差适应法时,空闲区管理表项一般以m_size由大到小的次序组织成一个链接表,因此查找分割的总是最大的第一个空闲存储区。实现最差适应法时的空闲存储区表的组织方法一般都是采用按空闲块由大到小排序的链接表。采用按存储区大小顺序排列的链接表的形式虽然释放一个空闲块时速度较慢,但分配效率是一切算法中最高的一种。,42,可变分区存储管理的特点,(1)作业一次性的全部装入到一个连续的存储分区中。(2)分区是按照作业对存储的需求划分的,因此在可变分区管理中,不会出现内部碎片这样的存储浪费。(3)为了确保作业能够在内存中移动,要由硬件支持,实行指令地址的动态重定位。,
21、43,可变分区存储管理的缺点,(1)仍然没有解决小内存运行大作业的问题。(2)虽然避免了内部碎片造成的存储浪费,但有可能出现极小的分区暂时分配不出去的情形,引起外部碎片。(3)为了形成大的分区,可变分区存储管理通过移动程序来达到分区合并的目的,然而程序的移动是很花费时间的,增加了系统在这方面的开销。,44,2.3.6 多重分区,可变分区存储管理算法是按作业对存储的需求分配存储区的,因而消除了固定分区内部的剩余碎片,但随着存储区的分配和释放过程的进行,在各个被分配出去的分区之间会存在很多的空闲区,这就是“外部碎片”。有时,当一个作业要装入运行,但分配不到一个够用的空闲分区,尽管这时内存中所有外部
22、碎片的总和远大于作业所申请的空间。如采用“紧凑”技术重新安排内存中各个作业的位置,以使零碎的空闲区集中起来,这是一个极其耗时的过程,一般很少采用这种策略。,45,否,否,是,是,46,2.3.6 多重分区,有些系统采用多重分区技术,在作业的运行过程中可以申请附加的分区,以装入一个或多个子程序。新申请的空闲分区也无需与作业的现有分区相邻接。采用多重分区技术可以提高外部碎片的利用率,也便于多个作业共享分区的代码和数据,这只要在共享的作业中包含某个共享的分区即可。多重分区系统应当采用动态重定位技术,但存储管理的复杂性也增加了。为了实现存储保护,在多重分区系统中要设置多对界地址寄存器,以使现运行作业对
23、每一个分区的访问都不会越界。,47,2.4 内存扩充技术,在基本的存储管理系统中,当一个作业的程序地址空间大于内存可用空间时,该作业就不能装入运行;当并发运行作业的程序地址空间总和大于内存可用空间时,多道程序设计的实现就会碰到很大的困难。内存扩充技术就是借助大容量的辅存在逻辑上实现内存的扩充,以解决内存容量不足的问题。,48,2.4.1 覆盖(overlay),引入:其目标是在较小的可用内存中运行较大的程序。原理:覆盖技术就是将一个大程序按程序的逻辑结构划分成若干个程序(或数据)段,并将不会同时执行,从而就不必同时装入内存的程序段分在一组内,该组称为覆盖段。这个覆盖段可分配到同一个称为覆盖区的
24、存储区域。将程序的必要部分(常用功能)的代码和数据常驻内存;可选部分(不常用功能)在其他程序模块中实现,平时存放在外存中(覆盖文件),在需要用到时才装入到内存;不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖。(即不同时用的模块可共用一个分区),49,注:另一种覆盖方法:(100K)A(20K)占一个分区:20K;B(50K)、D(20K)和E(40K)共用一个分区:50K;F(30K)和C(30K)共用一个分区:30K;,50,缺点:对用户不透明,增加了用户负担。编程时必须划分程序模块和确定程序模块之间的覆盖关系,增加编程复杂度。从外存装入覆盖文件,以时间延长来换取空间节省。覆盖不需
25、要任何来自操作系统的特殊支持,由用户程序自己控制 所以,覆盖通常限于用在微机和其他内存容量有限的或缺乏对更先进技术的硬件支持的系统中,51,2.4.2 交换(swapping),引入:让单一连续分区存储管理能具有“多道”的效果。中心思想:将作业信息都存放在辅存上,根据单一连续分区存储管理的分配策略,每次只让其中一个进入内存投入运行,当运行中提出输入输出请求或分配的时间片用完时,就把这个程序从内存储器“换出”到辅存,把辅存里的另一个作业“换入”内存运行。这样从宏观上看,系统中同时就有几个作业处在运行之中。为了减少在主存和辅存间传输的数据量,可以只将原作业的一部分保存到辅存中去,只要释放的主存空间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统原理 操作系统 原理 PPT 课件
链接地址:https://www.31ppt.com/p-5517288.html