chapter4存储器管理jqj

上传人:san****019 文档编号:69683441 上传时间:2019-01-14 格式:PPT 页数:166 大小:3.80MB
返回 下载 相关 举报
chapter4存储器管理jqj_第1页
第1页 / 共166页
chapter4存储器管理jqj_第2页
第2页 / 共166页
chapter4存储器管理jqj_第3页
第3页 / 共166页
chapter4存储器管理jqj_第4页
第4页 / 共166页
chapter4存储器管理jqj_第5页
第5页 / 共166页
点击查看更多>>
资源描述

《chapter4存储器管理jqj》由会员分享,可在线阅读,更多相关《chapter4存储器管理jqj(166页珍藏版)》请在金锄头文库上搜索。

1、1,第四章 存储器管理,存储器是计算机系统的重要组成部分。目前,存储器 仍然是一种宝贵资源。如何对它有效管理不仅影响到 存储器的利用率而且还对系统性能有重大影响。存储 器管理的主要对象是内存。 理想存储器:速度快;容量大;价格低。但目前无 法同时满足这三个条件。,2,4.1.1 多级存储结构,存储器的功能是保存数据,存储器的发展方向是高速、大容量和小体积。 存储组织是指在存储技术和CPU寻址技术许可的范围内组织合理的存储结构。 其依据是访问速度匹配关系、容量要求和价格 寄存器-内存-外存 结构 寄存器-缓存-内存-外存 结构 微机中的存储层次组织: 访问速度越慢,容量越大,价格越便宜 最佳状态

2、应是各层次的存储器都处于均衡的繁忙状态(如:缓存命中率正好使主存读写保持繁忙),4.1 存储器的层次结构,3,存储器的层次结构 存储器在信息处理中占据重要位置。但是在现有技术下,任何一种存储装置,都无法同时从速度与容量两方面,满足用户的需求。实际上它们组成了一个速度由快到慢,容量由小到大的存储装置层次。 书P116 图4-1 存储层次示意,4,4.1.2.主存储器与寄存器,主存储器: 主存储器 (简称内存或主存) ,用于保存进程运行时的程序和数据,也称可执行存储器。 其容量从数十MB到数GB。CPU的控制部件只能从主存中取得指令和数据:数据从主存读取并将它们装入到寄存器中,或从寄存器存入到主存

3、。由于主存的访问速度远低于CPU执行指令速度,为缓和这一矛盾引入寄存器和高速缓存。 寄存器: CPU内部,访问速度最快,完全能与CPU协调工作,但价格十分昂贵,因此容量不可能做得很大。一般以字(word)为单位。寄存器的数目,对于当前的微机系统和大中型机,可能有几十个甚至上百个。,5,4.1.3 高速缓存和磁盘缓存,高速缓存Cache( 10-100ns) 容量大于或远大于寄存器,而比主存约小两到三个数量级,从几十KB到几MB; 其访问速度快于主存,为缓和内存和CPU速度上的矛盾而产生。 进程的程序和数据通常是存放在主存中,当使用时被临时复制到一个速度较快的高速缓存中。当CPU访问一组特定信息

4、时,首先检查它是否在高速缓存中,如果已存在,可直接从中读出以避免访问主存,否则再从主存中读出信息。 如大多数计算机有指令高速缓存,用来暂存下一 条要执行指令,若没有指令高速缓存, CPU将空等若干个周期,直到下一条指令从主存中取出。,6,磁盘缓存: 并不是一种实际存在的存储介质,是主存的一部分。即 利用主存中的存储空间,来暂存从磁盘中读出或写入的 信息。 由于目前磁盘的I/O速度远低于对主存的访问速度,因此 将频繁使用的一部分磁盘数据和信息, 暂时存放在磁盘 缓存中,可减少访问磁盘的次数。 由操作系统协调这些存储器的使用 一个文件的数据可能出现在存储器层次的不同级别中: 先存放在辅存中(如硬盘

5、);当需要运行或被访问时, 就必须调入主存,也可以暂存在磁盘缓存中。,7,4.2 程序的装入和链接,8,图 4-2 对用户程序的处理步骤,程序在成为进程之前的准备工作 编辑:形成源文件(符号地址) 编译:形成目标模块(模块内符号地址解析) 链接:由多个目标模块或函数库生成可执行文件。 (模块间的符号地址解析) 装入:构造PCB,形成进程(使用物理地址),完成 装入模块中的逻辑地址到物理地址的映射。,9,4.2.1 程序的装入,1. 绝对装入方式,装入程序按照装入模块中的地址,将程序和数据装入内存。 装入后由于程序中的逻辑地址与实际内存地址完全相同,故不 须对程序和数据的地址进行修改。,10,程

6、序中使用的绝对地址,可在编译或汇编时给出, 也可由程序员直接赋予。但要求程序员熟悉内存使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。,优点:装入过程简单 缺点:只能将目标模块装入到内存中事先指定的位置。在多 道程序环境下,编译程序不可能预知所编译的目标模 块应放在内存的何处,因此只适用于单道程序环境。 过多依赖于硬件结构,不适于多道程序。,11,2. 可重定位装入方式(静态),在多道程序环境下,所得到的目标模块的起始地址通常 是从0开始的, 程序中的其它地址也都是相对于起始地址计 算的。此时应采用可重定位装入方式,根据内存的当前情况, 将装入模块装入到内存的适当位置。 把在

7、装入时对目标模块中的指令和数据的地址的修改过 程称为重定位。又因为地址变换是在装入时一次完成的,以 后不再改变,故称为静态重定位。,12,图 4-3 作业装入内存时的情况,目标模块中的数字地址是逻辑地址,在装入时将其转换为物理地址。并且地址变换是一次完成的,之后不再改变。 优点:可将装入模块装入到内存中任何允许的位置,故可用于多道程序环境。可以装入有限的多道程序,不需要硬件的支持。 缺点:常占用连续的内存空间,程序装入后不能移动,不易实现共享。,13,3. 动态运行时装入方式-动态可重定位,动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地

8、址转换推迟到程序真正要执行时才进行。因此, 装入内存后的所有地址都仍是相对地址。 优点:可以移动,有利于实现共享,是虚拟存储实现的基础。,14,4.2.2 程序的链接,1.静态链接方式,源程序经过编译后,可得到一组目标模块,再利用链接 程序将这组目标模块链接,形成装入模块。 根据链接时间 不同,可分为三种:,在程序运行之前,先将各目标模块及所需的库函数, 链接成一个完整的装入模块,以后不再拆开。这种事先 进行链接的方式称为静态链接。,15,(1)对相对地址进行修改。 (2)将每个模块中所有的外部调用符号也都变换为相对地址。,16,2. 装入时动态链接,装入时动态链接方式有以下优点: 便于修改和

9、更新某个目标模块。 便于实现对目标模块的共享。,源程序经编译后所得的目标模块,是在装入内存时边装入 边链接的,即在装入一个目标模块时, 若发生一个外部模块 调用事件,将引起装入程序去找出相应的外部目标模块, 并 将它装入内存, 还要按照上图的方式修改目标模块中的相对 地址。,17,3. 运行时动态链接,将对某些模块的链接推迟到执行时才链接,即在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,并把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。,18,4.3

10、 连续分配,连续分配方式,是指为一个用户程序分配一个连续的内存空间。 可分为: 单一连续分配 固定分区分配 动态分区分配 动态重定位分区分配,19,4.3.1 单一连续分配方式,在单道环境下,不管是单用户系统还是单道批处理系统,进程(作业)执行时除了系统占用一部分主存外,剩下的主存区域全部归它占用。主存可以划分为三部分: 系统区、用户区、空闲区。用户区是一个连续的存储区,所以又称单一连续区存储管理。 单用户系统在一段时间内,只有一个进程在内存,故内存分配管理十分简单,内存利用率低。内存分为两个区域,一个供操作系统使用,一个供用户使用。,20,单一连续区存储分配示意图,21,工作流程,单一连续区

11、分配采用静态分配和静态重定位方式,亦即作业或进程一旦进入主存,就一直等到它运行结束后才能释放主存。如下图所示的主存分配与回收法。并且由装入程序检查其绝对地址是否超越,即可达到保护系统的目的。,22,工作流程(续),23,单用户系统缺点,不支持多道。 主存利用率不高 程序全部装入,很少使用的程序部分也占用主存。 程序的运行受主存容量限制。,24,4.3.2 固定分区分配,是最简单的一种可运行多道程序的存储管理方式。 把内存分为一些大小相等或不等的分区,在每个分区中只装入一道作业,这样,把用户空间划分成为几个分区,便允许有几道作业并发运行。操作系统只占用其中一个分区。 适用于多道程序系统和分时系统

12、,支持多个程序并发执行,但难以进行内存分区的共享。,25,预先把可分配的主存空间分割成若干个连续区域,称为一个分区。每个分区的大小可以相同也可以不同,如图所示。但分区大小固定不变,每个分区装一个且只能装一个作业。 存储分配:如果有一个空闲区, 则分配给某个作业。,1.划分分区的方法,26,分区4 分区3 分区2 分区1 操作系统,多个等待队列,单个等待队列,分区4 分区3 分区2 分区1 操作系统,固定分区示意图,27,2.内存分配管理,固定分区使用表,设置内存分配表,20,28,3 固定分区分配优缺点,优点:易于实现,开销小。 缺点:内部碎片造成浪费,分区总数固定,限制 了并发执行的程序数目

13、。,29,4.3.3 动态分区分配(可变分区分配),根据进程的实际需要,动态地为之分配内存空间。 在实现可变分区分配时,将涉及三个问题:分区分配中所用的数据结构、分区分配算法、分区的分配与回收 基本思想:内存不是预先划分好的,而是当作业装入时,根据作业需求和内存空间使用情况来决定是否分配内存:设置内存空闲块表记录了空闲区起始地址和长度 分区分配:动态分配 分区回收:当某一块归还后,前后空间合并,修改内存空闲块表,30,31,32,33,1. 分区分配中的数据结构,空闲分区表 (2) 空闲分区链 书P123,图 4-6 空闲链结构,34,0K,15K,38K,48K,68K,80K,110K,1

14、20K,空闲区表,已分配分区表,分区分配表:,分区分配表,35,0K,15K,38K,48K,68K,80K,110K,120K,空闲区表,已分配区表,85K,98K,36,2. 分区分配操作,1) 分配内存(系统利用某种分配算法从空闲分区链或表 中找到所需大小的分区的过程),图 4-7 内存分配流程,空闲分区大小为m.size 请求分区大小为u.size,size是事先规定的不再切割的剩余分区的大小,37,2) 回收内存 (当进程运行完毕释放内存时,系统根据回收区的首址,从空闲分区链或表中找到相应的插入点, 将回收区插入到空闲分区链或表中适当位置。,回收区与插入点的前一个空闲分区F1相邻接

15、回收区与插入点的后一空闲分区F2相邻接 回收区与插入点的前、后两个分区相邻接 回收区既不与F1邻接,又不与F2邻接。 以上四种情况处理见书P125,38,3.可变分区分配算法,为把一个新作业装入内存,须按照一定的分配算法, 从空闲分区链或表中选出一分区分配给该作业。 动态内存分配有以下四种算法: 首次适应法 下次适应法(循环首次适应法) 最佳适应法 最坏适应法,39,分配:当进程申请大小为SIZE的内存时,系统从空闲区表的第一个表目开始查询,直到首次找到等于或大于SIZE的空闲区。从该区中划出大小为SIZE的分区分配给进程,余下的部分仍作为一个空闲区留在空闲分区链中,但要修改其首址和大小。,回

16、收:按释放区的首址,查询空闲分区链,若有与释放区相邻的空闲区,则合并到相邻的空闲区中,并修改该区的大小和首址,否则,把释放区作为一个新的空闲区,将其大小和首址按照首地址大小递增的顺序插入到空闲分区链中的适当位置。,要求空闲分区按首址递增的次序组织空闲分区链或表。,首次适应法,40,分析,注意:每次分配和回收后空闲分区链表都要按首址递增的次序排列。 首次适应法的优点: 释放某一存储区时,若与空闲区相邻则合并到相邻空闲分区中去,这种情况并不改变该区在表中的位置,只要修改其大小或首址。 这种算法是尽可能地利用低地址空间,从而保证高地址空间有较大的空闲区。 首次适应法的缺点: 低址部分不断被划分,会留下许多难以利用的,很小的空闲分区称为碎片。 每次查找都是从低址部分开始,增加了查找时的开销。,41,下次适应法(循环首次适应法),类似首次适应法。每次分区时,总是从上次查找结束的地方开始,找到一个足够大的空白区分配。 为实现该算法应设置一个起始查寻指针,用于下一次起始查寻

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

当前位置:首页 > 高等教育 > 大学课件

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