第四章存储器管理第0节存储管理概述一、存储器的层次结构1、在现代计算机系统中,存储器是信息处理的来源与归宿,占据重要位置。
但是,在现有技术条件下,任何一种存储装置,都无法从速度、容量、是否需要电源维持等多方面,同时满足用户的需求。
实际上它们组成了一个速度由快到慢,容量由小到大的存储装置层次。
2、各种存储器•寄存器、高速缓存Cache:少量的、非常快速、昂贵、需要电源维持、CPU可直接访问;•内存RAM:若干(千)兆字节、中等速度、中等价格、需要电源维持、CPU可直接访问;•磁盘高速缓存:存在于主存中;•磁盘:数千兆或数万兆字节、低速、价廉、不需要电源维持、CPU 不可直接访问;由操作系统协调这些存储器的使用。
二、存储管理的目的1、尽可能地方便用户;提高主存储器的使用效率,使主存储器在成本、速度和规模之间获得较好的权衡。
(注意cpu和主存储器,这两类资源管理的区别)2、存储管理的主要功能:•地址重定位•主存空间的分配与回收•主存空间的保护和共享•主存空间的扩充三、逻辑地址与物理地址1、逻辑地址(相对地址,虚地址):用户源程序经过编译/汇编、链接后,程序内每条指令、每个数据等信息,都会生成自己的地址。
●一个用户程序的所有逻辑地址组成这个程序的逻辑地址空间(也称地址空间)。
这个空间是以0为基址、线性或多维编址的。
2、物理地址(绝对地址,实地址):是一个实际内存单元(字节)的地址。
●计算机内所有内存单元的物理地址组成系统的物理地址空间,它是从0开始的、是一维的;●将用户程序被装进内存,一个程序所占有的所有内存单元的物理地址组成该程序的物理地址空间(也称存储空间)。
四、地址映射(变换、重定位)当程序被装进内存时,通常每个信息的逻辑地址和它的物理地址是不一致的,需要把逻辑地址转换为对应的物理地址----地址映射;地址映射分静态和动态两种方式。
1、静态地址重定位是程序装入时集中一次进行的地址变换计算。
物理地址= 重定位的首地址+ 逻辑地址•优点:简单,不需要硬件支持;•缺点:一个作业必须占据连续的存储空间;装入内存的作业一般不再移动;不能实现虚拟存储。
2、动态地址重定位:在程序执行的过程中,每当Cpu访问一个内存地址之前对要访问的地址进行地址变换计算。
•优点:一个作业可以使用非连续存储空间;能实现虚拟存储;有利于程序段的共享。
•缺点:需要硬件支持。
五、存储分配与回收在程序运行开始时、运行过程中,OS根据一定的存储管理方法,在内存中为程序及其数据找到合适的位置,将它们装入内存;程序运行结束后,OS收回程序释放的内存资源,并进行适当的整理,以便再分配给其他的程序使用。
六、存储保护为多道并发程序共享内存提供保障,使在内存中的各道程序“各行其道”,只能访问属于自己的区域(自己的物理地址空间),避免各道程序间相互干扰,特别是当一道程序发生错误时,不致于影响其他程序的运行。
通常由硬件完成保护功能,由软件辅助实现。
存储保护可以实现:•保护系统程序区不被用户侵犯(有意或无意的);•不允许用户程序读写不属于自己地址空间的数据(系统区地址空间、其他用户程序的地址空间)。
存储保护的过程:每个进程都有自己独立的进程空间。
如果一个进程在运行时所产生的要访问的地址在其地址空间之外,称为发生了地址越界。
每当程序要访问某个内存单元时,由硬件检查是否允许,如果允许则执行,否则产生地址越界中断,由操作系统进行相应处理。
七、存储共享•内存共享:多道环境中,两个或多个并发进程共用内存中相同区域。
•目的:节省内存空间,提高内存利用率,实现进程通信(数据共享)。
•共享内容:代码共享(要求代码为纯代码);数据共享。
八、存储“扩充”为了给大作业提供方便,由OS把内存和外存统一管理起来,实现自动覆盖。
当一个大作业在执行时,有一部分逻辑地址空间的内容在内存,另一部分在外存。
当要访问的信息不在内存时,由os(而不是程序员安排的I/O指令)自动把它们从外存调入内存。
从效果上看,这样的os好象为这个用户作业提供了一个容量比实际内存大的存储器,从而实现了存储“扩充”。
扩充后的存储器称为虚拟存储器。
九、存储管理方法1、连续分配方式(1) 单一连续存储区管理(单道环境下)(2) 分区式存储管理2、离散分配方式(1) 分页式存储管理(2) 分段式存储管理(3) 段页式存储管理3、实现虚拟存储的分配方式主要是一些请求式的分配方式,如请求分页式存储管理、请求分段式存储管理等。
对于以上每一种存储管理方法我们应该掌握:•基本原理(思想方法)•存储管理使用的数据结构•逻辑地址的格式•地址变换的方式•存储的分配和回收过程•特点(优、缺点)第一节程序的装入(和链接)一、程序的装入就是OS的装入程序(Loader)将用户程序的装入模块装入内存。
1、绝对装入方式编译时产生绝对地址的目标代码。
程序被装入内存后,逻辑地址与实际装入的内存地址完全相同,故执行过程中,不需对指令和数据进行地址变换。
程序中所使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。
但在由程序员直接给出绝对地址时,不仅要求程序员熟悉内存的使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。
因此,通常是宁可在程序中采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。
2、可重定位装入方式编译时产生相对地址的目标代码。
程序被装入内存时,进行地址变换,然后在访问时直接取指令和数据。
3、动态运行时装入方式编译时产生相对地址的目标代码。
程序被装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。
当要对一条指令或一个数据进行访问时,才对它的地址进行转换。
因此,装入内存后的所有地址都仍是相对地址。
第二节连续分配存储管理方式一、单一连续分配1、基本原理把内存分为系统区和用户区两部分,系统区提供给OS使用(通常是内存的低址部分);用户区(指除系统区以外的全部内存空间)提供给用户使用。
用户区是一个连续的存储区,每次装入一道用户作业,整个系统的用户空间被一道用户作业独占。
2、存储分配和回收过程如下图所示的主存分配与回收法。
并且由装入程序进行静态地址重定位,检查其绝对地址是否超越,即可达到保护系统的目的。
工作流程:3、特点:•存储管理简单,只适用于单道环境•内存利用率很低•程序的运行受主存容量限制•基本不需要管理的数据结构二、固定分区分配固定分区式存储管理是满足多道程序的最简单的存储管理方案。
它的基本思想是:将内存的用户区划分成若干个固定的空间,称为分区。
当程序到达时,由系统给它分配一个适当大小的分区,将程序和数据连续存入,使进程得以并发执行。
每个分区只能存储一个程序,而且程序也只能在它所驻留的分区中运行;作业的逻辑地址空间是线性的,物理地址空间是连续的;主要采用静态地址重定位方式进行地址变换。
1、基本原理系统生成时,把可分配的主存储器空间分割成若干个区域,每个区域称为一个分区(每个分区的内部是连续的)。
每个分区的大小可以相同也可以不同,但分区大小固定不变,每个分区能装一个且只能装一个作业。
P27-282、管理使用的数据结构分区说明表:记录系统中的现有内存分区及其使用状态。
3、存储分配与回收过程当有一个用户作业要装入时,由OS检索分区说明表,从中找一个大小能满足要求的、空闲的分区,将用户作业装入,并在分区说明表中将该分区的状态置为“已分配”;若没有找到大小足够的分区,则拒绝为该程序分配内存。
当一个用户作业完成后,由OS将其占有的分区收回,将该分区的状态改为“未分配”。
4、特点•可以支持多道程序运行•程序的运行受主存容量和分区大小限制•内存利用率仍很低三、动态分区分配1、基本思想系统在启动时,除了OS常驻内存部分占用的内存空间外,系统中只有一个空闲分区;当有作业要装入内存时,检索空闲分区表,找一个能满足作业要求的空闲分区,从中划出一个大小正好满足要装入作业要求的存储区,分配给这一作业,剩下的部分被作为一个新的空闲分区记录在空闲分区表中。
2、存储管理的数据结构(二选一)(1) 空闲区表--记录目前系统中每个空闲区的起始地址和长度;(2) 空闲分区链--将目前系统中的空闲分区按一定的顺序链接起来。
在每个分区的头、尾设置指向前后分区的指针,并记录本分区的一些分配控制信息。
系统设立一个链首指针,指向第一个空闲块。
3、存储分配与回收过程(1) 分配(2) 回收----会出现四种情况•回收区与它前面的一个空闲区相邻(a)•回收区与它后面的一个空闲区相邻(b)•回收区与它前、后的两个空闲区相邻(c)•回收区前后都没有相邻的空闲区当某一块归还后,要根据不同的情况,前后空间合并,再分别处理存储管理的数据结构。
4、存储分配的算法----空闲分区表或空闲分区链中分区排列顺序的组织方法(1) 首次适应算法:按空闲区首地址从低到高来组织空闲分区表或空闲分区链;每次分区时,总是从表头或链首开始扫描,找到第一个足够大的空白区分配。
(2) 循环首次适应算法(下次适应算法):类似首次适应法的数据组织。
每次分区时,总是从上次查找结束的地方开始扫描,找到一个足够大的空白区分配,并循环查找。
(3) 最佳适应算法:按空闲区容量大小从小到大来组织组织空闲分区表或空闲分区链。
每次分区时,总是从表头或链首开始扫描。
所以,接到内存申请时,会在空闲区中找到一个满足要求的最小空闲区进行分配。
(4) 最坏适应算法:与最佳适应法相反,它在作业选择存储块时,总是寻找一个满足要求的最大的空闲分区。
讨论以上算法的优缺点….6、动态分区方式中的“碎片”问题经过一段时间的分配回收后,内存中会出现很多很小的空闲块。
它们每一块都较小,不足以满足一般作业的分配要求;但其容量总和却有着相当的规模。
这些空闲块被称为碎片。
碎片的存在造成了存储资源的浪费。
解决办法:碎片整理,通过在内存移动程序,将所有小的空闲区域合并为大的空闲区域。
问题:系统开销大(?)。
四、可重定位分区1、动态重定位引入的原因在动态分区分配中,“碎片”整理,是定时进行或在存储回收时进行的,所有用户程序的存储分区都要进行改动,并重新进行静态地址重定位。
这样的“碎片”整理工作将花费较多的系统开销。
2、动态重定位分区分配处理流程可重定位分区分配,与动态分区方法基本相同,但它的碎片拼接是在存储分配时进行的,以满足新作业需求为目的,并采用动态地址重定位。
五、对换(交换)技术“对换”引入的原因:P58所谓“对换”,是指系统允许在一个作业已经进入内存执行的过程中,仍能把它调出内存、再调入内存。
把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。