收藏 分享(赏)

051 存储管理.ppt

上传人:fmgc7290 文档编号:8435746 上传时间:2019-06-27 格式:PPT 页数:153 大小:701.50KB
下载 相关 举报
051 存储管理.ppt_第1页
第1页 / 共153页
051 存储管理.ppt_第2页
第2页 / 共153页
051 存储管理.ppt_第3页
第3页 / 共153页
051 存储管理.ppt_第4页
第4页 / 共153页
051 存储管理.ppt_第5页
第5页 / 共153页
点击查看更多>>
资源描述

1、5 存储管理,5.1 存储管理的功能,5.2 分区存储管理,5.3 覆盖与交换技术,5.4 页式管理,5.5 段式与段页式管理,5.6 局部性原理和抖动问题,本章小结,习题,存储器是计算机系统的重要资源之一。因为任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。存储器由内存(primary srotage)和外存(secondary storage)组成。内存由顺序编址的块组成,每块包含相应的物理单元。CPU 要通过启动相应的输入输出设备后才能使外存与内存交换信息。,5.1 存储管理的功能,5.1.1 虚拟存储器虚拟存储器是存储管理的核心概念。现代

2、计算机系统的物理存储器都分为内存和外存,内存价格昂贵,不可能用大容量的内存存储所有被访问的或不被访问的程序与数据段。而外存尽管访问速度较慢,但价格便宜,适合于存放大量信息。存储管理系统把进程中那些不经常被访问的程序段和数据放入外存中,待需要访问它们时再将它们调入内存。,5.1 存储管理的功能,5.1.1 虚拟存储器那么,对于那些一部分数据和程序段在内存而另一部分则在外存的进程,怎样安排它们的地址呢?通常由用户编写的源程序,首先要由编译程序编译成CPU 可执行的目标代码。然后,链接程序把一个进程的不同程序段链接起来以完成所要求的功能。显然,对于不同的程序段,应具有不同的地址。有两种方法安排这些编

3、译后的目标代码的地址。 按照物理存储器中的位置赋予实际物理地址。 编译链接程序把用户源程序编译后链接到一个以 0 地址为始地址的线性或多维虚拟地址空间。,5.1 存储管理的功能,5.1 存储管理的功能,Int a;A= func()Func(),gcc,5.1 存储管理的功能,Int a;A= func()Func(),100,100,5.1 存储管理的功能,Int a;A= func()Func(),0,100,虚拟地址,物理地址,虚拟空间-虚拟存储器,虚拟地址,物理地址,按照物理存储器中的位置赋予实际物理地址。这种方法的好处是CPU 执行目标代码时的执行速度高。但是,由于物理存储器的容量限

4、制,能装入内存并发执行的进程数将会大大减少,对于某些较大的进程来说,当其所要求的总内存容量超过内存容量时将会无法执行。另外,由于编译程序必须知道内存的当前空闲部分及其地址,并且把一个进程的不同程序段连续地存放起来,因此编译程序将非常复杂。,5.1 存储管理的功能,编译链接程序把用户源程序编译后链接到一个以 0 地址为始地址的线性或多维虚拟地址空间。这里,链接既可以是在程序执行以前由链接程序完成的静态链接,也可以是在程序执行过程中由于需要而进行的动态链接。每一个进程都拥有这样一个空间(这个空间是一维的还是多维的由存储管理方式决定)。每个指令或数据单元都在这个虚拟空间中拥有确定的地址,把这个地址称

5、为虚拟地址(virtual address)。显然,进程在该空间的地址排列可以是非连续的,其实际物理地址由虚拟地址到实际物理地址的地址变换机构变换得到。由源程序到实际存放该程序指令或数据的内存物理位置的变换如图 5.1 所示。,5.1 存储管理的功能,将进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储器。虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每个进程中互相关连的信息的相对位置。与实际物理存储器只有一个(单机系统中),且被所有进程共享不一样,每个进程都拥有自己的虚拟存储器,且虚拟存储器的容量是由计算机的地址结构和寻址方式确定的。例如,直接寻址时,如果CPU 的有

6、效地址长度为16位,则其寻址范围为 0到64K。,5.1 存储管理的功能,图5.1 地址变换与物理存储器,图5.1中的编译和链接主要是语言系统的设计问题。不过,由虚拟存储器到物理存储器的变换是操作系统所必须解决的问题。要实现这个变换,必须要有相应的硬件支持,并使这些硬件能够完成统一管理内存和外存之间数据和程序段自动交换的虚拟存储器功能。即,由于每个进程都拥有自己的虚存,且每个虚存的大小不受实际物理存储器的限制,因此,系统不可能提供足够大的内存来存放所有进程的内容。内存中只能存放那些经常被访问的程序和数据段等。这就需要有相当大的外部存储器,以存储那些不经常被访问或在某一段时间内不会被访问的信息。

7、待到进程执行过程中需要这些信息时,再从外存中自动调入主存。,5.1 存储管理的功能,5.1.2 地址变换内存地址的集合称为内存空间或物理地址空间。内存中,每一个存储单元都与相应的称为内存地址的编号相对应。显然,内存空间是一维线性空间。怎样把几个虚存的一维线性空间或多维线性空间变换到内存的唯一的一维物理线性空间呢?这涉及到两个问题。一个是虚拟空间的划分问题。例如进程的正文段和数据段应该放置在虚拟空间的什么地方。虚拟空间的划分使得编译链接程序可以把不同的程序模块(它们可能是用不同的高级语言编写的),链接到一个统一的虚拟空间中去。虚拟空间的划分与计算机系统结构有关。VAX-11机的虚拟空间结构如图5

8、.2。,5.1 存储管理的功能,第二个问题是把虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址的问题。称之为地址重定位或地址映射。地址映射就是要建立虚拟地址与内存地址的关系。实现地址重定位或地址映射的方法有两种:静态地址重定位动态地址重定位,5.1 存储管理的功能,图5.2 虚拟空间的划分,1. 静态地址重定位静态地址重定位(static address relocation)是在虚拟空间程序执行之前由装配程序完成地址映射工作。假定分配程序已分配了一块首地址为BA的内存区给虚拟空间内的程序段,且每条指令或数据的虚拟地址为VA,那么,该指令或数据对应的内存地址为MA=BA+VA

9、,从而完成程序中所有地址部分的修改,以保证CPU的正确执行。显然,对于虚拟空间内的指令或数据来说,静态地址重定位只完成一个首地址不同的连续地址变换。它要求所有待执行的程序必须在执行之前完成它们之间的链接,否则将无法得到正确的内存地址和内存空间。,5.1 存储管理的功能,静态重定位的优点是不需要硬件支持。但是,使用静态重定位方法进行地址变换无法实现虚拟存储器。这是因为,虚拟存储器呈现在用户面前的是一个在物理上只受内存和外存总容量限制的存储系统,这要求存储管理系统只把进程执行时频繁使用和立即需要的指令与数据等存放在内存中,而把那些暂时不需要的部分存放在外存中,待需要时自动调入,以提高内存的利用率和

10、并行执行的作业道数。显然,这是与静态重定位方法矛盾的,静态重定位方法将程序一旦装入内存之后就不能再移动,并且必须在程序执行之前将有关部分全部装入。静态重定位的另一个缺点是必须占用连续的内存空间,这就难以做到程序和数据的共享。,5.1 存储管理的功能,2. 动态地址重定位动态地址重定位(dynamic address relocation)是在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。动态重定位依靠硬件地址变换机构完成。地址重定位机构需要一个(或多个)基地址寄存器 BR 和一个(或多个)程序虚拟地址寄存器 VR 。指令或数据的内存地址MA与虚拟地址的关系为:

11、MA=(BR)+ (VR)这里,(BR)与(VR)分别表示寄存器BR与VR中的内容。动态重定位过程可参看图5.3。,5.1 存储管理的功能,5.1 存储管理的功能,图5.3 动态地址重定位,LOAD A 1500,其具体过程是: (1) 设置基地址寄存器BR,虚拟地址寄存器VR。 (2) 将程序段装入内存,且将其占用的内存区首地址送BR中。例如,在图5.3中,(BR)=1000。 (3) 在程序执行过程中,将所要访问的虚拟地址送入VR中,例如在图5.3中执行LOAD A 500语句时 ,将所要访问的虚拟地址500放入VR中。 (4) 地址变换机构把VR和BR的内容相加,得到实际访问的物理地址。

12、,5.1 存储管理的功能,动态重定位的主要优点有: (1) 可以对内存进行非连续分配。显然,对于同一进程的各分散程序段,只要把各程序段在内存中的首地址统一存放在不同的BR中,则可以由地址变换机构变换得到正确的内存地址。 (2) 动态重定位提供了实现虚拟存储器的基础。因为动态重定位不要求在作业执行前为所有程序分配内存,也就是说,可以部分地、动态地分配内存。从而,可以在动态重定位的基础上,在执行期间采用请求方式为那些不在内存中的程序段分配内存,以达到内存扩充的目的。 (3) 有利于程序段的共享。,5.1 存储管理的功能,5.1.3 内外存数据传输的控制要实现内存扩充,在程序执行过程中,内存和外存之

13、间必须经常地交换数据。也就是说,把那些即将执行的程序和数据段调入内存,而把那些处于等待状态的程序和数据段调出内存。最基本的控制办法有两种。 用户程序自己控制, 操作系统控制。用户程序自己控制内外存之间的数据交换的例子是覆盖。覆盖技术要求用户清楚地了解程序的结构,并指定各程序段调入内存的先后次序。覆盖是一种早期的主存扩充技术。使用覆盖技术,用户负担很大,且程序段的最大长度仍受内存容量限制。因此,覆盖技术不能实现虚拟存储器。,5.1 存储管理的功能,操作系统控制方式又可进一步分为两种: 交换(swapping)方式, 请求调入(on demand)方式和预调入(on prefetch)方式。交换方

14、式由操作系统把那些在内存中处于等待状态的进程换出内存,而把那些等待事件已经发生、处于就绪态的进程换入内存。请求调入方式是在程序执行时,如果所要访问的程序段或数据段不在内存中,则操作系统自动地从外存将有关的程序段和数据段调入内存的一种操作系统控制方式。预调入则是由操作系统预测在不远的将来会访问到的那些程序段和数据段部分,并在它们被访问之前系统选择适当的时机将它们调入内存的一种数据流控制方式。,5.1 存储管理的功能,由于交换方式一般不进行部分交换,即每次交换都交换那些除去常驻内存部分后的整个进程,而且,即使能完成部分交换,也不是按照执行的需要而交换程序段,只是把受资源限制、暂时不能执行的程序段换

15、出内存。因此,虽然交换方式也能完成内存扩充任务,但它仍未实现那种所谓自动覆盖、内存和外存统一管理、进程大小不受内存容量限制的虚拟存储器。只有请求调入方式和预调入方式可以实现进程大小不受内存容量限制的虚拟存储器。,5.1 存储管理的功能,5.1.4 内存的分配与回收内存的分配与回收是内存管理的主要功能之一。无论采用哪一种管理和控制方式,能否把外存中的数据和程序调入内存,取决于能否在内存中为它们安排合适的位置。因此,存储管理模块要为每一个并发执行的进程分配内存空间。另外,当进程执行结束之后,存储管理模块又要及时回收该进程所占用的内存资源,以便给其他进程分配空间。,5.1 存储管理的功能,为了有效合

16、理地利用内存,设计内存的分配和回收方法时,必须考虑和确定以下几种策略和数据结构: 分配结构:登记内存使用情况,供分配程序使用的表格与链表。例如内存空闲区表、空闲区队列等。放置策略:确定调入内存的程序和数据在内存中的位置。这是一种选择内存空闲区的策略。 (3) 交换策略:在需要将某个程序段和数据调入内存时,如果内存中没有足够的空闲区,由交换策略来确定把内存中的哪些程序段和数据段调出内存,以便腾出足够的空间。 调入策略:外存中的程序段和数据段什么时间按什么样的控制方式进入内存。 回收策略:回收策略包括二点,一是回收的时机,二是对所回收的内存空闲区和已存在的内存空闲区的调整。,5.1 存储管理的功能

17、,5.1.5 内存信息的共享与保护内存管理的重要功能之一。 在多道程序设计环境下,内存中的许多用户或系统程序和数据段可供不同的用户进程共享。这种资源共享将会提高内存的利用率。但是,反过来说,除了被允许共享的部分之外,又要限制各进程只在自己的存储区活动,各进程不能对别的进程的程序和数据段产生干扰和破坏,因此须对内存中的程序和数据段采取保护措施。常用的内存信息保护方法有: 硬件法 软件法 软硬件结合,5.1 存储管理的功能,上下界保护法是一种常用的硬件保护法。上下界存储保护技术要求为每个进程设置一对上下界寄存器。上下界寄存器中装有被保护程序和数据段的起始地址和终止地址。在程序执行过程中,在对内存进

18、行访问操作时首先进行访址合法性检查,即检查经过重定位后的内存地址是否在上、下界寄存器所规定的范围之内。若在规定的范围之内,则访问是合法的;否则是非法的,并产生访址越界中断。上下界保护法的保护原理如图5.4。,5.1 存储管理的功能,图5.4 上、下界寄存器保护法,5.1 存储管理的功能,另外,保护键法也是一种常用的存储保护法。保护键法为每一个被保护存储块分配一个单独的保护键。在程序状态字中则设置相应的保护键开关字段,对不同的进程赋予不同的开关代码和与被保护的存储块中的保护键匹配。保护键可设置成对读写同时保护的或只对读,写进行单项保护的。例如,图5.5中的保护键0,就是对2K到4K的存储区进行读

19、写同时保护的,而保护键2则只对4K到6K的存储区进行写保护。如果开关字与保护键匹配或存储块未受到保护,则访问该存储块是允许的,否则将产生访问出错中断。,5.1 存储管理的功能,图 5.5 保护键保护法,5.1 存储管理的功能,另外一种常用的内存保护方式是:界限寄存器与 CPU 的用户态或核心态工作方式相结合的保护方式。在这种保护模式下,用户态进程只能访问那些在界限寄存器所规定范围内的内存部分,而核心态进程则可以访问整个内存地址空间。UNIX 系统就是采用的这种内存保护方式。,5.1 存储管理的功能,分区管理是把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发

20、进程共享。分区管理是满足多道程序设计的一种最简单的存储管理方法。5.2.1 分区管理基本原理分区管理的基本原理是给每一个内存中的进程划分一块适当大小的存储区,以连续存储各进程的程序和数据,使各进程得以并发执行。按分区的时机,分区管理可以分为固定分区和动态分区两种方法。,5.2 分区存储管理,1. 固定分区法把内存区固定地划分为若干个大小不等的区域。划分的原则由系统操作员或操作系统决定。分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数将保持不变。系统对内存的管理和控制通过数据结构分区说明表进行,分区说明表说明各分区号、分区大小、起始地址和是否是空闲区(分区状态)。内存的分配释放

21、、存储保护以及地址变换等都通过分区说明表进行。图5.6 给出了固定分区时分区说明表和对应内存状态的例子。图中,操作系统占用低地址部分的 20 K,其余空间被划分为 4 个分区,其中 1,2,3号 分区已分配,4号分区未分配。,5.2 分区存储管理,5.2 分区存储管理,图5.6 固定分区法,2. 动态分区法动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的,且其大小可随作业或进程对内存的要求而改变。这就改变了固定分区法中那种即使是小作业也要占据大分区的浪费现象,从而提高了内存的利用率。采用动态分区法,在系统初启时,除了操作系统中常驻内存部分之外,只有一个空闲分区。随后,分

22、配程序将该区依次划分给调度选中的作业或进程。图5.7给出了 FIFO 调度方式时的内存初始分配情况。,5.2 分区存储管理,图5.7 内存初始分配情况,5.2 分区存储管理,随着进程的执行,会出现一系列的分配和释放。如在某一时刻,进程 C 执行结束并释放内存之后,管理程序又要为另两个进程 E(设需内存50K)和 F(设需内存16K)分配内存。如果分配的空闲区比所要求的大,则管理程序将该空闲区分成两个部分,其中一部分成为已分配区而另一部分成为一个新的小空闲区。图5.8 以及进程 B 和进程 D 释放内存的内存分配变化过程。如图 5. 8所示,在管理程序回收内存时,如果被回收分区有和它邻接的空闲分

23、区存在,则要进行合并。,5.2 分区存储管理,5.2 分区存储管理,图5.8 内存分配变化过程,与固定分区法时相同,动态分区法也要使用分区说明表等数据结构对内存进行管理。除了分区说明表之外,动态分区法还把内存中的可用分区单独构成可用分区表或可用分区自由链,以描述系统内的内存资源。与此相对应,请求内存资源的作业或进程也构成一个内存资源请求表。图5.9给出了可用表,自由链和请求表的例子。可用表的每个表目记录一个空闲区,主要参数包括区号、长度和起始地址。采用表格结构,管理过程比较简单,但表的大小难以确定,可用表要占用一部分内存。,5.2 分区存储管理,5.2 分区存储管理,图 5.9 可用表、自由链

24、及请求表,自由链则是利用每个内存空闲区的头几个单元存放本空闲区的大小及下个空闲区的起始地址,从而把所有的空闲区链接起来。然后,系统再设置一自由链首指针让其指向第一个空闲区,这样,管理程序可通过链首指针查到所有的空闲区。采用自由链法管理空闲区,查找时要比可用表困难,但由于自由链指针是利用的空闲区自身的单元,所以不必占用额外的内存区。请求表的每个表目描述请求内存资源的作业或进程号以及所请求的内存大小。无论是采用可用表方式还是自由链方式,可用表或自由链中的各个项都要按照一定的规则排列以利查找和回收。下面讨论分区法的分区分配与回收问题。,5.2 分区存储管理,5.2.2 分区的分配与回收 1. 固定分

25、区时的分配与回收固定分区法时的内存分配与回收较为简单,当用户程序要装入执行时,通过请求表提出内存分配要求和所要求的内存空间大小。存储管理程序根据请求表查询分区说明表,从中找出一个满足要求的空闲分区,并将其分配给申请者。固定分区时的分配算法如图5.10。固定分区的回收更加简单。当进程执行完毕,不再需要内存资源时,管理程序将对应的分区状态置为未使用即可。,5.2 分区存储管理,图5.10 固定分区分配算法,5.2 分区存储管理,2. 动态分区时的分配与回收动态分区时的分配与回收主要解决三个问题: (1) 对于请求表中的要求内存长度,从可用表或自由链中寻找出合适的空闲区分配程序。 (2) 分配空闲区

26、之后,更新可用表或自由链。 (3) 进程或作业释放内存资源时,和相邻的空闲区进行链接合并,更新可用表或自由链。动态分区时的分配方法从可用表或自由链中寻找空闲区的常用方法有三种: 最先适应法(first fit algorithm), 最佳适应法(best fit algorithm) 最坏适应法(worst fit algoriathm)。这三种方法要求可用表或自由链按不同的方式排列。,5.2 分区存储管理,(1) 最先适应法最先适应法要求可用表或自由链按起始地址递增的次序排列。该算法的最大特点是一旦找到大于或等于所要求内存长度的分区,则结束探索。然后,该算法从所找到的分区中划出所要求的内存长

27、度分配给用户,并把余下的部分进行合并(如果有相邻空闲区存在)后留在可用表中,但要修改其相应的表项。 最先适应算法如图5.11所示。,5.2 分区存储管理,图5.11 最先适应算法,5.2 分区存储管理,(2) 最佳适应算法最佳适应算法要求从小到大的次序组成空闲区可用表或自由链。当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个满足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长度,则与最先适应法时相同,将减去请求长度后的剩余空闲区部分留在可用表中。,5.2 分区存储管理,(3) 最坏适应算法最坏适应算法要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。当用

28、户作业或进程申请一个空闲区时,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大于或等于所要求的内存长度,若可用表或自由链的第一个项长度小于所要求的,则分配失败,否则从空闲区可用表或自由链中分配相应的存储空间给用户,然后修改和调整空闲区可用表或自由链。,5.2 分区存储管理,3. 动态分区时的回收与拼接当用户作业或进程执行结束时,存储管理程序要收回已使用完毕的空闲区,并将其插入空闲区可用表或自由链。这里,在将回收的空闲区插入可用表或自由链时,和分配空闲区时一样,也要碰到剩余空闲区拼接问题。解决这个问题的办法之一就是在空闲区回收时或在内存分配时进行空闲区拼接,以把不连续的零散空闲区集中起来

29、。,5.2 分区存储管理,在将一个新可用区插入可用表或队列时,该空闲区和上下相邻区的关系。,图 5.12 空闲区的合并,5.2 分区存储管理,如果释放区与上下两空闲区相邻,则将三个空闲区合并为一个空闲区。新空闲区的起始地址为上空闲区的起始地址,大小为三个空闲区之和。空闲区合并后,取消可用表或自由链中下空闲区的表目项或链指针,修改上空闲区的对应项。如果释放区只与上空闲区相邻,则将释放区与上空闲区合并为一个空闲区,其起始地址为上空闲区的起始地址,大小为上空闲区与释放区之和。合并后,修改上空闲区对应的可用表的表目项或自由链指针。,5.2 分区存储管理,如果释放区与下空闲区相邻,则将释放区与下空闲区合

30、并,并将释放区的起始地址作为合并区的起始地址。合并区的长度为释放区与下空闲区之和。合并后修改可用表或自由链中相应的表目项或链指针。如果释放区不与任何空闲区相邻,则释放区作为一个新可用区插入可用表或自由链。,5.2 分区存储管理,4. 几种分配算法的比较由于回收后的空闲区要插入可用表或自由链中,而且可用表或自由链是按照一定顺序排列的,所以,除了搜索查找速度与所找到的空闲区是否最佳,释放空闲区的速度也对系统开销产生影响。下面从查找速度、释放速度及空闲区的利用等三个方面对上述三种算法进行比较。首先,从搜索速度上看,最先适应算法具有最佳性能?。尽管最佳适应算法或最坏适应算法看上去能很快地找到一个最适合

31、的或最大的空闲区。再者,从回收过程来看,最先适应算法也是最佳的。因为使用最先适应算法回收某一空闲区时,无论被释放区是否与空闲区相邻,都不用改变该区在可用表或自由链中的位置,只需修改其大小或起始地址。,5.2 分区存储管理,最先适应算法的另一个优点就是尽可能地利用了低地址空间,从而保证高地址有较大的空闲区来放置要求内存较多的进程或作业。最佳适应法找到的空闲区是最佳的。不过, 在某些情况下并不一定提高内存的利用率。最坏适应算法正是基于不留下碎片空闲区这一出发点的。它选择最大的空闲区来满足用户要求,以期分配后的剩余部分仍能进行再分配。总之,上述三种算法各有特长,针对不同的请求队列,效率和功能是不一样

32、的。,5.2 分区存储管理,5.2.3 有关分区管理其他问题的讨论 1. 关于虚存的实现利用分区式管理,也同样存在有每个用户可以自由编程的虚拟空间。 但是,分区式管理方式无法实现那种用户进程所需内存容量只受内存和外存容量之和限制的虚拟存储器。如果不采用内存扩充技术,每个用户进程所需内存容量是受到分区大小限制的。 2. 关于内存扩充由于分区式管理时各用户进程或作业所要求的内存容量受到分区大小的限制,如果不采用内存扩充技术,将会极大地限制分区式管理技术的使用。在分区式管理中,可以使用覆盖或交换技术来扩充内存。,5.2 分区存储管理,3. 关于地址变换和内存保护静态地址重定位和动态地址重定位技术,都

33、可用来完成分区式内存管理的地址变换。显然,动态分区时分区大小不固定,而空闲区的拼接会移动内存中的程序和数据,因此,使用静态地址重定位的方法来完成动态分区时的地址变换是不妥当的。,5.2 分区存储管理,在进行动态地址重定位时,每个分区需要一对硬件寄存器的支持,即基址寄存器和限长寄存器,分别用来存放作业或进程在内存分区的起始地址和长度。这一对硬件寄存器除了完成动态地址重定位的功能之外,还具有保护内存中数据和程序的功能。这由硬件检查CPU执行指令所要访问的虚拟地址完成。即设CPU指令所要访问的虚拟地址为D,若DVR (VR是限长寄存器中的限长值),则说明地址越界,所要访问的内存地址超出了该作业或进程

34、所占用的内存空间。这时将产生保护中断。系统转去进行出错处理。若D=VR,则该地址是合法的,由硬件完成对该虚拟地址的动态重定位。保护键法也可用来对内存各分区提供保护。,5.2 分区存储管理,4. 分区存储管理的主要优缺点 分区存储管理的主要优点如下: (1) 实现了多个作业或进程对内存的共享,有助于多道程序设计,从而提高了系统的资源利用率。 (2) 该方法要求的硬件支持少,管理算法简单,因而实现容易。 主要缺点有: (1) 内存利用率仍然不高。和单一连续分配算法一样,存储器中可能含有从未用过的信息。而且,还存在着严重的碎小空闲区(碎片)不能利用的问题。 (2) 作业或进程的大小受分区大小控制,除

35、非配合采用覆盖和交换技术。 (3) 难以实现各分区间的信息共享。,5.2 分区存储管理,覆盖与交换技术是在多道环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中仍具有较强的生命力。,5.3 覆盖与交换技术,5.3.1 覆盖技术覆盖技术是基于这样一种思想提出来的,即一个程序并不需要一开始就把它的全部指令和数据都装入内存后再执行。 在单CPU系统中,每一时刻事实上只能执行一条指令。因此,不妨把程序划分为若干个功能上相对独立的程序段,按照程序的逻辑结构让那些不会同时执行的程序段共享同一块内存区。通常,这些程序段都被保存在外存中,当有关程序段的先头程序段已经执

36、行结束后,再把后续程序段调入内存覆盖前面的程序段。这使得用户看来,好像内存扩大了,从而达到了内存扩充的目的。,5.3 覆盖与交换技术,但是,覆盖技术要求程序员提供一个清楚的覆盖结构。即程序员必须完成把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序的工作。操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。一般来说,一个程序究竟可以划分为多少段,以及让其中的哪些程序共享哪一内存区只有程序员清楚。这要求程序员既要清楚地了解程序所属进程的虚拟空间及各程序段所在虚拟空间的位置,又要求程序员懂得系统和内存的内部结构与地址划分,因此,程序员负担较重。所以,覆盖技术大多用在对操作系统的虚空间和

37、内部结构很熟悉的程序员才会使用。,5.3 覆盖与交换技术,例如,设某进程的程序正文段由A,B,C,D,E和F等6个程序段组成。它们之间的调用关系如图5.13(a)所示,程序段A调用程序段B和C,程序段B又调用程序段F,程序段C调用程序段D和E。由图5.13(a)可以看出,程序段B不会调用C,程序段C也不会调用B。因此,程序段B和C无需同时驻留在内存,它们可以共享同一内存区。同理,程序段D、E、F也可共享同一内存区。其覆盖结构如图5.13(b)所示。,5.3 覆盖与交换技术,图 5.13 覆盖示例,5.3 覆盖与交换技术,在图5.13(b)中,整个程序正文段被分为两个部分。一个是常驻内存部分,该

38、部分与所有的被调用程序段有关,因而不能被覆盖。这一部分称为根程序。图5.13(b)中,程序段A是根程序。另一部分是覆盖部分,图中被分为两个覆盖区。其中,一个覆盖区由程序段B,C共享。其大小为B,C中所要求容量大者。另一个覆盖区为程序段F,D,E共享。两个覆盖区的大小分别为50 K与40 K。这样,虽然该进程正文段所要求的内存空间是A(20K)+B(50K)+F(30K)+C(30K)+D(20K)+E(40K)=190K,但由于采用了覆盖技术,只需110 K的内存空间即可开始执行。,5.3 覆盖与交换技术,5.3.2 交换技术多道程序环境或分时系统中,同时执行好几个作业或进程。如果让这些等待中

39、的进程继续驻留内存,将会造成存储空间的浪费。因此,应该把处于等待状态的进程换出内存。实现上述目标比较常用的方法之一就是交换。交换是指先将内存某部分的程序或数据写入外存交换区,再从外存交换区中调入指定的程序或数据到内存中来,并让其执行的一种内存扩充技术。与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构。而且,交换主要是在进程或作业之间进行,而覆盖则主要在同一个作业或进程内进行。另外,覆盖只能覆盖那些与被覆盖程序段无关的程序段。,5.3 覆盖与交换技术,交换进程由换出和换入两个过程组成。其中换出 ( swap out ) 过程把内存中的数据和程序换到外存交换区。而换入( swap in )

40、过程把外存交换区中的数据和程序换到内存分区中。 换出过程和换入过程都要完成与外存设备管理进程通信的任务。由交换进程发送给设备进程的 消息m 中应包含分区的分区号i、该分区的基址basei、长度sizei和方向及外存交换区中分区起始地址。交换进程和设备管理进程通过设备缓冲队列进行通信。换出过程SWAPOUT 可描述如下:,5.3 覆盖与交换技术,SWAPOUT(i):begin local mm.base basei;m.ceiling basei + sizei;m.direction “out“;m.destination base of free area on swap area;bac

41、kupstorebasei m.destination;send( (m,i),device queue);end在SWAPOUT(i)中,除了前5行描述所需要的控制信息之外,backupstorbasei是用来记录被换出数据和程序的起始地址以便换入时使用的。而send指令则驱动设备做相应的数据读写操作。,5.3 覆盖与交换技术,SWAPIN(i):begin local mm.base basei;m.ceiling basei + sizei;m.direction “in“;m.source backupstorebasei;send( (m,i),device queue);end交换

42、技术大多用在小型机或微机系统中。这样的系统大部分采用固定的或动态分区方式管理内存。,5.3 覆盖与交换技术,5.4.1 页式管理的基本原理分区式管理方式尽管实现方式较为简单,但存在着严重的碎片问题使得内存的利用率不高。再者,分区式管理时,由于各作业或进程对应于不同的分区以及在分区内各作业或进程连续存放,进程的大小仍受分区大小或内存可用空间的限制。而且,分区式管理也不利于程序段和数据的共享。页式管理正是为了减少碎片以及为了只在内存存放那些反复执行或即将执行的程序段与数据部分,而把那些不经常执行的程序段和数据存放于外存待执行时调入,以提高内存利用率而提出来的。,5.4 页式管理,首先,各进程的虚拟

43、空间被划分成若干个长度相等的页( page ) 。页长的划分和内存外存之间数据传输速度以及内存大小等有关。一般每个页长大约为 1-4K ,经过页划分之后,进程的虚地址变为页号 p 与 页内地址 w 所组成。例如,一个页长为1 K, 拥有1 024页的虚拟空间地址结构如图5.14。,5.4 页式管理,图5.14 页的划分,19 10 9 0,除了把进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或页面 (page frame)。这些页面为系统中的任一进程所共享 ( 除去操作系统区外 )。从而,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间

44、不再连续。页式管理有如下的优点: 实现了内存中碎片的减少, 实现了连续存储到非连续存储 实现了内外存存储器的统一管理,5.4 页式管理,实现了内存中碎片的减少, 因为任一碎片都会小于一个页面 实现了连续存储到非连续存储第二是实现了由连续存储到非连续存储这个飞跃,为在内存中局部地、动态地存储那些反复执行或即将执行的程序和数据段打下了基础。页式管理把页式虚地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页表方式实质上是动态重定位技术的一种延伸。,5.4 页式管理,实现了内外存存储器的统一管理 页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。

45、即内存内只存放那些经常被执行或即将被执行的页,而那些不常被执行以及在近期内不可能被执行的页,则存放于外存中待需要时再调入。请求调页或预调页技术是基于工作区的局部性原理的,有关局部性原理将在本节的后面部分介绍。由于使用了请求调页或预调页技术,页式管理时内存页面的分配与回收已和页面淘汰技术及缺页处理技术结合起来。不过,页面的换入换出仍是必要的,这只要把上节所述的交换进程稍加修改就能用于页面的交换。分页管理的重点在于页划分之后的地址变换以及页面的调入调出技术。,5.4 页式管理,5.4.2 静态页面管理静态页面管理方法在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面中,并

46、通过页表 (page mapping table) 和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。 1. 内存页面分配与回收静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统依靠存储页面表、请求表以及页表来完成内存的分配工作。首先来介绍这三个表。,5.4 页式管理,(1) 页表最简单的页表由页号与页面号组成。如图5.15所示。页表在内存中占有一块固定的存储区。 页表的大小由进程或作业的长度决定。例如,对于一个每页长1 K,大小为20 K的进程来说,如果一个内存单元存放一个页表项,则只要分配给该页表 20 个存储单元即可。显然,页式管理时每个进程至少拥有一个页表。,5.4

47、 页式管理,图 5.15 基本 页表 示例,(2) 请求表请求表用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置。为了完成这个任务,系统必须知道每个作业或进程的页表起始地址和长度,以进行内存分配和地址变换。另外,请求表中还应包括每个作业或进程所要求的页面数。请求表整个系统一张,如图5.16所示。,5.4 页式管理,存储页面表存储页面表也是整个系统一张,存储页面表指出内存各页面是否已被分配出去, 以及未分配页面的总数。存储页面表也有两种构成方法,一种是在内存中划分 一块固定区域,每个单元的每个比特代表一个页面。如果该页面已被分配,则对应比特位置1,否则置0。这种方法称为位示图法。如图 5

48、.17 所示。,5.4 页式管理,5.4 页式管理,位示图要占据一部分内存容量,例如,一个划分为 1024 个页面的内存,如果内存单元长 20 比特,则位示图要占据 1024/20 = 52 个内存单元。,存储页面表的另一种构成办法是采用空闲页面链的方法。在空闲页面链中,队首页面的第一个单元和第二个单元分别放入空闲页面总数与指向下一个空闲页面的指针。其他页面的第一个单元中则分别放入指向下一个页面的指针。空闲页面链的方法由于使用了空闲页面本身的单元存放指针,因此不占据额外的内存空间。,5.4 页式管理,2. 分配算法利用上述三个表格和数据结构,给出一个页面分配算法。首先,请求表给出进程或作业要求

49、的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并填写请求表中的相应表项后,按一定的查找算法、搜索出所要求的空闲页面,并将对应的页面号填入页表中。静态页式管理的页面回收方法较为简单,当进程执行完毕时,拆除对应的页表,并把页表中的各页面在存储页面表中的状态置为未分配即可。,5.4 页式管理,图5.18 页面分配算法流图,5.4 页式管理,3. 地址变换静态页式管理的另一个关键问题是地址变换。即怎样由页号和页内相对地址变换到内存物理地址的问题。页式管理时,地址变换的速度也是设计地址变换机构时必须考虑的问题之一。由地址分配方式知道,在一个作业或进程的页表中,连续的页号对应于不连续的页面号。例如,设一个3页长的进程具有页号0,1,2,但其对应的页面号则为2,3,8,5.4 页式管理,设每个页面长度为 1K,指令 LOAD 1,2500 的虚地址为第 0 页第 100 单元之中 ,该指令所在内存物理地址?该指令所访问的 虚拟地址为2500单元的内存物理地址?首先,需要有一个装置页表始址和页表长度用的控制寄存器。系统把所调度执行的进程页表始址和长度从请求表中取出置入控制寄存器中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报