1、1,第四章 存储器管理,4.1 存储器的层次结构 4.2 程序的装入和链接 4.3 连续分配方式 4.4 基本分页存储管理方式 4.5 基本分段存储管理方式 4.6 虚拟存储器的基本概念 4.7 请求分页存储管理方式 4.8 页面置换算法 4.9 请求分段存储管理方式,2,第四章 存储器管理,* 为多道程序的运行提供良好的环境,主要任务:,* 方便用户使用存储器,* 提高存储器的利用率,* 逻辑上扩充内存,* 内存分配:,主要功能:,* 内存保护:,* 地址映射:,* 内存扩充:,3,4.1 存储器的层次结构,4.1.1 多级存储器结构,图 4-1 计算机系统存储系统结构,4,4.1 存储器的
2、层次结构,4.1.1 多级存储器结构,图 4-1 计算机系统存储系统结构,5,4.1 存储器的层次结构,4.1.2 主要存储器,1、主存储器(内存),主要存放CPU当前使用的程序和数据。,(寄存器),6,3、高速缓存,存放CPU在当前一小段时间内多次使用的程序和数据。,2、辅助存储器(外存),存放大量的后备程序和数据。,4、磁盘缓存,7,4.2 程序的装入和链接,图 4-2 对用户程序的处理步骤,8,4.2 程序的装入和链接,4.2.1 程序的装入,9,4.2 程序的装入和链接,4.2.1 程序的装入,10,4.2.1 程序的装入,1、绝对装入方式(Absolute Loading Mode)
3、,(1)程序中使用绝对地址; (2)程序装入内存指定地址段; (3)程序员熟悉内存的使用情况; (4)程序动态修改或装入困难。,11,2、可重定位装入方式(Relocation Loading Mode),图 4-3 作业装入内存时的情况,LOAD 1,12500,12,3、动态运行时装入方式(Denamle Run-time Loading),把相对地址到绝对地址的转换推迟到程序真正执行时才进行。,重定位:装入时对目标程序中指令和数据地址的修改过程。,静态重定位:只在程序装入时进行一次地址变换。,动态重定位:地址变换过程在程序执行期间,随着对 每条指令或数据的访问而自动进行。,13,4.2.
4、2 程序的链接,图 4-3 程序链接示意图,程序链接:将几个目标模块装配成一个装入模块。,14,需要解决两个问题: (1) 对相对地址进行修改; (2)变换外部调用符号。,4.2.2 程序的链接,1、静态链接方式 (Static Linking),2、 装入时动态链接 (Loadtime Dynamic Linking),装入时动态链接的优点: (1)便于修改和更新; (2)便于实现对目标模块的共享。,3、 运行时动态链接 (Run-time Dynamic Linking),15,4.3 连续分配方式,4.3.1 单一连续分配,(1)只能用于单用户、单任务操作系统: (2)内存分为系统区和用
5、户区两部分。,4.3.2 固定分区分配,1、划分分区的方法,(1)分区大小相等 (2) 分区大小不等,16,4.3.2 固定分区分配,1、划分分区的方法,(1)分区大小相等 (2)分区大小不等,17,2、内存分配,图 4-5 固定分区使用表,4.3.2 固定分区分配,18,19,Multiprogramming with Fixed Partitions,20,4.3.3 动态分区分配,1、分区分配中的数据结构,空闲分区表(2) 空闲分区链,图 4-5 空闲链结构,21,22,23,2、分区分配算法,(1)首次适应算法(First Fit) (2) 循环首次适应算法(Next Fit) (3)
6、最佳适应算法(Best Fit) (4)最坏适应算法(Worst Fit) (5)快速适应算法(Quick Fit),分类搜索算法,4.3.3 动态分区分配,24,25,3、分区分配操作,(1) 分配内存,图 4-7 内存分配流程,26,(2)回收内存,图 4-8 内存回收时的情况,空闲块合并,27,4.3.6 可重定位分区分配,1、 动态重定位的引入,图 4-9 紧凑的示意,28,2、动态重定位的实现,图 4-10 动态重定位示意图,29,3、动态重定位分区分配算法,图 4-11 动态分区分配算法流程图,30,1)紧凑的基本概念:,2)动态重定位:,* 重定位寄存器,零头、碎片,* 地址变换
7、:,* 内存地址 = 相对地址 + 重定位地址,* 物理地址 = 逻辑地址 + 重定位地址,* 物理地址 = 相对地址 + 基址地址,* 实地址 = 虚地址 + 基地址,3)重定位分区分配算法:,紧凑的使用,4)优、缺点:,4.3.6 可重定位分区分配,31,4.3.7 对换(Swapping),1、 对换的引入,对换:把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上。,对换是提高内存利用率的有效措施。,32,2、 对换空间的管理,(1)空闲分区表 (2)空闲分区链,4.3.7 对换(Swapping),3、 进程的换出与换入,33,4.4 基本分页存储管理方式,离散分区分配:
8、将一个进程(或作业)直接分散地分配到许多不必相邻接的分区中,而不需要进行“紧凑”。,(1)分页存储管理,(2)分段存储管理,(3)段页式存储管理,离散分区分配方式,包括:,34,4.4.1 页面与页表,(1)将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并加以编号。(2)把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame), 同样加以编号。(3)分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。(4)由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。,1、页面,(5)页面大小应是2的幂,通常为512
9、 B8KB.,35,36,2、 分页管理中的地址结构,(1)对某特定机器,其地址结构是一定的。(2)若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:,37,3、 页表,图 4-12 页表的作用,38,4.4.2 地址变换机构,1、基本的地址变换机构,图 4-13 分页系统的地址变换机构,越界中断,39,2、 具有快表的地址变换机构,图 4-13 具有快表的地址变换机构,40,4.4.3 两级和多级页表,页表的问题: (1)逻辑地址空间越来越大 (232264); (2)页表也就变得非常大,占用内存空间越来越大;(3)页表要求连续的内存空间存储。 解决方案:
10、 采用离散分配方式来解决难以找到一块连续的大内存空间的问题: 只将当前需要的部分页表项调入内存, 其余的页表项仍驻留在磁盘上,需要时再调入,即多级页表。,41,1、两级页表 (Two-Level Page Table),逻辑地址结构:,42,图 4-15 两级页表结构,43,图 4-16 具有两级页表的地址变换机构,44,4.5 基本分段存储管理方式,4.5.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:1) 方便编程2) 信息共享 3) 信息保护 4) 动态增长 5) 动态链接,45,4.5.1 分段存储管理方式的引入,46,Segmenta
11、tion,data,code,虚地址空间,常数表,代码段,词法树,符号表,调用栈,2K 0K,10K0K,16K0K,12K0K,20K0K,第0段,第1段,第2段,第3段,第4段,虚空间,虚空间,虚空间,虚空间,虚空间,(a) 纯粹分段: 程序占一个虚空间,(b) 分段管理:程序占多个虚空间,47,4.5.2 分段系统的基本原理,1、 分段,分段管理中的地址结构:,31 16 15 0,48,图 4-17 利用段表实现地址映射,2、 段表,49,图 4-18 分段系统的地址变换过程,3、地址变换机构,50,4、 分页和分段的主要区别,(a)页是信息的物理单位,分页是为实现离散分配方式,以消减
12、内存的外零头, 提高内存的利用率。分页仅仅是由于系统管理的需要而不是用户的需要。(b)段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。,(1)划分目的不同,51,(a)页的大小固定,由系统决定,是由机器硬件实现的,在一个系统中只能有一种大小的页面。(b)段的长度不固定, 决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。,4、 分页和分段的主要区别,(2)大小和属性不同,52,(a)分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址。 (b)分段的作业地址空间则是二维的,程序员
13、在标识一个地址时,既需给出段名, 又需给出段内地址。,4、 分页和分段的主要区别,(3)描述方式不同,53,4.5.3 信息共享,图 4-19 分页系统中共享editor的示意图,54,图 4-20 分段系统中共享editor的示意图,4.4.3 信息共享,可重入代码 (纯代码),55,4.4.3 信息共享,可重入代码 (纯代码),56,4.5.4 段页式存储管理方式,1、基本原理,图 4-21 段页式管理的地址空间和地址结构,57,Segment number,18,Segment number,Page table,Page,Page number,Descriptor segment,o
14、ffset,4.5.4 段页式存储管理方式,58,图 4-22 利用段表和页表实现地址映射,4.5.4 段页式存储管理方式,59,2、地址变换过程,图 4-23 段页式系统中的地址变换机构,60,Compare Paging and Segmentation,61,连续分配与离散分配的性能比较,62,(1)存储系统存在的问题,* 作业很大,其所求的内存空间超过了内存的部容量,* 内存容量不足,难以容纳较大量需要运行的作业,(2)解决问题的途径,* 物理上增加内存容量,* 逻辑上扩充内存容量,4.6 虚拟存储器的基本概念,63,1、常规存储器管理方式的特征,(1) 装入的一次性 (2) 作业的驻
15、留性 (3) 运行的局部性,4.6.1 虚拟存储器的引入,2、局部性原理,局部性规律:在一较短时间内,程序的执行仅限于某个部分;相应地,它所访问的存储空间也局限于某个区域。,(1)基本概念,64,2、局部性原理,(2)主要原因,* 顺序性:顺序执行,* 模块性:循环结构、函数、过程,* 重复性:过程调用、循环执行,* 结构性:数据块、结构体、功能块,(3)主要表现,* 时间局限性,* 空间局限性,65,3、虚拟存储器定义,所谓虚拟存储器, 是指具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。,4、虚拟存储器的特点,* 从用户角度看,系统所具有的内存容量比实际内存容量
16、大得多,但物理上,并非如此。,* 仅把作业一部分装入内存变能运行。,* 逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。,66,5、虚拟存储器的基本条件,* 内存作业采用段(页)式管理,* 具有请求调段(页)功能,* 具有段(页)置换功能,硬件条件:足够大的辅助存储器一定容量的主存虚、实地址映象机构,67,4.6.2 虚拟存储器的实现方法,1、分页请求系统,分页系统 + 请求调页 + 页面置换,= 页式虚拟存储器,2、分段请求系统,分段系统 + 请求调段+ 分段置换,= 段式虚拟存储器,3、段页请求系统,段页系统 + 请求调页+ 页面置换,= 段页
17、式虚拟存储器,68,4.6.3 虚拟存储器的特征,* “大容量”只是一种感觉,是虚的,是逻辑上的扩容;,* 运行速度接近于内存速度,而位成本接近于外存;,* 逻辑容量由内存容量与外存容量之和决定;,* 最大容量由地址结构决定。,69,4.6.3 虚拟存储器的特征,1)离散性:,2)多次性:,3)对换性:,4)虚拟性:,相关概念:,* 虚拟地址:,* 实地址:,* 虚拟地址空间:,* 实地址空间:,* 动态地址映象机构:,70,4.7 请求分页存储管理方式,4.7.1 请求分页中的硬件支持,1、页表机制,Typical page table entry,71,2、 缺页中断机构,图 4-24 涉
18、及6次缺页中断的指令,72,4.7.2 内存分配策略和分配算法,1、最小物理块数的确定,(1)能保证进程正常运行所需的最小物理块数。(2)进程应获得的最少物理块数与计算机的硬件结构有关,取决于指令的格式、 功能和寻址方式。,2、 物理块的分配策略,分配策略:固定分配和可变分配 置换策略:全局置换和局部置换(1) 固定分配局部置换(2) 可变分配全局置换(3) 可变分配局部置换,73,3、物理块分配算法,(1)平均分配算法,(2) 按比例分配算法如果系统中共有n个进程,每个进程的页面数为Si,则系统中各进程页面数的总和S为:又假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为bi,将
19、有:b应该取整,它必须大于最小物理块数。,(3)考虑优先权的分配算法,74,4.7.3 调页策略,1、何时调入,(1)预调页策略 (2)请求调页策略,3、调入过程,* 整个调入过程对用户透明。,2、何处调入,* 文件区,* 对换区,75,4.8 页面置换算法,4.8.1 最佳置换算法和先进先出置换算法,1、最佳(Optimal)置换算法最佳置换算法是由Belady于1966年提出的一种理论上的算法。 其所选择的被淘汰页面,将是以后永不使用的, 或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。,76,假定系统为进程分配了三个物理块, 页面号引用序列为:7
20、,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1. 采用最佳置换算法,其置换过程如下:,图 4-26 利用最佳页面置换算法时的置换图,1、最佳(Optimal)置换算法,缺页率?,77,2、先进先出(FIFO)页面置换算法,图 4-27 利用FIFO置换算法时的置换图,缺页率?,78,4.8.2 最近最久未使用(LRU)置换算法,1、 LRU(Least Recently Used)置换算法的描述,图 4-28 LRU页面置换算法,缺页率?,79,2、 LRU置换算法的硬件支持,(1)寄存器为每个在内存中的页面配置一个移位寄存器。,R=Rn-1Rn-2Rn-3 R2
21、R1R0,图 4-29 某进程具有8个页面时的LRU访问情况,循环右移,Rn-1位置1,R值小换出,*,*,*,80,(2)栈,图 4-30 用栈保存当前使用页面时栈的变化情况,2、 LRU置换算法的硬件支持,最久未用沉于栈底,最近使用浮于栈顶,*,*,栈底换出,栈顶进入,*,*,81,4.8.3 Clock置换算法,1、简单的Clock置换算法,图 4-31 简单Clock置换算法的流程和示例,队列循环搜索,访问位0,换出,访问位1,置0,*,*,*,(最近未用算法NRU),82,2、改进型Clock置换算法,由访问位A和修改位M可以组合成下面四种类型的页面:1类(A=0, M=0):表示该
22、页最近既未被访问, 又未被修改, 是最佳淘汰页。2类(A=0, M=1):表示该页最近未被访问, 但已被修改, 并不是很好的淘汰页。3类(A=1, M=0) :最近已被访问, 但未被修改, 该页有可能再被访问。4类(A=1, M=1):最近已被访问且被修改, 该页可能再被访问。,83,补充内容:,1、缺页率对有效访问时间的影响,(1)有效访问时间:,(2)缺页中断时间:,* 缺页中断服务时间,* 缺页读入时间,* 恢复执行时间,寻道时间,旋转时间,数据传送时间,2、工作集,3、抖动,及其产生的原因和预防方法,84,Work set changes as time passes but stab
23、ilizes after,k (most recent references),The Working Set Algorithm,85,4.9 请求分段存储管理方式,data,stack,code,Physical memory,Virtual memory segment 1,Virtual memory segment 3,Virtual memory segment 0,6ff 0,4ff 0,fff 0,46ff 4000,2fff 2000,4ff 0,86,4.9 请求分段存储管理方式,4.9.1 请求分段中的硬件支持,1、 段表机制,87,2、 缺段中断机构,图 4-32 请求
24、分段系统中的中断处理过程,88,3、 地址变换机构,图 4-33 请求分段系统的地址变换过程,89,4.9.2 分段的共享与保护,1、共享段表,图 4-34 共享段表项,(1)共享段的分配,(2)共享段的回收,段信息,共享进程信息,90,3、分段保护,(1)越界检查 (2)存取控制检查 (3)环保护机构 一个程序可以访问驻留在相同环或较低特权环中的数据。 一个程序可以调用驻留在相同环或较高特权环中的服务。,91,图 4-35 环保护机构,(3)环保护机构,92,第四章 存储器管理,* 了解程序装入和链接的基本过程;,* 了解内存分配的概念,及常用分区分配方式;,* 理解页式、段式管理的基本原理和方法;,* 理解虚拟存储器的基本概念,及实现方式;,* 掌握常用页面置换算法。,93,question ?,本章习题:,第四章 存储器管理,1、2、3、5、6、7、9、10、11、15、17、18、19、21、26、27,