如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第5章存储管理5.1存储管理的功能存储器是计算机系统的重要资源之一。因为任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。存储器由内存和外存组成。内存由顺序编址的块组成,每块包含相应的物理单元。CPU要通过启动相应的输入输出设备后才能使外存与内存交换信息。本章主要讨论内存管理问题。主要包括:几种常用的内存管理方法、内存的分配和释放算法、虚拟存储器的概念、控制主存和外存之间的数据流动方法、地址变换技术和内存数据保护与共享技术等。下面先介绍存储管理的功能。5.1.1虚拟存储器虚拟存储器是存储管理的核心概念。现代计算机系统的物理存储器都分为内存和外存,内存价格比外存价格昂贵,不可能用大容量的内存存储所有被访问的或不被访问的程序与数据段。而外存尽管访问速度较慢,但价格便宜,适合于存放大量信息。这样,存储管理系统把进程中那些不经常被访问的程序段和数据放入外存中,待需要访问它们时再将它们调入内存。那么,对于那些一部分数据和程序段在内存而另一部分则在外存的进程,怎样安排它们的地址呢?通常由用户编写的源程序,首先要由编译程序编译成CPU可执行的目标代码。然后,链接程序把一个进程的不同程序段链接起来以完成所要求的功能。显然,对于不同的程序段,应具有不同的地址。有两种方法安排这些编译后的目标代码的地址。一种方法是按照物理存储器中的位置赋予实际物理地址。这种方法的好处是CPU执行目标代码时的执行速度高。但是,由于物理存储器的容量限制,能装入内存并发执行的进程数将会大大减少,对于某些较大的进程来说,当其所要求的总内存容量超过内存容量时将会无法执行。另外,由于编译程序必须知道内存的当前空闲部分及其地址,并且把一个进程的不同程序段连续地存放起来,因此编译程序将非常复杂。另一种方法是编译链接程序把用户源程序编译后链接到一个以0地址为始地址的线性或多维虚拟地址空间。这里,链接既可以是在程序执行以前由链接程序完成的静态链接,也可以是在程序执行过程中由于需要而进行的动态链接。而且,每一个进程都拥有这样一个空间(这个空间是一维的还是多维的由存储管理方式决定)。每个指令或数据单元都在这个虚拟空间中拥有确定的地址,把这个地址称为虚拟地址(virtualaddress)。显然,进程在该空间的地址排列可以是非连续的,其实际物理地址由虚拟地址到实际物理地址的地址变换机构变换得到。由源程序到实际存放该程序指令或数据的内存物理位置的变换如图所示。将进程中的目标代码。数据等的虚拟地址组成的虚拟空间称为虚拟存储器。虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每个进程中互相关连的信息的相对位置。与实际物理存储器只有一个(单机系统中),且被所有进程共享不一样,每个进程都拥有自己的虚拟存储器,且虚拟存储器的容量是由计算机的地址结构和寻址方式确定的。例如,直接寻址时,如果CPU的有效地址长度为16位,则其寻址范围为0到64K。上图中的编译和链接主要是语言系统的设计问题。不过,由虚拟存储器到物理存储器的变换是操作系统所必须解决的问题。要实现这个变换,必须要有相应的硬件支持,并使这些硬件能够完成统一管理内存和外存之间数据和程序段自动交换的虚拟存储器功能。即:由于每个进程都拥有自己的虚存,且每个虚存的大小不受实际物理存储器的限制,因此,系统不可能提供足够大的内存来存放所有进程的内容。内存中只能存放那些经常被访问的程序和数据段等。这就需要有相当大的外部存储器,以存储那些不经常被访问或在某一段时间内不会被访问的信息。待到进程执行过程中需要这些信息时,再从外存中自动调入主存。5.1.2地址变换内存地址的集合称为内存空间或物理地址空间。内存中,每一个存储单元都与相应的称为内存地址的编号相对应。显然,内存空间是一维线性空间。怎样把几个虚存的一维线性空间或多维线性空间变换到内存的唯一的一维物理线性空间呢?VAX-11机的虚拟空间结构图、虚拟空间的划分第二个问题是把虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址的问题。称之为地址重定位或地址映射。地址映射就是要建立虚拟地址与内存地址的关系。实现地址重定位或地址映射的方法有两种:静态地址重定位动态地址重定位。1.静态地址重定位静态地址重定位(staticaddressrelocation)是在虚拟空间程序执行之前由装配程序完成地址映射工作。假定分配给程序的内存首地址为BA,且程序的虚拟空间地址为V,程序的内存地址空间为M,虚地址空间到物理内存地址空间的映射为f;则f:(V)M即:M=f(V)=BA+V从而完成程序中所有地址部分的修改,以保证CPU的正确执行。静态重定位的优点是不需要硬件支持。但是,使用静态重定位方法进行地址变换无法实现虚拟存储器。静态重定位