计算机内存管理

上传人:kms****20 文档编号:46733746 上传时间:2018-06-27 格式:PDF 页数:12 大小:413.53KB
返回 下载 相关 举报
计算机内存管理_第1页
第1页 / 共12页
计算机内存管理_第2页
第2页 / 共12页
计算机内存管理_第3页
第3页 / 共12页
计算机内存管理_第4页
第4页 / 共12页
计算机内存管理_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《计算机内存管理》由会员分享,可在线阅读,更多相关《计算机内存管理(12页珍藏版)》请在金锄头文库上搜索。

1、计算机内存管理 - 1 - 计算机内存管理策略 【摘要】本文从计算机的硬件结构和运行机理出发,导出计算机内存管理的重要性,并提出内存管理所要包含的 4 个方面内容。 然后以操作系统发展历史为主线, 对单一连续分区存储管理、固定分区存储管理、可变分区存储管理、分页式存储管理、分段式存储管理 5 中内存管理方案进行分析,详细地介绍了各种管理策略具体实现以及各自的优劣。 在操作系统出现之前, 程序曾经是存储在卡片上, 计算机每读取一张卡片就执行一条指令, 程序的执行过程是直接从卡片到执行。 这种从外部存储媒介上直接执行指令的做法效率极其低下,而且灵活性较差。为了解决这一问题,人们想到将需要运行的程序

2、预先加载到内部存储器, 再自动从内部存取器读取指令并执行, 从而提高计算机的效率与灵活性。这一想法导致计算机硬件系统和软件系统都发生革命性的变化。 目前计算机硬件系统一般由处理机、存储系统和输入输出(I/O)系统构成。其中存储系统用于存取包括程序代码和数据在内的各种信息, 起到缓解负责执行程序的处理器与实现程序输入/输出系统之间速度严重不匹配的矛盾。 出于功用、性能、价格等方面的考虑,计算机存储系统并不是一个单独的存储器件,而是由不同的存储介质构成的一个复杂的多层次的存储体系,包括高速缓存、内存和外存。高速缓存的由硬件寄存器组构成,其特点是速度最快、价格高、容量小,一般用于存放高频指令与数据;

3、外存容量最大,价格也最低,但是读取速度相对很慢,主要用来存放程序的所有代码与数据,是程序与数据的持久完整集合;内存速度比高速缓存慢,但是比外存又快很多量级,价格适中,容量高于缓存而低于外存, 用来存放操作系统内核、 用户程序指令与程序运行所需数据, 程序运行时,CPU 直接从内存读取指令和数据。尽管内存速度与处理器速度有一定差距,但是这种程序执行的方式仍然极大地提高了计算机的运行效率。 冯 诺依曼体系的计算机都要求程序首先装入内存才能运行,能否合理地使用内存很大程度上影响到整个计算机的正常运行以及系统性能。 因此操作系统要能够很好地管理计算机系统中的重要资源内存, 使得它按规则并被高效地使计算

4、机内存管理 - 2 - 用,这是操作系统的起码要求。1 计算机内存管理主要包括四个方面的内容:内存分配与回收计算机内存管理主要包括四个方面的内容:内存分配与回收、内存地址映、内存地址映射射、内存共享与保护、内存共享与保护和和内存扩充。内存扩充。 内存分配与回收: 内存分配主要是对将要驻留在内存中的每道程序和数据分配一定的内存空间,每道程序都有自己专属的地址空间, 同时要求程序在运行时申请更多的地址空间,以满足数据段和程序段的可能动态增长的要求。2当程序运行结束之后, 就需要将之前分配给该程序的内存空间回收, 以分配给其他程序使用。 内存地址映射:从硬件层次来讲,内存时由一个一个的存储单元构成,

5、每个单元能被访问与否受到地址解码芯片的控制,每个存储单元对应一个唯一的地址,该地址称为“绝对地址”或“物理地址” 。要访问某个地址单元中的数据时,需要 CPU 向地址总线发出相应的地址信号, 选中该存储单元。 但是对于多道编程的系统, 计算机内存中同时转载了多个程序, 程序员在编程之前根本无法预测程序将会被装载到内存中的什么位置, 就算是单道编程的系统也会因为硬件配置和系统不同而装载位置不同。那么程序员编程时只能在一个相对的地址上进行编程,称为“逻辑地址”或“虚地址” ,并假设程序的首地址为 0,整个内存空间中只有自己一个程序。 那么在实际运行时,就要求操作系统能够根据程序的实际转载位置和程序

6、的虚拟地址计算出各条指令和数据的物理地址, 这个翻译的过程就是地址映射。 内存共享与保护:在多道编程的系统中,程序之间往往会存在着协作,或是使用相同的程序代码,为了使程序之间能够进行交流,也为了节省内存空间,提高内存利用率, 多道程序有时需要能够访问同一个内存分区中的数据,使得这些程序的物理空间出现了交叉的部分,这就是内存共享。同时,每道程序有自己私有的空间,为保证程序运行的正确性,该部分空间不允许其他程序访问和修改,这就需要内存保护,保证“私有财产神圣不可侵犯” 。 内存扩充: 这里所说的内存扩充并不是指硬件上的扩充, 而是指用存储管理软件来实现的逻辑扩充, 用到的技术就是虚拟内存。作业运行

7、时系统并不将其全1 引自计算机操作系统第 102 页,刘腾红、络正华编著,清华大学出版社出版。 2引自计算机操作系统第 80 页,冯裕忠、方智、周舫编著,清华大学出版社出版。 计算机内存管理 - 3 - 部程序装入内存,而是只装入当前需要运行的那一部分,其他的仍在外存。若进程需要时再把所需部分调入,以保证大作业的运行。3虚拟内存是操作系统发展史上的一个革命性突破, 这项技术的使用扩充了内存的容量, 呈现在程序员和用户面前的是比实际容量大得多内存, 使得计算机能够运行更多更大的程序,甚至是一个比内存容量还要大的程序。 不同的操作系统环境采用不同的内存管理方法,不同的操作系统环境采用不同的内存管理

8、方法,常用的内存管理方式有这常用的内存管理方式有这几种:单一连续分区存储管理、固定分区存储管理、可变分区存储管理、几种:单一连续分区存储管理、固定分区存储管理、可变分区存储管理、分页分页式存储管理、分段式存储管理。式存储管理、分段式存储管理。 单单一一连续分区管理连续分区管理 单一连续内存管理方式是最早出现和最简单的一种内存管理方式, 仅适用于单用户、单任务操作系统中,而不能用于多用户系统或单用户多任务系统。4例如早期的 MS-DOS 系统就采用这种管理模式。 在单用户单任务的系统下, 内存中只有两个程序: 操作系统和一个用户程序。整个内存被分成系统区域和用户区域两个部分,系统区域提供给操作系

9、统适用,用户区域提供给程序适用。 根据操作系统在内存中的位置, 单一连续分区管理有三种组织方案, 下图中图(a)所示为操作系统位于内存低地址部分的随机存储器(RAM)中;图(b)所示为操作系统位于内存高地址部分的只读存储器(ROM)中; 图(c)所示为设备驱动程序位于内存最高段中的 ROM 中而操作系统其余部分位于 RAM 的低地址部分。 0xffff 0xffff 0xffff 5 m 用户进程区 m ROM 中的操作系统 n ROM 中的操作系统 m 用户进程区 0 RAM 中的操作系统 0 用户进程区 0 RAM 中的操作系统 3引自操作系统第 125 页,许曰滨、刘英华编著,北京邮电大

10、学出版社出版。 4引自操作系统原理与实践第 130 页,邹鹏、阳国贵编著,高等教育出版社出版。 5引自操作系统实用教程第 172 页,范立南、刘飒编著,北京大学出版社出版。 计算机内存管理 - 4 - (a) (b) (c) 在这种单用户单任务的系统中,内存里只有操作系统和一个用户程序,而操作系统所占用的内存空间是恒定的, 从而我们可以将用户程序总是加载到同一个内存地址上。由于这个关系的存在,当用户程序装入内存时,所有物理地址与虚地址之间都存在一个固定的逻辑关系:物理地址=虚地址+程序在内存的起始地址。 这样,用户程序里面的地址都可以事先算出来, 即在程序运行之前就能计算出所有物理地址。 当用

11、户程序被装入内存时, 由装入程序一次性把逻辑地址转换为换成物理地址, 从而达到内存管理的一个基本功能要求内存地址映射。 这种地址映射的方法成为静态地址映射。 单一连续分区管理的内存保护很容易实现:对于上图(a)中的情况,只要规定 CPU 产生的每个访问内存的地址 addrm;对于图(b)中的情况,只要规定 CPU产生的每个访问内存的地址 addrm;对于图(c)中的情况,只要规定 CPU 产生的每个访问内存的地址 maddrn。一旦上述条件不满足,就产生地址越界错误,终止程序的执行即可。 单一连续分区管理的优点是管理简单, 要求硬件支持少。 但是存在较多的缺点: (1)由于每次只能有一个作业进

12、入内存,故它不适用于多道程序设计,整个系统的工作效率不高,资源利用率低下。 (2)只要作业比用户区小,那么在用户区里就会形成碎片,造成内存储器资源的浪费。如果用户作业很小,那么这种浪费是巨大的。 (3) 若用户作业的相对地址空间比用户区大, 那么该作业就无法运行。 即大作业无法再小内存上运行。6 固定分区存储管理固定分区存储管理 随着计算机技术的发展和内存容量的增加, 为了提高资源的利用效率,系统具有“多道”的模式,单一连续分区的管理模式不再适用。在这种情况下的内存管理最容易让人想到的就是将内存分成若干个连续的分区, 在每一个分区中装入不同作业,从而实现多个程序的同时运行。 6 引自操作系统教

13、程第 44 页,宗大华、宗涛编著,人民邮电出版社出版 计算机内存管理 - 5 - 划分分区的办法可以有两种: 分区大小相等和分区大小不等。 分区大小相等的划分方案管理简单,但是缺乏灵活性,当程序太小时内存空间浪费严重,当程序太大时无法装入内存。 所以一般采用分区不等的划分方案, 根据程序大小的统计规律, 把内存区划分为含有多个较小的分区、 适量中等分区以及少量的大分区的形式。当有一个进程要求进入内存时,选择一个合适的空闲分区(满足进程要求空间的最小分区)分给进程;没有合适的空闲分区时则让其等待。 为了充分利用存储器,将进程按照请求空间的大小在不同的分区排队等待,如图下(a) 。这种方法管理简单

14、,但有可能出现大分区队列空闲而小分区队列拥挤的现象。 当这种情况出现时, 会使存储器造成更大的浪费。 为充分利用存储器,系统只维持一个存储器等待队列,如下图(b) 。任何时候,只要有一个分区变为空闲,队列中的一个进程就可装入运行。7 为了记录每个分区的大小、其实地址、分配与否等信息,需要建立一个分区说明表,如下表所示。当程序要装入时,由内存分配程序负责检索该表,并从表中选择一个最合适的, 又尚未分配的分区分配给该进程, 然后将表中分配状态进行修改;若找不到适合的分区,则拒绝为其分配内存,让其继续等待。 分区号 分区起始地址 分区大小 分配状态 1 100k 50k 1 2 150k 100k

15、1 3 250k 200k 0 4 450k 300k 0 固定分区这种管理方法, 由于程序可以加载到内存的多个地方, 加载后的地7 引自操作系统原理教程第 74 页,张丽芬、刘美华编著,电子工艺出版社出版。 操作系统 第 1 分区(50KB) 第 2 分区 (100KB) 第 3 分区 (200KB) 第 4 分区 (300KB) A B C D E 操作系统 第 1 分区(50KB) 第 2 分区 (100KB) 第 3 分区 (200KB) 第 4 分区 (100KB) A B C D E (a) (b) 计算机内存管理 - 6 - 址是不固定的,所以在进行地址翻译时静态地址映射的方法将

16、不再适用。 我们看到, 一个程序是加载到内存里事先划分好的某片区域, 而起该程序是整个加载进去。该地址只要加上其所占区域的起始地址即可获得物理地址。8即物理地址=虚拟地址+程序所在区域的起始地址。 物理地址的确定不再是装入内存时就全部转换为物理地址,而是在 CPU 执行每一条指令时进行地址转换, 称为动态地址映射。 对于内存保护, 由于每个程序占用连续的一片内存空间, 因此只要其访问的空间不超出该片区域则为合法的访问。可以用两个寄存器记录程序的基址和长度, 程序发出的地址如果大于程序长度即为非法访问, 如果小于程序长度就用基址加上便宜获得其物理地址。 固定分区存储管理使多道编程得到实现,调高了处理器的利用率。但是内存利用效率仍然较低,且调入作业受到分区大小的严格限制,因此仅适合于进程的大小及数量事先能够预知的系统中。 可变分区存储管理可变分区存储管理 为了克服固定分区的弊端,进一步挺高内存利用率,避免有足够内存空间而不能装入作业的问题,产生可变分区存储管理方案。 可变分区是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号