收藏 分享(赏)

蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt

上传人:gnk289057 文档编号:10202527 上传时间:2019-10-19 格式:PPT 页数:66 大小:177.50KB
下载 相关 举报
蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt_第1页
第1页 / 共66页
蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt_第2页
第2页 / 共66页
蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt_第3页
第3页 / 共66页
蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt_第4页
第4页 / 共66页
蒲晓蓉_操作系统原理—第3_1章_存储管理.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、第三章 存储管理,外存,本章要点,存储管理的任务 内存划分与分配技术 程序装入技术 简单存储管理技术 虚拟存储管理技术,3.1 存储管理的任务,存储分配,基本任务:管理内存空间的分配与回收(1)分配基本内存空间 (2)增加新的内存空间 动态申请或释放内存空间 (3)回收内存空间,用于内存管理的数据结构,如位示图、空闲页框表等。 记载哪些内存被分配给了哪个进程,哪些内存空间是空闲的等信息。 若系统采用虚拟存储管理技术,还需要登记进程的程序和数据中,哪些部分在内存,哪些部分尚在外存等信息。 这些数据结构自身需要占用一定的内存空间,也需要系统花费额外的时间进行维护。,存储分配步骤,首先,根据系统的内

2、存分配算法,在空闲的内存分区中寻找到一块满足进程需要的内存空间,将其分配给进程。然后,更新进程的资源分配清单、内存分配情况清单等数据结构。,内存的回收,更新相应的数据结构,将回收的内存空间标识为“空闲可用”就行了。? 该内存空间是否可以被回收 ? 被其他进程共享 ? 属于相应的进程 ? 与相临的空闲空间进行合并,地址映射,逻辑地址,或相对地址:一般从0开始编址 物理地址,或绝对地址:标识内存中的每个存储单元。,?逻辑地址,高级语言或汇编语言使用符号地址:变量名或标号源程序经过编译、链接以后,其中的符号地址就会变成数字式的逻辑地址。编译/链接程序会自动计算每一个变量或标号所对应的逻辑地址是多少。

3、,静态映射:静态重定位,地址映射:程序装入内存以后,由操作系统将逻辑地址改为逻辑地址加上起始地址,得到实际的物理地址。 重定位(Relocation):对目标程序中的指令和数据地址进行修改的过程。 静态映射实现简单。地址变换只在程序装入时一次完成,程序运行时不再改变。 但不适合多道程序系统;不允许系统执行内存的碎片整理;无法实现虚拟存储,动态映射:动态重定位,操作系统将程序装入内存以后,并不立即把目标程序中的逻辑地址转换为物理地址,而是在处理机执行每一条指令时进行地址转换。复杂且费时。为了系统效率,处理机中设置了专门的高速硬件,自动完成地址转换,这样的硬件被称作地址管理部件,如图3.2所示。,

4、存储保护,防止地址越界,防止操作越权。地址越界:进程访问不属于自己的地址空间,或者说进程在运行时所产生的物理地址超越其自身的地址空间范围。 可能侵犯其他用户进程空间,也可能侵犯操作系统的存储空间操作越权:进程对共享存储区的操作违反了系统规定的权限。,存储保护的实现,存储保护只能进程执行过程中动态地进行,不可能在运行前一次性静态完成。若采用动态映射动态计算物理地址,可能计算出错误地址;若采用静态映射,进程执行过程中也可能出错,从而导致地址越界或操作越权。为了提高系统效率,存储保护的主要工作必须由高速的专用硬件来完成:在地址管理部件中。,存储共享,为了进程通信和节约内存空间,两个或多个进程共用内存

5、中相同的分区,即他们的物理空间有相交的部分。可以共享进程的代码,也可以共享进程数据。一般地,进程之间共享代码的目的主要是为了节约存储空间,共享数据的目的主要是为了实现进程间相互通信。,通过存储共享完成通信的过程:一个进程将数据写入共享存储区,另一个进程从共享存储区中读出数据。,共享代码,程序可重入:设计程序时,逻辑上将程序代码区和数据区分开。代码区不包含运行程序时需要改变的数据,被处理的数据都放在独立的数据区。这样,进程执行过程中就不会改变代码部分的任何内容。数据区是单独的一个段、堆栈式动态申请的分区,或通过参数传递。,共享代码,创建新进程时,不需要为该进程的代码部分另外申请内存空间,只需将该

6、进程PCB中的进程代码空间的地址指向已有的代码空间地址。进程的数据区,要么等到操作系统为其分配相应存储空间以后,将数据区地址填写在PCB中;要么由进程运行时向操作系统动态申请。,共享代码,可以将进程的代码视为处理数据的一组规则或公式,这一组规则或公式存储在内存中的某个分区。 进程的执行:利用这一组规则或公式来完成数据的运算。 多个进程共享代码:多个进程需要使用同一组规则或公式处理不同的数据。 PCB:告诉进程其所需的规则或公式以及需要处理的数据存储在哪里,进程的进度等,共享代码,对于高级程序的设计而言,只要相应的编译程序支持可重入的程序设计,那么,设计程序时就不需要考虑程序的可重入问题,不需要

7、将程序代码和数据严格分开。 编译程序在编译时,会自动将欲处理的数据与程序代码分开存储,以保证代码部分是纯的、可重入的。,存储扩充,内存:速度快、容量小、价格贵 外存:容量大、速度慢、价格便宜 目的:在多道程序系统中能运行更多、更大的程序,降低系统的造价,提高系统的性价比 存储扩充:采用软件手段,在硬件的配合下,将部分外存空间虚拟为内存空间,并将内存和外存有机地结合起来,得到一个容量相当于外存、速度接近于内存、价格十分便宜的虚拟存储系统,存储扩充,虚拟存储系统在逻辑上对外是一个整体,用户感觉到系统提供了一个非常大的“内存”空间。操作系统负责完成内存与外存之间的透明切换:进程运行时将需要的数据或代

8、码从外存装入内存,并将内存中暂时不用的部分交换到外存。,3.2 内存划分与分配技术,内存划分,静态划分:划分预先进行,创建新进程时,在内存中找到一个合适的分区分配给它。动态划分:系统初始化时,可以将整个内存的用户区看作一个分区。创建新进程时,根据进程申请的空间大小,在这个分区中动态地为之划分一部分空间。,静态划分,必须事先进行,一旦划分完毕,分区的大小和数目将不再改变。可以划分:大小相同/不同的分区,如固定分区和分页。固定分区:根据系统管理员的经验和一些统计规律,事先将内存空间划分为若干个固定大小的分区,称为分区(Partitioning)。当进程申请存储空间时,系统为之分配一个大小合适的空闲

9、分区。,静态划分,分页:特殊的静态分区,需要事先将内存空间划分为若干个大小相同的分区,称为页框,或帧(frame)。当进程申请存储空间时,系统可以为之分配多个空闲页框。,图3.4 固定分区划分,固定分区:等长,固定分区:等长,所有分区的长度相同。 优点:分配简单,只要进程大小不超过分区大小,就可以装到任何一个分区中运行。 浪费存储空间。若进程申请的存储空间很小,却需要占用整个分区,分区内存在不可用的浪费空间,称为内零头(internal fragmentation)。 无法运行超过分区大小的程序。 无法精确确定分区的大小。,图3.4 固定分区划分,固定分区:异长,固定分区:异长,将内存空间划分

10、为若干个长度不同的分区,以适合于不同大小的进程需要既提高存储空间的利用率、减少浪费,又使长进程能装入运行。但是,确定每个分区的大小也是一件十分困难的事情。,固定分区,管理简单,只需要建立一张分区使用表,登记分区的使用情况。(等长分区只需要标明分区状态是已分配,还是空闲),固定分区:分配,首先,检索分区使用表,从中找出一个尚未分配的、能满足大小且内零头最小的分区。 若分区使用表中的分区按从小到大的顺序排列,则分配时,从表中的第一个表项开始查找,找到的第一个尚未分配并满足大小的分区即是最佳的分区。 将分区使用表中该分区的状态修改为已分配。 若找不到大小足够的分区,则系统将拒绝运行该进程,或采用其它

11、技术进行处理,如覆盖技术等。,固定分区存在内零头,浪费存储空间:异长分区较等长分区可以一定程度上提高系统的性能,但并不能彻底解决问题。,分页式划分(Paging),为了提高内存资源的利用率,可以考虑将分区长度缩小,减少内零头浪费的空间。但是,这样做必须有一个前提,即进程可以分配若干不连续的存储空间。否则,小分区可能使更多的进程无法装入内存。分页划分:系统预先将内存空间划分为若干较小的、固定大小的页框。,分页式划分(Paging),页框较小,有效地减少了内零头的浪费每个进程平均浪费0.5页框大小。页框大小固定,简化了存储分配。需要记录内存页框的分配和使用情况:位示图、空闲页框表或空闲页框链表等。

12、,分页:数据结构,位示图是一个由0、1构成的向量,其中每一位(bit)表示一个页框的使用状态。一般规定,0表示页框空闲,1表示页框已被分配。假定存储空间被划分为n个页框,所有页框依次编号为0,1,2,n-1,则记录所有页框的使用状态的位示图形如: 0000011101111111111100011110011111,分页:数据结构,空闲页框表:以表格形式记载内存页框的使用情况。 显然,为每一个空闲页框设置一个表项是不合理的,这将导致页框表太大。 可以为一组连续的空闲页框设置一个表项,其中主要包括:首页框号和页框个数,如表3.2所示。,分页:数据结构,表3.2 空闲页框表,分页:数据结构,位示图

13、和空闲页框表都需要占用专门的存储空间 空闲页框链表:是将内存中所有的空闲页框通过其内的链接指针连成一个链表,系统只需要记录链表头的位置。 为进程分配存储空间时,从链表头开始取所需的页框,同时更新链表头。 回收进程释放的存储空间时,将新产生的空闲页框链接到空闲页框链表中。,动态划分与分配算法,静态划分未考虑进程的实际需要。无论是固定分区,还是分页,都存在不同程度的内零头。 动态划分:根据进程的实际需要,动态地划分内存空间,并分配给进程,彻底解决了内零头问题。 系统初始化时,内存用户区就是一个大分区。随着进程的创建和撤消,内存被动态划分成若干较小的分区。,动态划分与分配算法,例如,如图3.6 有一

14、个128MB的内存,其中操作系统自身占用8MB,剩下的120MB空间供用户进程使用。依次装入进程P1、P2、P3、P4、P5、P6,剩下一个10MB的空闲分区。一段时间之后,进程P1、P3、P5执行结束,释放出3个空闲分区。内存中共有4个空闲分区,,动态划分与分配算法,可见,动态分区的分区长度和数目都是可变的。为了实施存储分配,系统必须维护一张空闲分区表,登记内存中的各个空闲分区。,动态划分与分配算法,采用动态划分技术,为进程分配存储空间的过程较复杂。当系统中有多个满足进程大小的空闲分区时,如何为进程选择一个分区合适的分区呢?目前几种较典型的分区分配方案:,首次适应算法 (FFA:First

15、Fit Algorithm),基本思想:总是从内存的某一端(一般从低地址端)开始查找,选择一个超过进程申请大小的空闲分区。为此,可以将空闲分区表中登记的空闲分区按照其起始地址由小到大的次序依次排列。系统查找空闲分区时,从表头开始查找,取第一个满足要求的分区分配给进程。,首次适应算法 (FFA:First Fit Algorithm),若找到的空闲分区恰好与进程申请的存储空间大小相等,或分配给该进程以后,仅剩下一个非常小的空间(小于系统设置的阈值),则将该分区全部分配给申请进程。否则,系统将该分区划分为两个分区,一个分区的长度等于进程申请的空间大小,并将其分配给申请进程。然后,将另一个子分区链接

16、到空闲分区链表中。,首次适应算法 (FFA:First Fit Algorithm),优点:尽量使用低地址空间,因而在高地址的空间可能会保留较大的空闲分区。所以,大进程申请的存储空间大都能在高地址端得到满足。缺点:由于每次只简单地使用找到的第一个分区,结果可能导致将较大的空闲分区不断地分割为较小的空闲分区。,外零头:紧凑,动态划分技术解决了静态划分技术的内零头。 可能产生很多较小的分区:外零头(External Fragment)。 紧凑(Compaction):把内存中的所有空闲分区拼接成一个较大的空闲分区。即把内存中的所有进程移到内存的某一端;所有空闲分区移到另一端 例如,将如图3.7(a

17、)所示的内存空间进行紧凑以后的效果见图3.8所示。,下次适应算法 (NFA: Next-Fit Algorithm),首次适应算法每次都从低地址端开始查找空闲分区,总是频繁使用内存的某一端,某些大进程申请的大分区需要很长时间才能在内存的另一端找到。 能否均衡使用整个内存空间,加快大分区的查找速度呢? 下次适应算法能记住上次分配分区的位置,下一次实施分配时,从上一次的分配位置之后开始查找,选择一个大小足够的空闲分区。,下次适应算法 (NFA: Next-Fit Algorithm),该算法常常会导致内存中缺乏大分区,因为它会均衡地利用空闲分区,包括分割较大的空闲分区。从而使得大进程无法装入内存运

18、行。下次适应算法可能会导致大量的外零头,需要较频繁地实施紧凑操作。,最佳适应算法 (BFA:Best Fit Algorithm),总是选择满足申请要求且长度最小的空闲分区。为了提高查找效率,可以将所有的空闲分区按照长度由小大到的次序依次排列在空闲分区表中。为进程分配存储空间时,从表头开始查找,第一个满足进程申请存储空间大小的分区就是最适合的分区。,最佳适应算法 (BFA:Best Fit Algorithm),优点:尽量不分割大的空闲分区缺点:可能会形成大量较小的、难以再分配的分区 大量的外零头。最佳适应算法并非是最好的算法。,最差适应算法 (WFA:Worst Fit Algorithm)

19、,选择满足申请要求且长度最大的空闲分区,使分割出来的剩余空闲分区较大。 为了提高系统效率,可将系统中所有的空闲分区按照长度由大到小的次序依次排列在空闲分区表中。 为进程分配存储空间时,从表头开始查找,选择第一个满足进程需要的分区。 如果第一个空闲分区小于进程申请空间的大小,则不能立即为进程分配存储空间。,最差适应算法 (WFA:Worst Fit Algorithm),优点:可以避免形成大量较小外零头,但它总是分割大的空闲分区。当遇到大进程申请大空间时,无法找到一个足够大的空闲分区。换句话说,在大进程面前,内存中所谓的较大空闲分区也是外零头了。,例如,当系统进行到如图3.6(c)所示的情形时,

20、若有一个进程P7申请大小为16MB的存储空间。分别采用上述4种算法进行分配,如图所示,分析结果。,伙伴系统 (Buddy System),静态划分方案限制了系统中活跃进的数目。并且,只能运行不超过分区大小的进程,如果进程远远小于分区大小,则内存空间的利用率非常低。动态划分方案使存储管理复杂化,并且需要系统付出紧凑外零头的额外开销。伙伴系统:综合静态划分技术和动态划分技术的优点,伙伴系统内存的用户可用空间为2u 。 系统总是为进程分配大小为2i的一个空闲分区。其中miU,2m是系统允许的最小分区尺寸。 如果进程申请的存储空间大小为k,且2 i-1 k 2i,则将整个2i大小的分区分配给它。 否则

21、,该分区被分割成大小相等( 2i-1 )的两个分区。再判断k是否满足条件:2i-2k2i-1,若满足条件,则将两个伙伴中的任何一个分配给进程; 否则,将其中一个伙伴又平均分成两个分区。此过程一直继续进行,直到产生的分区大于或等于k,将其分配进程。,伙伴系统的存储分配,进程申请大小为k的空间,系统为之分配一个2i的空闲分区,其中,2 i-1 k 2i 若k 2u ,即进程 内存空间,失败; 若当前无尺寸为2i的空闲分区,则: (1) 将i变为i+1,查找一个尺寸为2 i+1的空闲分区。若存在,转(2)执行;否则,继续执行(1); 等分2 i+1空闲分区:产生两个2i的伙伴分区; 把其中一个2i的伙伴分区作为空闲分区; (4) 另一个2i 空闲分区分配给进程,结束。,伙伴系统存储空间的回收,当进程执行完毕,释放一个尺寸为2i的分区时,系统用下面的算法回收该分区: 如果被回收分区的伙伴分区非空闲,那么保留该分区为一个独立的空闲分区,否则 1 合并回收分区及其伙伴分区,从而得到一个尺寸为2 i+1的空闲分区; 2 系统再次调用本算法回收上一步得到的尺寸为2 i+1 的空闲分区。,例如,有进程P1、P2、P3、P4、P5相继申请、释放空间。系统分配、回收(合并)伙伴分区的过程如图所示:,

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

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

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


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

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

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