汤小丹 操作系统 第四版 第四章 课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第四章存储器管理第四章存储器管理4.1存储器的层次结构4.2程序的装入和链接4.3连续分配存储管理方式4.4对换(Swapping)4.5分页存储管理方式4.6分段存储管理方式习题2第四章存储器管理 4.1存储器的层次结构在计算机执行时,几乎每一条指令都涉及对存储器的访问,因此要求对存储器的访问速度能跟得上处理机的运行速度。或者说,存储器的速度必须非常快,能与处理机的速度相匹配,否则会明显地影响到处理机的运行。此外还要求存储器具有非常大的容量,而且存储器的价格还应很便宜。3第四章存储器管理4.1.1多层结构的存储器系统1.存储器的多层结构对于通用计算机而言,存储层次至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。在较高档的计算机中,还可以根据具体的功能细分为寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质等6层。如图4-1所示。4第四章存储器管理图4-1计算机系统存储层次示意5第四章存储器管理在存储器层次中,层次越高(越靠近CPU),存储介质的访问速度越快,价格也越高,相对所配置的存储容量也越小。其中,寄存器,高速缓存、主存储器和磁盘缓存均属于操作系统存储管理的管辖范畴,掉电后它们中存储的信息不再存在。而底层的固定磁盘和可移动存储介质则属于设备管理的管辖范畴,它们存储的信息将被长期保存。6第四章存储器管理2.可执行存储器在计算机系统的存储层次中,寄存器和主存储器又被称为可执行存储器。对于存放于其中的信息,与存放于辅存中的信息相比较而言,计算机所采用的访问机制是不同的,所需耗费的时间也是不同的。进程可以在很少的时钟周期内使用一条load或store指令对可执行存储器进行访问。但对辅存的访问则需要通过I/O设备实现,因此,在访问中将涉及到中断、设备驱动程序以及物理设备的运行,所需耗费的时间远远高于访问可执行存储器的时间,一般相差3个数量级甚至更多。7第四章存储器管理注意:操作系统的存储管理负责对可执行存储器的分配、回收,以及提供在存储层次间数据移动的管理机制,例如主存与磁盘缓存、高速缓存与主存间的数据移动等。而设备和文件管理则根据用户的需求,提供对辅存的管理机制。8第四章存储器管理4.1.2主存储器与寄存器1.主存储器主存储器简称内存或主存,是计算机系统中的主要部件,用于保存进程运行时的程序和数据,也称可执行存储器。由于主存储器访问速度远低于CPU执行指令的速度,为缓和这一矛盾,在计算机系统中引入了寄存器和高速缓存。9第四章存储器管理2.寄存器寄存器具有与处理机相同的速度,故对寄存器的访问速度最快,完全能与CPU协调工作,但价格却十分昂贵,因此容量不可能做得很大。10第四章存储器管理11第四章存储器管理2.磁盘缓存由于目前磁盘的I/O速度远低于对主存的访问速度,为了缓和两者之间在速度上的不匹配,而设置了磁盘缓存,主要用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。但磁盘缓存与高速缓存不同,它本身并不是一种实际存在的存储器,而是利用主存中的部分存储空间暂时存放从磁盘中读出(或写入)的信息。主存也可以看作是辅存的高速缓存,因为,辅存中的数据必须复制到主存方能使用,反之,数据也必须先存在主存中,才能输出到辅存。12第四章存储器管理Primarystorageisusedfortemporarilystoringprogramsanddatawhileprocessingisoccurring.Remember,however,thatprimarystorageisvolatile--whateverwasinitwilldisappearwhenthepowergoesoff.Long-term,semi-permanentdatastorageisreferredtoassecondarystorage.Secondarystorageisrecordedmagneticallyanddoesnotdisappearwhenthepowergoesoff.Diskandmagetictapesareexamplesofsecondarystoragemediathatcanholdprogramsanddatapermanently,readytobecalledintotheCPU'smemorywhenneeded13第四章存储器管理ACPUhasthreecomponts:thecontrolunit,thearithmetic-logicunit,andmainmemoryorprimarystorage.Primarystorage,ormainmemory,holdsinstructionsanddataneededforprocessing.Computermainmemoryistypicallyoncomputerchipsthatarevolatile,whichmeansthatdataheldtheredisappearswhenthecomputeristurnedofforlosespower.Asmallnumberofmicrosusemagneticbubblesformainmemoryratherthanmicroprocessorchips;thistypeofmemoryisnonvolatile,meaningthatdatastoredinitcanberetainedforsometimeevenafterthepowerisshutoff.14第四章存储器管理 4.2程序的装入和链接用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常都要经过以下几个步骤:(1)编译,由编译程序(Compiler)对用户源程序进行编译,形成若干个目标模块(ObjectModule);(2)链接,由链接程序(Linker)将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块(LoadModule);(3)装入,由装入程序(Loader)将装入模块装入内存。15第四章存储器管理图4-2示出了这样的三步过程。本节将扼要阐述程序(含数据)的链接和装入过程。图4-2对用户程序的处理步骤16第四章存储器管理4.2.1程序的装入为了阐述上的方便,我们先介绍一个无需进行链接的单个目标模块的装入过程。该目标模块也就是装入模块。在将一个装入模块装入内存时,可以有如下三种装入方式:1.绝对装入方式(AbsoluteLoadingMode)当计算机系统很小,且仅能运行单道程序时,完全有可能知道程序将驻留在内存的什么位置。此时可以采用绝对装入方式。用户程序经编译后,将产生绝对地址(即物理地址)的目标代码。优点:装入过程简单缺点:过于依赖于硬件结构,不适于多道程序系统17第四章存储器管理2.可重定位装入方式(RelocationLoadingMode)绝对装入方式只能将目标模块装入到内存中事先指定的位置,这只适用于单道程序环境。而在多道程序环境下,编译程序不可能预知经编译后所得到的目标模块应放在内存的何处。因此,对于用户程序编译所形成的若干个目标模块,它们的起始地址通常都是从0开始的,程序中的其它地址也都是相对于起始地址计算的。优点:不需要硬件支持,可以装入有限多道程序缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动,不能实现共享18第四章存储器管理图4-3作业装入内存时的情况19第四章存储器管理3.动态运行时的装入方式(DynamicRun-timeLoading)可重定位装入方式可将装入模块装入到内存中任何允许的位置,故可用于多道程序环境。但该方式并不允许程序运行时在内存中移动位置。优点:OS可以将一个程序分散放于不连续的内存空间,可以移动程序,有利于实现共享缺点:需要硬件支持,OS实现较复杂20第四章存储器管理4.2.2程序的链接1.静态链接(StaticLinking)方式在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的装配模块,以后不再拆开。在图4-4(a)中示出了经过编译后所得到的三个目标模块A、B、C,它们的长度分别为L、M和N。在模块A中有一条语句CALLB,用于调用模块B。在模块B中有一条语句CALLC,用于调用模块C。B和C都属于外部调用符号,在将这几个目标模块装配成一个装入模块时,须解决以下两个问题:(1)对相对地址进行修改。(2)变换外部调用符号。21第四章存储器管理图4-4程序链接示意图22第四章存储器管理2.装入时动态链接(Load-timeDynamicLinking)这是指将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式。即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存,还要按照图4-4所示的方式修改目标模块中的相对地址。装入时动态链接方式有以下优点:(1)便于修改和更新。(2)便于实现对目标模块的共享。23第四章存储器管理3.运行时动态链接(Run-timeDynamicLinking)在许多情况下,应用程序在运行时,每次要运行的模块可能是不相同的。但由于事先无法知道本次要运行哪些模块,故只能是将所有可能要运行到的模块全部都装入内存,并在装入时全部链接在一起。显然这是低效的,因为往往会有部分目标模块根本就不运行。比较典型的例子是作为错误处理用的目标模块,如果程序在整个运行过程中都不出现错误,则显然就不会用到该模块。优点:加快装入过程、节省内存空间24第四章存储器管理 4.3连续分配存储管理方式为了将用户程序装入内存,必须为它分配一定大小的内存空间。连续分配方式是最早出现的一种存储器分配方式,曾被广泛应用于上世纪60~80年代的OS中,该分配方式为一个用户程序分配一个连续的内存空间,即程序中代码或数据的逻辑地址相邻,体现在内存空间分配时物理地址的相邻。25第四章存储器管理4.3.1单一连续分配在单道程序环境下,当时的存储器管理方式是把内存分为系统区和用户区两部分,系统区仅提供给OS使用,它通常是放在内存的低址部分。而在用户区内存中,仅装有一道用户程序,即整个内存的用户空间由该程序独占。这样的存储器分配方式被称为单一连续分配方式。26第四章存储器管理4.3.2固定分区分配把内存分为一些大小相等或不等的分区,每个应用进程占用一个分区。操作系统占用其中一个分区。特点:适用于多道程序系统和分时系统,支持多个程序并发执行。问题:可能存在内碎片内碎片:占用分区之内未被利用的空间外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)27第四章存储器管理1.划分分区的方法可用下述两种方法将内存的用户空间划分为若干个固定大小的分区:(1)分区大小相等(指所有的内存分区大小相等)。只适合于多个相同程序的并发执行,缺乏灵活性(2)分区大小不等。多个小分区,适量的中等分区、少量的大分区优点:易于实现,开销小缺点:内碎片造成浪费,分区总数固定,限制了并发执行的程序数目。28第四章存储器管理2.内存分配为了便于内存分配,通常将分区按其大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配),如图4-5所示。29第四章存储器管理图4-5固定分区使用表30第四章存储器管理固定分区分配是最早出现的、可用于多道程序系统中的存储管理方式,由于每个分区的大小固定,必然会造成存储空间的浪费,因而现在已经很少将它用于通用的OS中。但在某些用于控制多个相同对象的控制系统中,由于每个对象的控制程序大小相同,是事先已编好的,其所需的数据也是一定的,故仍采用固定分区式存储管理方式。31第四章存储器管理4.3.3动态分区分配又称为可变分区分配,它是根据进程的实际需要,动态地为之分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作这样三方面的问题。32第四章存储器管理1.动态分区分配中的数据结构常用的数据结构

1 / 126
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功