1、计算机操作系统主讲教师:王 晓 晔E-mail: 第四章 存储器管理 4.1 存储器的层次结构4.2 程序的装入和连接 4.3 连续分配方式 4.4 基本分页存储管理方式 4.5 基本分段存储管理方式 4.6 虚拟存储器的基本概念 4.7 请求分页存储管理方式4.8 页面置换算法4.9 请求分段存储管理方式 4.1 存储器的层次结构4.1.1 多级存储器结构4.1.2 主存储器与寄存器 主存储器 寄存器4.1.3 高速缓存和磁盘缓存 高速缓存 磁盘缓存 4.2 程序的装入和链接4.2.1 程序的装入1. 绝对装入方式 (Absolute Loading Mode) 程序中所使用的绝对地址,既可
2、在编译或汇编时给出, 也可由程序员直接赋予。 但在由程序员直接给出绝对地址时, 不仅要求程序员熟悉内存的使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。因此,通常是宁可在程序中采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。3. 动态运行时装入方式(Denamle Run-time Loading) 动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此, 装入内存后的所有地址都仍是相对地址。 3. 运行时动态链接(Run-time Dynamic Linking) 近
3、几年流行起来的运行时动态链接方式,是对上述在装入时链接方式的一种改进。这种链接方式是将对某些模块的链接推迟到执行时才执行,亦即,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存, 把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。 4.3 连续分配方式4.3.1 单一连续分配这是最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中。采用这种存储管理方式时,可把内存分为系统区和用户区两部分,系统区仅提供给OS使用,通常是放在内存的低址部分;用户区是
4、指除系统区以外的全部内存空间, 提供给用户使用。 4.3.2 固定分区分配 1. 划分分区的方法 (1) 分区大小相等, 即使所有的内存分区大小相等。 (2) 分区大小不等。 (1) 首次适应算法FF。 (2) 循环首次适应算法,该算法是由首次适应算法演变而成的。(3) 最佳适应算法。(4) 最坏适应算法(5) 快速适应算法4.3.4 伙伴系统伙伴系统规定,无论已分配分区或空闲分区,其大小均为2的k次幂,k为整数,1=k=m,其中:2 1表示分配的最小分区的大小, 2m表示分配的最大分区的大小,通常2 m是整个可分配内存的大小。假设系统的可利用空间容量为2 m个字,则系统开始运行时,整个内存区
5、是一个大小为2 m的空闲分区。在系统运行过程中,由于不断的划分,可能会形成若干个不连续的空闲分区,将这些空闲分区根据分区的大小进行分类,对于每一类具有相同大小的所有空闲分区,单独设立一个空闲分区双向链表。这样,不同大小的空闲分区形成了k个空闲分区链表。 当需要为进程分配一个长度为n的存储空间时,首先计算一个i值,使2 i-1=n= 2i,然后在空闲分区大小为为2 i的空闲分区链表中查找。若找到,即把该空闲分区分配给进程。否则,表明长度为2 i的空闲分区已经耗尽,则在分区大小为2 i+1的空闲分区链表中寻找。若存在2 i+1的一个空闲分区,则把该空闲分区分为相等的两个分区,这两个分区称为一对伙伴
6、,其中的一个分区用于分配,而把另一个加入分区大小为2 i的空闲分区链表中。若大小为2 i+1的空闲分区也不存在,则需要查找大小为2 i+2的空闲分区,若找到则对其进行两次分割:第一次,将其分割为大小为2 i+1的两个分区,一个用于分配,一个加入到大小为2 i+1的空闲分区链表中;第二次,将第一次用于分配的空闲区分割为2 i的两个分区,一个用于分配,一个加入到大小为2 i的空闲分区链表中。若仍然找不到,则继续查找大小为2i+3的空闲分区,以此类推。由此可见,在最坏的情况下,可能需要对2 k的空闲分区进行k次分割才能得到所需分区。 与一次分配可能要进行多次分割一样,一次回收也可能要进行多次合并,如
7、回收大小为2 i的空闲分区时,若事先已存在2 i的空闲分区时,则应将其与伙伴分区合并为大小为2 i+1的空闲分区,若事先已存在 2i+1的空闲分区,又应继续与其伙伴分区合并为大小为2 i+2的空闲分区,以此类推。4.3.5 哈希算法哈希算法就是利用哈希快速查找的优点,以及空闲分区在可利用空间表中的分布规律,建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一个对应的空闲分区链表表头指针。当进行空闲分区分配时,根据所需空闲分区大小,通过哈希函数计算,即得到在哈希表中的位置,从中得到相应地空闲分区链表,实现最佳分配策略。4.3.7 对换(Swapping) 1. 对换的引
8、入 所谓“对换” , 是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。对换是提高内存利用率的有效措施。 2. 对换空间的管理为了能对对换区中的空闲盘块进行管理,在系统中应配置相应的数据结构,以记录外存的使用情况。其形式与内存在动态分区分配方式中所用数据结构相似,即同样可以用空闲分区表或空闲分区链。在空闲分区表中的每个表目中应包含两项, 即对换区的首址及其大小,它们的单位是盘块号和盘块数。 3. 进程的换出与换入 (1) 进程的换出。 每当一进程由于创建子进程而需要更多的内存空间,但又无足够
9、的内存空间等情况发生时,系统应将某进程换出。 其过程是:系统首先选择处于阻塞状态且优先级最低的进程作为换出进程,然后启动盘块,将该进程的程序和数据传送到磁盘的对换区上。若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块做相应的修改。 4.4 基本分页存储管理方式 4.4.1 页面与页表 1. 页面 1) 页面和物理块 分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0 开始,如第0 页、第1 页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为( 物理) 块或页框(frame) , 也同样为它们加以编号,如
10、0 块、1 块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“ 页内碎片” 。 例题3:设有一页式存储管理系统,向用户提供的逻辑地址空间最大为 16页,每页2048字节,内存总共有8个存储块,试问逻辑地址至少应为多少位?内存空间有多大 ?例题4:在一分页存储管理系统中,逻辑地址长度为 16位,页面大小2048字节,对应的页表如下表所示.现有两逻辑地址为0A5CH和2F6AH, 经过地址变换后所对应的物理地址各是多少?例题5:在某个采用页式存储管理的系统中,现有J1,J2,J3共3 个作业
11、同驻内存.其中J2有4个页面,被分别装入到主存的第3 、4、6、8块中。假定页面和存储块的大小均为1024字节,主存容量为10KB字节。(1)写出J2的页面映像表;(2)当J2在CPU上运行时,执行到其他地址空间第500号处遇到一条传送指令:MOV 2100,3100请用地址变换图计算MOV指令中两个操作数的物理地址。4.5 基本分段存储管理方式 4.5.1 分段存储管理方式的引入 引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要: 1) 方便编程 2) 信息共享 3) 信息保护 4) 动态增长 5) 动态链接 例题:在一个段式存储管理系统中,其段表如表(1)所示 ,试求表(
12、2) 中的逻辑地址所对应的物理地址是什么?例题:一台计算机含有65536字节的存储空间,这一空间被分成许多长度为4096B 的页。有一个程序,其代码段为32768B,数据段为16386B,栈段为15870B。试问该机器的主存空间适合这个进程吗?如果将每页改成512B,适合吗?解答 :当存储空间为4096B 时,共可分成16 块。其中: 程序段为:32768/4096=8 块 数据段为:16386/4096=5 块 栈段为:15870/4096=4 块 合计:8+5+4=17 块 该机器的主存空间不适合这个作业。例题:如图所示,是一种段页式管理配置方案,一页大小为1KB.(1)根据给出的虚地址写
13、出物理地址.(2)描述地址变换过程.4.6 虚拟存储器的基本概念 4.6.1 虚拟存储器的引入 1. 常规存储器管理方式的特征 (1) 一次性。 (2) 驻留性 4.7 请求分页存储管理方式4.8 页面置换算法 例题:设某分页系统中,页面大小为100字。一个程序大小为1200字,可能的访问序列如下:10, 205,110,735,603,50,815,314,432,320,225,80,130,270系统分别采用FIFO 和Optimal算法。当为其分配4个主存块时,给出该作业驻留的各个页的变化情况及页故障数。例题:考虑下面的页访问串:1,2 ,3 ,4 ,2,1,5,6,2 ,1,2,3
14、,7 ,6,3,2 ,1,2,3 ,6假定有4,5,6个页块,应用下面的页面替换算法,计算各会出现多少次缺页中断。(1)LRU (2) FIFO (3)Optimal由访问位A和修改位M可以组合成下面四种类型的页面: 1类 (A=0, M=0): 表示该页最近既未被访问,又未被修改, 是最佳淘汰页。2类(A=0, M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。3类(A=1, M=0):最近已被访问,但未被修改,该页有可能再被访问。4类(A=1, M=1): 最近已被访问且被修改,该页可能再被访问。 例题:一进程已分配到4 个页面,如表所示(所有数字都为十进制数,且以0 开始)。当进程访问第4 页时,产生缺页中断,请分别用FIFO(先进先出)、LRU (最近最久未使用)、NRU(最近未用)、改进CLOCK算法,决定缺页中断服务程序选择换出的页面。4.9 请求分段存储管理方式练习题