操作系统课件-第5章存储器管理.ppt
《操作系统课件-第5章存储器管理.ppt》由会员分享,可在线阅读,更多相关《操作系统课件-第5章存储器管理.ppt(70页珍藏版)》请在三一办公上搜索。
1、Chapter 5 存储管理,现代计算机系统中存储器通常由内存和外存组成。内部存储器(简称内存,或称主存primary storage)的管理是操作系统主要功能之一。内存区域一般被分为两大区域:系统区和用户区。系统区用于存放操作系统的内核程序和其它系统常驻程序,这些程序在系统初启时便装入系统区并一直驻留内存。对一个具体的计算机系统,系统区是固定的,一般占据内存的低地址部分。用户区用以存放用户程序和数据以及目态下运行的系统程序,它是用户进程可共享的内存区。存储管理方案:分区存储管理、页式存储管理、段式存储管理、段页式存储管理四种。,5.1 存储管理基本概念,物理内存是由系统实际提供的硬件存储单元
2、(通常为字节)所组成。CPU可直接访问这些存储单元,因此,所有的程序指令和数据必须装入内存,才可得到执行。内存中所有的存储单元从0开始,依次编有一个编号,这个编号称为这个存储单元的内存地址或物理地址。CPU通过物理地址找到其中存放的要执行的指令或数据。内存的地址空间是一维的。内存的访问速度快,但其价格昂贵。计算机系统中实际的内存容量往往有限,不可能存入大量的程序与数据,只能暂时存放将要访问的进程的程序段和数据。而系统中大量的程序和数据存入价格较便宜的外部存储器中,待需要访问时,再将其调入内存。,虚拟存储空间又称为用户地址空间,它不考虑物理内存的大小和信息存放的实际位置,只规定每个进程中互相关连
3、的信息的相对位置。与实际物理内存只有一个(单机系统中),且被所有进程共享不一样,每个进程都拥有自己的虚拟存储空间,且虚拟存储空间的容量是受计算机的地址结构和寻址方式确定。例如,直接寻址时,如果CPU的有效地址长度是16位,其寻址范围为0到64K。,进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储空间(Virtual memory)。源于程序如何在内存中存储:1)一种是由程序员在程序中直接给出要访问的数据或指令的物理地址;2)使用符号地址,通过地址变换机构 实现虚地址空间到物理地址空间的映射。,存储管理的主要任务,在多道的操作系统中,允许多个进程同时装入内存,通过进程的并发执行来提高
4、CPU的利用率。于是如何将可用内存有效地分配给多个进程,如何让进程的存储容量要求大于可用内存的大进程得以运行,如何保护和共享内存的信息等等,对存储管理提出一系列要求。现代操作系统中,存储管理的目的是既要方便用户,又要有利于提高内存的利用率,因此,存储管理有如下四个主要的任务:,1内存分配内存分配是多道程序共存内存的基础,它要解决的是如何为多个程序划分内存空间,使各个程序在指定的那一部分内存空间里运行。为此,操作系统必须随时掌握内存空间每个单元的使用情况(空闲还是占用);当有存贮申请时,根据需要选定分配区域,进行内存分配;如果占用者不再使用某个内存区域时,则及时收回。内存分配有静态分配和动态分配
5、两种方式。静态分配是在目标模块装入内存时一次分配进程所需的内存空间,它不允许进程在运行过程中再申请内存空间;动态分配是在目标模块装入内存时分配进程所需的基本内存空间,并允许进程在运行过程中申请附加的内存空间。,2地址变换一般情况下,一个进程装入时分配到的内存空间和它的虚拟地址空间是不一致的。因此,当进程在运行时,其所要访问的指令或数据的实际物理地址和虚拟地址是不同的。显然,如果在进程装入或在它执行时,不对有关的地址部分加以相应的修改,将导致错误的结果。为了保证程序的正确执行,须将程序的虚拟地址转换为物理地址,完成由虚拟地址到物理地址的变换这一过程称为地址重定位或地址映射。虚拟地址空间的程序和数
6、据经过地址重定位后,就变成可由CPU直接执行的绝对地址程序,其变换过程如图5-2所示。,按照重定位的方式,地址重定位可分为静态重定位和动态重定位两种方式:(1)静态地址重定位是在目标程序装入指定的内存区域时,由装配程序完成地址的变换。程序中涉及直接地址的每条指令都要进行这样的修改。优点是不需要硬件支持。缺点:1)程序装入内存后不能在内存中移动;2)程序必须装入连续的地址空间内,不利于程序的共享,也不能充分利用内存空间。,(2)动态地址重定位是指程序在执行的过程中,在CPU访问内存地址之前,由地址变换(硬件)机构来完成将要访问的指令或数据的逻辑地址到物理地址的转换。地址变换机构通常设置一个公用的
7、基址寄存器BR(Base Register),它存放现行进程在内存空间的起始地址。当CPU经逻辑地址访问内存时,地址变换机构将自动把该逻辑地址加上BR中的地址而形成实际物理地址。显然,只要改变BR的内容,就可以改变程序在内存的存放空间。,由此可见,进行动态重定位的时机是在指令执行过程中,每次访问内存前动态地进行的。采取动态重定位可带来两个好处:(1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确运行,这对于后面将要介绍的存储器紧缩、解决碎片问题是极其有利的;(2)一个程序由多个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个
8、模块有自己对应的定位存储器就行。动态重定位技术所付出的代价是需要硬件支持。,3.内存信息的共享和保护(3种方法)内存信息的共享与保护也是内存管理的重要功能之一。在多道程序设计环境下,内存中的许多用户或系统程序和数据段可供不同的用户进程共享,这种资源共享将会提高内存的利用率。但是,反过来说,除了被允许共享的部分之外,又要限制各进程只在自己的存储区活动,各进程不能对别的进程的程序和数据段产生干扰和破坏,因此须对内存中的程序和数据段采取保护措施。,1)上下界保护法。上下界保护法是一种常用的硬件保护法。上下界存储保护技术要求为每个进程设置一对上下界寄存器。上下界寄存器中装有被保护程序和数据段的起始地址
9、和终止地址。在程序执行过程中,在对内存进行访问操作时首先进行访址合法性检查,即检查经过重定位后的内存地址是否在上、下界寄存器所规定的范围之内,若在规定的范围之内,则访问是合法的,否则是非法的,并产生访址越界中断。,2)保护键法。保护键法为每一个被保护存储块分配一个单独的保护键,保护键可设置成对读写同时保护的,也可设置成只对读或写进行单项保护的。在程序状态字(PSW)中设置相应的保护键开关字节,对不同的进程,赋予不同的开关代码与被保护的存储块中的保护键相匹配。如果开关字中的代码与保护键匹配或存储块未受到保护,则允许访问该存储块,否则将产生访问出错中断。,3)界限寄存器与CPU的用户态或核心态工作
10、方式相结合的保护方式。在这种保护模式下,用户态进程只能访问那些在界限寄存器所规定范围内的内存部分,而核心态进程则可以访问整个内存地址空间。UNIX系统就是采用的这种内存保护方式。,4内存扩充为了满足大量进程的存贮请求,内存管理应该能够实现在内存中存放尽可能多的用户进程,给它们分配得以运行的足够的内存空间,从而发挥整个系统的使用效率。但是,实际当中计算机的内存容量是有限的,这就要求计算机系统需要提供“扩充的内存”,以保证内存分配的需要。这种扩充不是指物理内存的扩充,而是指利用存储管理软件为用户程序提供一个比实际内存容量更大的逻辑存储空间,即所谓的虚拟存储技术。,5.2 分区式存储管理,分区式存储
11、管理是满足多道程序设计的最简单的一种存储管理技术。分区的基本思想是将内存区域划分成若干个大小不等的区域,每个区域称为一个分区,每个分区存放一道进程对应的程序和数据,使进程在内存中占用一个连续的区域,而且进程只能在所在分区内运行。根据分区的方式,可分为固定式和可变式分区两类。,固定分区是指在用户进程装入之前,系统或系统操作员将用户空间划分为若干个固定大小的区域,每个进程占用一个分区,划分好的分区大小和个数在系统整个系统运行期间不会变化。因此,也称为静态分区。系统对内存的管理和控制通过数据结构分区说明表来实现的。分区说明表中的每个表项记载一个分区的特性,包括分区号、分区大小、分区起始地址和使用状态
12、(已分配用1表示,空闲用0 表示)。内存的分配与释放、存储保护以及地址变换等都是通过分区说明表进行的。分区说明表存放在系统区内,不能由用户改动。,固定分区管理能使多个进程共享内存,具有数据结构简单,分配和回收算法容易实现等优点。但是,存在小进程占据大分区,造成内存浪费的碎片现象和可调入的进程大小受到分区大小限制等的问题。,可变分区是指在装入进程的过程中,根据进程的实际需要,建立分区,该分区的大小正好等于进程的大小。随着系统的运行,内存中的分区大小和个数都会发生变化,因此,又称为动态分区。系统初起时,内存中除操作系统区之外,其余内存空间为一个完整的大空闲区。当有进程要求装入运行时,从该空闲区中划
13、分一块与进程大小一样的区域分配之。当系统运行一段时间后,随着一系列的分配与回收,原来的一整块大空闲区形成了若干个占用区和空闲区相间的布局。,为了实现分区分配,系统中必须配置相应的数据结构,用来描述空闲分区和已分配分区的情况,为分配提供依据。常用的数据结构有以下两种形式:(1)分区分配表。用于记录每个已分配分区的情况。每个分区占一个表目,表目中包括分区序号、分区始址及分区的大小等数据项。(2)空闲分区链(表)。为了实现对空闲分区的分配和链接,在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区所用的前后指针;在分区尾部则设置一后向指针,通过前、后向链接指针,可将所有的空闲分区
14、链接成一个双向链。,1,分区分配算法:1)首次适应算法。该算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区。这为以后到达的大进程分配大的内存空间创造了条件。其缺点是低址部分不断被划分,会留下许多难以利用的、很小的空闲分区,而每次查找又都是从低址部分开始,这无疑会增加查找可用空闲分区时的开销。,
15、2,2)循环首次适应算法。该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给进程。为实现该算法,应设置一起始查寻指针,用于指示下一次起始查寻的空闲分区,并采用循环查找方法,即如果最后一个(链尾)空闲分区的大小仍不能满足要求,则应返回到第一个空闲分区,比较其大小是否满足要求。找到后,应调整起始查寻指针。该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺乏大的空闲分区。,3)最坏适应算法。最坏适应算法要求空
16、闲分区按其容量以从大到小的顺序形成一空闲分区链。分配时,先检查空闲区链中的第一个空闲分区,若它的大小小于所要求的分区的大小,则分配失败;否则从该分区中划出进程所要求大小的一块内存空间分配给申请分配的进程,余下的空闲区则重新排列后插入空闲区链。最坏适应算法的特点是,总是挑选满足进程要求的最大分区分配给进程,这样使分给进程后剩下的空闲区也比较大,也能装下其它的进程。但是由于最大的空闲区总是首先被分配而进行划分,当有大的进程到来时,其申请的存储空间往往不能得到满足。,4)最佳适应算法。所谓“最佳”是指每次为进程分配内存时,总是把能满足要求、又是最小的空闲分区分配给进程,避免“大材小用”。为了加速寻找
17、,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。孤立地看,最佳适应算法似乎是最佳的,然而在宏观上却不一定。因为每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的小空闲区。,分配内存当一进程要求装入内存时,系统将利用某种分配算法,从空闲分区链(表)中找到所需大小的分区,为进程分配内存内存空间。假设请求的分区大小为u.size,空闲分区链中每个空闲分区的大小可表示为m.size。若m.sizeu.sizesize(size是事先规定的不再切割的剩余分区的大小),说明多余部分太小,可不再切割,将整个
18、分区分配给请求者;否则(即多余部分超过size),从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分链中。然后,将分配区的首址返回给调用者。右图给出了分配流程。,当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区链中找到相应的插入点,此时可能出现以下四种情况之一:,回收区既不与F1邻接,又不与F2邻接。这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。,优点:(1)实现了多个作业或进程对内存的共享,有助于多道程序设计,从而提高了系统的资源利用率。(2)该方法要求的硬件支持少,管理算法简单,因而实现容易。缺点:(1)内存利用
19、率仍然不高。存在着严重的碎小空闲区(碎片)不能利用的问题。(2)作业或进程的大小受分区大小控制,除非配合采用覆盖和交换技术来实现内存的扩充。(3)难以实现各分区间的信息共享。,5.3 覆盖与交换技术,覆盖与交换技术是在多道环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中具有较强的生命力。下面主要介绍覆盖与交换技术的基本思想。,覆盖技术是基于这样一种思想出来的,即一个程序并不需要一开始就把它的全部指令和数据都装入内存后再执行。在单CPU系统中,每一时刻事实上只能执行一条指令。因此,不妨把程序划分为若干个功能上相对独立的程序段,按照程序的逻辑结构,让那些
20、不会同时执行的程序段共享同一块内存区。通常,这些程序段都被保存在外存中,当有关程序段的先前程序段已经执行结束后,再把后续程序段调入内存覆盖前面的程序段。这使得用户看来,好像内存扩大了,从而达到了内存扩充的目的。,整个程序正文段被分为两个部分。一个是常驻内存部分,该部分与所有的被调用程序段有关,因而不能被覆盖。这一部分称为根程序。图5-11(b)中,程序段A是根程序。另一部分是覆盖部分,图5-11(b)中被分为两个覆盖区。其中,覆盖区0由程序段B,C共享,其大小为B,C中所要求容量最大者(50K)。覆盖区1为程序段F,D,E共享,其大小为F,D,E中所要求容量最大者(40 K)。这样,虽然该进程
21、正文段所要求的内存空间中A(20K)+B(50K)+F(30K)+C(30K)+D(20K)+E(40K)=190K,但由于采用了覆盖技术,只需110K的内存空间即可开始执行。,覆盖技术要求程序员提供一个清楚的覆盖结构。即程序员必须完成把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序的工作。操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。一般来说,一个程序究竟可以划分为多少段,以及让其中的哪些程序共享哪一内存区只有程序员清楚。这就要求程序员既要清楚地了解程序所属进程的虚拟空间及各程序段所在虚拟空间的位置,又要求程序员懂得系统和内存的内部结构与地址划分,这样,加重了程序员的编程
22、负担。因此只有对操作系统的虚拟空间和内部结构很熟悉的程序员才会使用覆盖技术。,广义地说,交换是指先将内存中暂时不运行的进程的某部分的程序或数据写入外存交换区,再从外存交换区中调入指定的进程的程序段或数据到内存中来,并让其执行的一种内存扩充技术。如果交换是以整个进程为单位,便称之为“整体交换”或“进程交换”。如果交换是以“页”或“段”为单位,则分别称为“页面交换”和“分段交换“。在具有交换功能的操作系统中,通常把外存中的一块存储区域划分出来,用来存放从内存中换出的暂时不运行的进程的程序段或数据,这块存储区域称之为交换区。为了提高换进换出的速度,交换区的分配采取的是连续分配方法。因此,对交换区的分
23、配和回收,与动态分区式存储管理方案的方法类似。,与覆盖技术相比,交换技术对用户是透明的,交换不要求程序员给出程序段之间的覆盖结构,而且交换主要是在进程之间进行,而覆盖则主要在同一个作业或进程内进行。另外,覆盖只能覆盖那些与覆盖程序段无关的程序段。但交换技术需要较多的软硬件支持。,5.4页式存储管理,在分区式存储管理方案中,一个进程总占用一块连续的内存区域,因此产生了“碎片”问题。虽然采用拼接技术可以使零散的“碎片”连成一片,但要花费大量的处理机时间。为了更好地解决碎片问题,人们提出了另一种内存存储管理方案,即分页式存储管理方案。该管理方案将使一个进程可以存放在不连续的内存区域中。分页式存储管理
24、方案分为两种:静态页面存储管理方案和动态页面存储管理方案。,1)静态页式存储管理(1),1基本思想系统首先把内存的存储空间划分成若干个大小相等的小区域,每个小区域称之为页面或存储块,页面按0、1、2、3 的格式依次编号。同样,每个进程的虚拟地址空间也被分成若干个与页面大小相等的多个片段,称之为页,编号为0、1、2、3。分配内存时,进程的每一个页装入内存的一个存储块。同一进程的多个页可以分配在块号不连续的存储块内。静态页式存储管理又称为简单页式存储管理,它的特点是系统如能满足一个进程所要求的全部块数,此进程才能被装入内存,否则,不为它分配任何内存。,1)静态页式存储管理(2),2数据结构在分页式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课件 存储器 管理
链接地址:https://www.31ppt.com/p-6575598.html