第六章存储管理基础_第1页
第六章存储管理基础_第2页
第六章存储管理基础_第3页
第六章存储管理基础_第4页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 存储管理基础 存储器是计算机系统的记忆设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中,对存储器的管理直接影响着系统的性能。存储管理即存储器管理,它既包括内存资源的管理,也包括外存资源的管理。但习惯上,我们将存储管理局限于内存资源的管理,而将外存资源的管理放在文件系统中来介绍,因为它是文件的存储部件。在下面的介绍中,在不引起混淆的前提下,存储管理指的都是内存资源的管理。本章介绍关于存储管理的基础知识。首先,对存储管理的一些基本概念进行阐述,以使我们对操作系统中的存储器管理有一宏观的了解;然后,以存储管理的基本过程为

2、指导,以系统实存空间的管理为目标,介绍可采取的存储分配方式及具体的管理方法。2022/7/1926.1存储管理概念6. 2连续分配方式与管理6. 3非连续分配方式与管理2022/7/1936.1存储管理概念6.1.1存储管理目的6.1.2存储管理基本过程2022/7/1946.1.1存储管理目的(1)功能方面的目标组织好内存空间,以提供用户作业使用。这需要一个合适的内存组织与描述技术;实现内存容量扩充,为用户作业提供足够大的内存空间;这需要一个可行的内存扩充方法(包括覆盖、交换及虚拟存储);响应作业对内存空间的申请请求,在空间可满足时,为之分配一部分内存空间并装入作业 ;支持进程在内存中的活动

3、;当作业完成时,能够回收该作业原来占有的资源。这需要一个合理的内存分配与回收技术。2022/7/1956.1.1存储管理目的(2)性能方面的目标 实现对存储内容的安全保护,保障其不受非法访问。这需要一个有效的存储保护技术;实现内存中信息的有效共享。这需要一个有效的信息共享技术;管理措施的实现性能和代价是合理的。2022/7/1966.1.2存储管理基本过程 一个程序从开始产生到最终运行完成的过程经历了:语言处理:由语言处理程序(编译、解释或汇编)将用户源代码转换成对应的目标模块;链接:由链接程序将一组目标模块以及它们所需要的库函数等链接在一起,形成一个可执行的目标模块;装入:由装入程序将可执行

4、模块装入内存。语言处理链接运行目标模块可执行模块源程序图6.2 存储管理的流程装入内存退出2022/7/1976.1.2存储管理基本过程 地址空间 逻辑地址空间 用户编写的源程序经过语言处理程序的处理(编译、解释或汇编)之后,形成的目标代码通常为相对地址形式,即目标程序的首地址总是为0,而程序中的其它地址都是相对于首地址而编址的。相对地址也称为逻辑地址或虚地址。逻辑地址不是内存的物理地址,不能用逻辑地址在内存中存取信息。 一个目标程序的所有逻辑地址的集合,称为逻辑地址空间。不同程序的逻辑地址空间可以相同。物理地址空间 物理地址即内存中存储单元的真实地址,它是可识别的、实际存在的。物理地址可以用

5、来直接寻址,所以也称绝对地址或实地址。 内存全部存储单元的物理地址的集合称为物理地址空间。不同程序的物理地址空间不能冲突。2022/7/1986.2连续分配方式与管理6.2.1单一连续分配方式6.2.2分区分配方式 2022/7/1996.2连续分配方式与管理 连续分配是指为一个用户程序分配一个连续的内存空间,即一个程序是作为一个整体装入到内存的。这种分配方式出现得较早,其管理相对也比较简单。以内存(用户区)内每次可以容纳的程序数目为标准,连续分配有两种: 1) 单一连续分配 这时最早出现、也是最简单的一种存储分配方式。它规定整个内存用户区中至多只驻留一个程序,整个用户区只为一个用户的一个程序

6、所独占。因此,这种方式只适用于单用户单任务操作系统。 2) 分区分配 这种方式允许内存用户区内可以同时装入多个用户程序;当然,每一用户程序占有一个连续的内存空间(一个分区)。因此,分区式分配方式适用于基于多道程序的操作系统。它又进一步细分为固定分区分配和可变分区分配。2022/7/19106.2.1单一连续分配方式 (一)内存空间的组织 采用单一连续分配方式时,内存被分为系统区和用户区两个区域系统区 系统区只供操作系统使用,用来驻留操作系统本身代码和数据。操作系统占有的系统区可以在内存的不同区域。用户区 用户区是除系统区以外的内存其它区域,它供唯一的用户使用,存放用户程序和数据。2022/7/

7、19116.2.1单一连续分配方式 (二)内存分配与回收由于内存用户区一次至多只允许装入一个程序,当该程序被装入内存时,就从内存用户区的基地址开始连续地存放该程序;在程序整个执行过程中,只有该程序在内存运行,它独占用户区内存,直到退出。所以,在采用单一连续分配方式时,不需要考虑分内存分配和回收的问题。 该分配方式下的存储管理非常简单,开销小。但是,其缺点更加明显:内存资源利用率低。在单一连续分配方式下,存储器不能被充分利用,因为程序的大小一般远小于可分配的用户区存储空间,多余的存储空间就不能被充分利用。处理机利用率低。当调入内存的程序提出IO请求时,由于其独占所有资源,在请求完成以前,处理机只

8、能空闲等待。周转时间长。因为每次只能装入一个程序,所以即使有运行时间很短的小程序,也必须等待之前的程序完成后,才能装入运行,从而很容易导致短作业的周转时间过长。不能实行内存扩充。当内存容量小于某一程序的地址空间时,该程序便无法运行,缺乏灵活性。2022/7/19126.2.2分区分配方式 分区分配是另一种连续分配方式,也是能使多道程序并发运行的最简单的一种存储管理方案。这种内存分配方式把内存用户区划分为若干个连续区域,每一区域称为一个分区;每个分区只可以装入一个程序。根据分区划分方式的不同,分区分配方式又分为固定分区分配和可变分区分配两类。 2022/7/19136.2.2分区分配方式 6.2

9、.2.1 固定分区分配(一)基本思想预先把可分配的内存空间划分成若干个固定大小的连续区域,每一区域称为一个分区(region);每个分区可以装入一个且只能装入一个进程。这样,分区后的内存中就装入了多道程序,从而支持多道程序并发设计。在固定分区分配中,每个分区的大小划分原则通常是由系统操作员或操作系统决定的,但是分区大小和总分区数在被划分后是固定不变的,故这种分区分配方式又称为静态分区分配。2022/7/19146.2.2分区分配方式(二)固定分区分配管理 (1) 内存空间的组织与描述为了给系统提供内存状态信息,便于内存分配,通常将所有的内存分区根据大小进行排队,并为之建立一个数据结构分区使用表

10、,该表格反映了内存空间目前的使用情况,包含的表项有:每个分区的区号、起始地址、分区长度、状态(是否已分配)及装载的进程名,如表6.1所示。表6.1 分区使用表的结构2022/7/19156.2.2分区分配方式 (2)内存分配与回收当一个用户程序要装入内存时,由内存分配程序按一定的策略检索分区使用表,从中找出一个能满足要求的、尚未分配的分区,将它分配给该程序,然后修改分区使用表中该分区表项中的状态;若找不到大小足够的分区,则拒绝为该用户程序分配内存。当一个程序运行完成时,系统回收内存资源,并修改分区使用表中对应分区的状态。表6.2和图6.8示意了装入两个程序后的分区使用表和存储空间使用情况。区号

11、起始地址大小状态进程名15K10K未分配215K20K已分配1335K30K未分配465K40K已分配2表6.2 分区使用表 图6.8 存储空间使用情况 2022/7/19166.2.2分区分配方式(二)固定分区分配管理 (3) 固定分区分配的缺点由于每一分区的大小是固定的,这就限制了可容纳程序的大小。在装入一个程序时,若找不到足够大的分区,则拒绝为该程序分配内存,所以这种分配方式的内存利用率任然不够高,系统的活跃进程数也受到了一定的限制。2022/7/19176.2.2分区分配方式 6.2.2.2 可变分区分配(一)基本思想内存不是预先划分好的;当一个进程被装入内存时,根据进程的实际需要,动

12、态地为它分配一段连续的内存空间。具体地说,在装入一个进程时,若内存有足够的空闲空间,则由系统从内存中划出一块空闲空间分配给该进程,分配的空间大小等于该进程的大小;如果内存中没有满足进程要求的空闲空间,则使进程等待。由于进程的大小不一,因此可变分区分配中的分区大小也是变化的。可变分区分配方式也称动态分区分配方式。在采用可变分区分配的操作系统中,系统刚启动时,除了往操作系统区加载必要的系统程序外,其余空间为一个完整的大空闲区。当有程序需要装入时,则从该空闲区中分配一块大小与程序相同的区域,形成一个已分配区。随着系统的运行,不断进行内存分配和回收,原来的一整块大空闲区就形成了若干占用区和空闲区相间的

13、布局。若有相邻的两块空闲区,系统可以将它们合并成为一块连续的大空闲区。2022/7/19186.2.2分区分配方式 碎片问题 (1) 碎片的产生?在分区分配方式下,经过一段时间的内存分配与回收后,内存中存在很多很小的空闲区。它们每一个都很小,不足以满足分配要求;即使其总和能满足分配要求,但因为没有单个空闲区能大到足以装入一个程序,因此这些小的空闲区仍然无法得到利用。这些没有被充分利用的空闲区被称为“碎片”(fragment)或“零头”。程序在进入内存时,需对内存进行划分,容易形成小的空闲块,最终形成碎片。碎片的形成造成了存储资源的浪费,由此操作系统应该能够提供相应的解决手段。2022/7/19

14、196.2.2分区分配方式 (2)碎片的解决有两种思路:一种是:当出现一个程序无法装入到一个空闲区时,系统就对程序整个逻辑地址空间进行划分,然后以其子部分为单位来装入。这种思路否定了连续分配方式要求程序整体性装入的前提,不在本节的考虑范围之内;但其思想正是非连续分配方式的基础。另一种是:既然系统中有许多的小的空闲区,就可以采用专门技术将它们合并,形成一个大的空闲区,这样也可以满足程序装入请求。在连续分配管理中,一般采用紧凑技术来解决这个问题。所谓紧凑技术就是指通过在内存移动程序,将所有小的空闲区域合并为一个大的空闲区域,以满足程序对内存的需求。紧凑技术又称紧缩技术、紧致技术、浮动技术、搬家技术

15、等。2022/7/19206.3非连续分配方式与管理6.3.1分页管理方式6.3.2分段管理方式6.3.3段页式管理方式2022/7/19216.3.1分页管理方式 6.3.1.1 分页分配基本思想分页分配方式是一种典型的非连续分配方式。这种方式是从方便系统管理的角度提出的。其基本思想是:内存物理地址空间被分成若干等长的子部分,每一子部分称为一个物理块(block),也称块、物理页面或页框(page frame) ;内存分配的基本单位是页;当装入一个程序时,按页为单位,一次性将其所有页装入内存,每一页放在内存的一个物理块中。这样,对一个程序而言,除最后一页可能因不能完全填满所分配的物理块而导致

16、少量的内存空间浪费(称为页内碎片,或简称内碎片)之外,其它页在放入内存时,都不会导致碎片的发生。2022/7/19226.3.1分页管理方式 (一)程序逻辑地址空间分页(1)页面编号用户程序被分成许多等长的页面。这些页面需要加以编号。页面编号即赋予某一页面的编号,可简称页号。例如,一般从开始对一个程序包含的所有页面进行编号,首页面编号为0,其余页面的编号依次递增。(2)页面大小 页面大小,简称页长,是由机器的地址结构决定的,即硬件决定了操作系统中页面的大小。页面大小的选择对系统的执行效率来说是十分重要的。如果页面大小设置得太小,虽然可以减小页内碎片,提高了内存的利用率;但每个进程将会占用更多的

17、页面,从而导致对进程的描述数据结构(即页表)过长,占用大量内存;同时,由于现代操作系统都采用了页面置换技术来从逻辑上扩充内存,因此页面大小过小也降低了页面换入换出的效率。另一方面,如果设置的的页面太大,虽然可以减少页表的长度,提高页面换入换出的速度,但又会使页内碎片增大。因此,页面的大小应选择得适中。取决于硬件地址结构,页面的大小设置为2的整数次幂,通常为512K字节。2022/7/19236.3.1分页管理方式 (一)程序逻辑地址空间分页(3)逻辑地址结构对程序的逻辑地址空间进行分页是由系统自动完成的,对用户透明。用户程序本身具有自己的一维地址空间。系统将自动对程序逻辑地址空间分页,形成一种

18、“页号页内偏移量”的地址结构,以支持分页分配方式。在这一逻辑地址结构中,高位部分为页号,低位部分为页内偏移量(即相对于本页起始地址的偏移地址,也称页内地址)。按照这一逻辑地址结构的规定,可知页号、页长与对应的程序逻辑地址的关系为:页号页长+页内偏移量程序逻辑地址2022/7/19246.3.1分页管理方式 如图6.12所示。这一逻辑地址结构包含两个部分:前一部分为页号P,后一部分为页内偏移量W。图中的地址长度为32位,其中0-11位低地址为页内偏移量W,即每页的大小为4KB;12-31位高地址为页号P,即地址空间允许的页数有1MB。图6.12分页分配中的逻辑地址结构例如,当P=2,页长为,W=

19、567时,对应的程序逻辑地址为21KB+567= 2615B。2022/7/19256.3.1分页管理方式 (二)内存物理地址空间分块 (1)物理块编号系统将内存物理地址空间划分成与页等长的块,然后也加以编号。和页面编号类似,物理块编号即赋予某一物理块的编号,可简称块号。例如,一般从开始对内存的所有物理块进行编号,首块号为0,其余块的编号依次递增。(2)内存空间使用状况的描述内存空间被分块之后,随着进程不断被以页面为单位装入内存,可能有的物理块已经分配给某一页,有的还是空闲的。因此,系统需要建立一个能描述内存所有物理块目前使用状况的描述,来为内存分配服务;即当准备为一个进程页面分配一个物理块时

20、,系统需要事先知道内存当前的使用情况,以便为进程正确分配物理块。2022/7/19266.3.1分页管理方式 (三)页面分配与回收(1)页块对应关系(页表)内存分配时,以页面为单位,并按用户程序的页数多少进行分配;逻辑上相邻的页面在内存中不一定相邻,即用户程序不一定要分配连续的物理块。这样,在分配管理时,就必须要为每一进程的装入设置一个数据结构,来表示程序的一页与内存的一块之间的对应关系;这一数据结构称为页表(page table)。(2)页内碎片在为进程分配内存时,以块为单位将进程中的若干个页面分别装入到多个可以不相邻接的物理块中。由于进程的最后一页面经常装不满一块,而形成了不可利用的碎片,

21、称之为“页内碎片”。显然,每一进程的装入都可能导致出现一个页内碎片,其长度小于一页。2022/7/19276.3.1分页管理方式 (三)页面分配与回收(3)地址变换当程序的一个页面装入到内存的一个物理块之后,程序的一个逻辑地址就有与之对应的一个内存物理地址。系统需要提供相应的地址变换机构。地址变换需要用到页表的支持。图6.13给出了一个比较完整的分页分配过程,其中涉及到了程序逻辑地址空间分页、内存物理地址空间分块、页表、地址变换等分页分配方式下的管理关键技术。在图6.13中,有两个程序A、B,程序A被分成0、1、2、3共4个页面,程序B被分成0、1、2共3个页面;程序A分别分配并装入到内存物理

22、块1、3、4、6中,程序B分别分配并装入到内存物理块2、8、9中。 2022/7/19286.3.1分页管理方式 图6.13 分页分配过程与管理技术程序A0123程序B01程序B页表132436021829页号块号程序A页表地址变换逻辑地址物理地址A0内存0B0A1A2123A35B1B267849分页分配内存空间使用表0122022/7/19296.3.1分页管理方式 6.3.1 分页管理方式小结分页分配管理方式是一种典型的非连续内存空间分配方式。分页分配管理的主要优点是;由于它不要求进程或进程的程序段和数据在内存中连续存放,因而大大提高了内存空间的利用率,有效地缓解了碎片问题。分页分配是一

23、种较好的内存分配方式,在现代操作系统中被广泛应用。其管理时的困难或不足有:管理时要求有相应的硬件支持,降低了CPU的速度;没有根除碎片。如果许多进程在分配内存时都出现碎片,同时设置的页面较大,则这一部分的内存容量损失仍然比较大。2022/7/19306.3.2分段管理方式 6.3.2.1 分段分配基本思想一般来说,程序在逻辑上是由若干功能相对完整的段组成,如程序段和数据段等;这些段是程序的基本逻辑单位,具有自己独立的连续地址空间。因此,为实现非连续分配,可以自然地按照程序的逻辑结构,将一个程序分为若干个段;然后以段为单位来为之分配内存,一段将占用内存一个连续的地址空间。分段分配的基本思想可描述

24、如下:程序自然分段。即根据程序自身的逻辑结构,将程序的逻辑地址空间划分为若干子部分,每一子部分是程序原有的基本逻辑单位,称为段。内存空间根据段来动态划分。内存不是预先划分好的,而是在为程序分配内存时,以段为单位,一次性将其所有段装入内存,每一段放在内存的一个连续的地址空间中。具体地说,在装入一个段时,若内存有足够的连续空闲空间,则由系统从内存中划出一块空闲空间分配给该段,分配的空间大小等于该段的大小;如果内存中没有满足程序要求的空闲空间,则不能为程序分配内存。可以看出,一个段的内存分配非常类似于可变分区分配方式。在分段分配过程中,随着不断进行以段为单位的内存分配和回收,内存也就形成了若干已分配

25、区域和空闲区域相间的空间布局。若有相邻的两块空闲区域,系统可以将它们合并成为一块连续的大空闲区域。 2022/7/19316.3.2分段管理方式 (一)程序逻辑地址空间分段(1)段号用户程序被分成许多具有自己独立地址空间的段。每一段在用户编程时虽然赋予了一个段名,如主程序段main、子程序段sub、数据段data和工作区段,但为方便管理,还需要对它们进行编号,即段号。例如,一般从开始对一个程序包含的所有段进行编号,段的编号依次递增。(2)逻辑地址结构对由若干段组成的一个程序而言,每一段都有自己的段号,所有的段号就组成了一个段地址空间;段地址空间是一个一维地址空间,从0开始编址。同时,每一段都有

26、自己的地址空间,其中的地址称为段内地址。由此可知,在分段分配方式下,整个进程的地址空间是由段号和段内地址共同构成的一个二维地址空间;一个逻辑地址必须同时包括段号和段内地址两部分,这样也符合用户的编程习惯。2022/7/19326.3.2分段管理方式 (2)逻辑地址结构图6.19示意了分段分配方式下逻辑地址的结构。其中,段号S和段内地址W都是从0开始的编址。段号的长度决定了程序地址空间的最大段数,段内地址位数决定了各段的长度。假设某机器指令地址部分为32位,地址结构规定如下:023共24位为段内地址位,2431共8位为段号部分,则表示一个程序最多可分为28=256个段,每一段的最大长度为2241

27、6MB。图6.19 分段分配方式下的逻辑地址结构2022/7/19336.3.2分段管理方式 (二)分段分配与回收 (1)内存空间使用状况的描述 由于分段分配方式在局限于一段分配时,内存空间的变化与可变分区分配方式类似,所以我们可以用同样类似于分区使用表的表格来记录内存的分配状态,标记内存当前哪些区域是已经分配出去的,哪些还是空闲的,来为内存分段分配服务。这一表格我们可以称之为分段使用表。它对内存中每一连续区域进行描述,每一连续区域在表中对应有一表项(一个结点),一个表目必须包括:该连续区域的首地址、该连续区域的长度以及标识该连续区域是已分配还是空闲的标志。分段使用表是必需的,因为当准备为一个

28、段分配一个连续区域时,系统需要知道内存当前的分配情况,以便为该段正确地分配空闲区域。 (2)段表 在分段分配方式下,系统以段为单位为程序分配内存。由于各段是按逻辑信息划分的,长度一般并不相等,所以在装入内存时,系统为它们分配的区域大小也不相等;而且,因为每一段有相对独立完整的程序子功能,所以各段分配到的内存空间之间不一定需要连续。这样,在分段分配管理时,就必须要为每一程序的装入设置一个数据结构,来表示程序的任一段各在内存的什么连续区域中。因此,系统为每个进入内存的程序(进程)建立了一个段映射表,简称段表。2022/7/19346.3.2分段管理方式 (3)地址变换当程序以段为单位装入到内存的若

29、干连续区域之后,程序的一个逻辑地址就有与之对应的一个内存物理地址。系统需要提供相应的地址变换机构。地址变换需要用到段表的支持。图6.20给出了一个比较完整的分段分配过程,其中涉及到了分段使用表、段表、地址变换等分段分配方式下的管理关键技术。2022/7/19356.3.2分段管理方式 图6.20 分段分配过程与管理技术Main段0100K200K150K段首地址段表地址变换逻辑地址物理地址Main内存0Sub2100K分段分配010K-1Sub1段1015K-1Sub2段309K-1012段号10K15K9K段长100K10K40K长度分段使用表0100K110K首地址Main空闲标志110K

30、150KSub1159K200K215K-19K41K15K150K159K200KSub2空闲Sub12022/7/19366.3.2分段管理方式 6.3.2 分段管理方式小结分段分配方式的主要优点是便于程序模块化处理及适应数据结构的变化。段是按程序信息逻辑划分的,反映了程序功能的逻辑区分,也就是说段对用户是可见的。在分段管理中,段长可根据需要动态增长。 分段分配方式也有一些缺点。分段的长度受内存可用空闲区大小的限制,且因为是分段调入内存的,这就不可避免地会产生碎片。段的动态增长也会给存储管理带来一定难度和负担。不管怎样,分段分配方式的优点还是很明显的,现代操作系统在设计与实现存储管理时,基本上都采用了这一思想。2022/7/19376.3.3段页式管理方式 段页式管理方式是结合了分段管理方式与分页管理方式各自优点而提出的一种非连续内存分配管理方式。分页管理方式从系统管理角度出发,以页面为单位来分配内存;因为每

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论