1、What OS has taught meChapter four1.存储器的层次结构主存储器:保存进程运行时的程序和数据寄存器;访问速度最快、容量小、价格昂贵;位于 CPU 内,暂存指令、地址、数据等高速缓存:容量大于寄存器,速度快于主存;利用程序执行的局部性原理,经主存中经常要用到的信息存放在高速缓存中,减少访问主存的次数。磁盘缓存:将频繁使用的磁盘数据暂时存放在磁盘缓存中,可以减少访问磁盘的次数2.程序的装入和链接·绝对装入方式:目标模块采用绝对地址。即逻辑地址和实际内存地址完全相同,装入时不需对地址进行变换。特点:适用于单道环境。·可重定位装入方式多道环境下,采用静
2、态地址变换静态地址变换:又称静态地址重定位,地址变换在程序装入时一次完成,以后不再改变。特点:不需硬件支持,但程序运行时不能在内存移动,程序需要连续存储空间,难以共享。·动态运行时装入方式把地址转换推迟到程序真正要执行时才进行。因此, 装入内存后的所有地址都仍是相对地址。 特点:需要硬件支持。程序可以在内存中移动,可以实现虚拟存储。·静态链接程序运行前,先将各目标模块以及它们所需的库函数,链接成一个完整的装入模块,不在拆开。·装入时动态链接在装入时采用边装入边链接的方式装入。优点:便于修改和更新;便于实现目标模块共享·运行时动态链接对模块的链接推迟到程序
3、执行时才去进行链接。优点:加快装入过程;节省内存空间3.连续分配方式连续分配方式,是指为一个用户程序分配一个连续的内存空间单一连续分配,固定分区分配,动态分区分配,动态重定位分配·单一连续分配把内存分为系统区和用户区两部分,系统区仅提供给 OS 使用,通常是放在内存的低址部分;用户区是指除系统区以外的全部内存空间, 提供给用户使用最简单,适用于单用户、单任务的 OS·固定分区分配将内存分为若干个固定大小的分区 分区大小可以相等或不等有两个固定:各分区的大小;总分区的个数优点:是最早采用,也是最简单的多道程序存储管理方式。缺点:预先规定了分区大小,大程序无法装入。预先限制了活
4、跃进程的最大数。主存的利用率不高:每个分区的作业不可能恰好占满该区,剩余的部分空间又不能为其它作业利用。碎片问题(内碎片)内存的扩充和共享是困难的。数据结构:分区使用表·动态分区分配【可变分区分配】有两个可变:总分区的大小;总分区的个数数据结构:空闲分区表或空闲分区链优点:相对灵活,没有固定分区中程序数目的限制和程序大小的限制。缺点:每道程序总是要求占用主存的连续存储区域,主存中会产生许多碎片(外碎片)常用的动态分区管理的分配算法首次适应算法(最先适应算法):优先利用内存低地址端,高地址端有大空闲区。但低地址端有许多小空闲分区时会增加查找开销。 【空闲分区按地址递增的次序排列顺序找到
5、第一个能满足要求的空闲分区】循环首次适应算法(下次适应算法):使存储空间的利用更加均衡,但会使系统缺乏大的空闲分区 【空闲分区按地址递增的次序排列从上次的下一个开始找起,其他同第一个】最佳适应算法:保留了大的空闲区。但分割后的剩余空闲区很小。 【空闲分区按容量大小递增的次序排列顺序找到第一个能满足要求的空闲分区】最坏适应算法:分区分配之后剩下的空闲区域(新空闲区)比较大,但当大作业到来时,其存储空间的申请往往得不到满足。 【空闲分区按容量大小递减的次序排列】分区回收回收分区 r 上邻接一个空闲分区:此时应将回收区 r 与上邻接分区 F1 合并成一个连续的空闲区。合并分区的首地址为空闲区 F1
6、的首地址,其大小为二者之和。 【总的空闲分区数不变】回收分区 r 下邻接一个空闲分区:此时应将回收区 r 与下邻接分区 F2 合并成一个连续的空闲区。合并分区的首地址为回收分区 r 的首地址,其大小为二者之和。 【总的空闲分区数不变】回收分区 r 上下邻接空闲分区:此时应将回收区 r 与上、下邻接分区合并成一个连续的空闲区。合并分区的首地址为与 r 上邻接空闲区 F1 的首地址,其大小为三者之和,且应将与r 下邻接的空闲区 F2 从空闲分区表(或空闲分区链)中删去。 【总数少一】回收分区 r 不与任何空闲分区相邻:单独建立一个新表项 【总数加一】·伙伴系统优点:固定分区存储管理限制了
7、内存中的进程数,动态分区的拼接需要大量时间,而伙伴系统是一种较为实用的动态存储管理办法。缺点:分配和回收时需要对伙伴进行分拆及合并,增加了系统开销。 (好于拼接)存储空间有浪费。·可重定位分区分配连续分配方式存在碎片问题内部碎片是指分配给作业的存储空间中未被利用的部分外部碎片是指系统中无法利用的小存储块。解决碎片问题拼接:解决碎片问题的办法之一,即通过移动内存中的进程,把多个分散的小分区拼接成一个大分区,也可称为紧缩或紧凑。缺点是要耗费大量处理机时间。拼接的时机:每次回收分区时拼接。只有一个空闲区,但拼接频率过高增加系统开销。找不到足够大的空闲区且系统空闲空间总量能满足要求时拼接。拼
8、接频率小于前者,空闲区管理稍复杂。也可以只拼接部分空闲区。·动态重定位:拼接后程序在内存的位置发生变化,因此需要动态重定位技术支持。与动态分区分配算法基本相同,差别只是这种分配算法中增加了紧凑的功能4.对换“整体对换” (以进程为单位)和“部分对换” (以页或段为单位)对换是提高内存利用率的有效措施·进程的换出。 内存紧张,系统应将某进程换出。 系统首先选择处于阻塞状态且优先级最低的进程作为换出进程。 ·进程的换入。 系统应定时地查看所有进程的状态,从中找出“就绪”状态但已换出的进程,将其中换出时间(换出到磁盘上)最久的进程作为换入进程,将之换入。 5.基本分页存
9、储管理分页式存储管理允许把一个作业存放到若干不相邻接的分区中免去移动信息、充分利用主存空间·页:将进程的逻辑地址空间划分成若干大小相等的页(或称页面)页面大小在 512B 到 8KB 之间·块:将主存空间也划分成与页大小相等的块 (或称物理块、页框)在为进程分配存储空间时,总是以块为单位来分配·页表:记录页面在内存中对应物理块的数据结构。 (页表一般存放在内存中)·地址变换机构:地址变换机构的任务是实现逻辑地址到物理地址的变换,即将逻辑地址中的页号转换为内存中的物理块号。例题:页面大小为 L,逻辑地址 A 的页号为 P,页内地址为 d,P 对应的物理块号
10、为 F,那么 A 对应的物理地址F×Ld。基本地址变换机构:页表通常存放在内存中,为了实现方便,系统中设置了一个页表寄存器存放页表在内存的起始地址和页表的长度。进程未执行时,页表的起始地址和长度存放在 PCB 中。当进程执行时,才将页表始址和长度存入页表寄存器中。快表:由于成本关系,快表大小一般由 15512 个表项组成。由于局部性原理,联想存储器的命中率可达 90% 以上。两级页表:将页表再分页,使每页与内存物理块大小相同,并为它们进行编号 0、1、,同时还为离散存放的页表建立一张页表,称为外层页表。但多级页表会影响效率。如二级页表地址变换需三次访问主存,一次访问一级页表、一次访问
11、二级页表、一次访问指令或数据,访问时间加了两倍。6.分段存储管理方式分段存储管理方式的引入为了满足用户和程序员下列的一系列需求:方便编程、信息共享、信息保护、动态增长、动态链接段与段之间离散,段内是连续的。段表:为每个进程建立一个段表,用来记录每段在内存的起始地址及相关信息。其中每个表项描述一个分段的信息,至少包含:段号、段长、段在内存的起始地址、其他信息段表一般存放在内存。地址变换机构:为实现从逻辑地址到物理地址的转换,在系统中设置了段表寄存器,用于存放段表始址和段表长度。为了提高内存的访问速度,也可以使用快表。 (与页表类似)分段&分页:页是信息的物理单位,是为了减少内存碎片及提高
12、内存利用率, 是系统管理的需要 。段是信息的逻辑单位,它含有一组意义相对完整的信息, 分段的目的是为了更好地满足用户的需要。页的大小固定且由系统决定 ,由硬件把逻辑地址划分为页号和页内地址两部分。 段的长度不固定且由用户所编写的程序决定 ,通常由编译系统在对源程序进行编译时根据信息的性质来划分。分页系统中作业的地址空间是 一维 的,分段系统中作业的地址空间是 二维 的。·信息共享分段是信息的逻辑单位,因而实现共享比分页系统方便。在分页存储管理系统中,信息的共享是通过使多个进程页表项指向同一个物理块来实现的。在分段存储管理系统中,信息的共享是通过使多个进程的段表项指向同一内存区域实现的
13、。·可重入代码可重入代码又称为纯代码,是允许多个进程同时访问的代码。可重入代码在执行中不能修改7.段页式存储管理方式分页系统能有效地提高内存利用率,而分段系统能很好地反映用户要求。如果将这两种存储管理方式结合起来,就形成了段页式存储管理系统实现机理:作业的地址空间首先被分成若干个逻辑分段,然后再将每一段分成若干个大小固定的页面。为实现地址变换,需要:段表:记录了每一段的页表始址和页表长度页表:记录了逻辑页号与内存块号的对应关系(每一段有一个,一个程序可能有多个页表)硬件支持:段表寄存器,其中存放作业的段表起始地址和段表长度在段页式系统中,要想存取访问信息,需要三次访问内存:第一次访问段表 第二次访问页表 第三次访问信息为了提高访问主存的速度,应考虑使用联想寄存器。 虚拟存储器虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。理论基础是局部性原理是指程序在执行过程中一个较短时间内,程序所执行的指令地址和操作数地址分别局限于一定区域内