1、计算机操作系统 Computer Operating Systems,Institute of Systems Engineering Southeast University Autumn, 2011,主讲教师: 李四杰 ,课程主要内容,操作系统引论(1章) 进程管理(2-3章) 存储管理(4章) 设备管理(5章) 文件管理(6章) 操作系统接口(7章) 系统安全性(9章) *分布式操作系统,第4章 存储器管理,存储器的层次结构:,Cache,主存,磁盘,第4章 存储器管理,高速缓存Cache 少量的、非常快速、昂贵、易变的 内存RAM 若干兆字节、中等速度、中等价格、易变的 磁盘 数百兆或
2、数千兆字节、低速、价廉、不易变的,第4章 存储器管理,由操作系统协调这些存储器的使用 重要性 直接存取要求内存速度尽量快到与CPU取指速度相匹配,大到能装下当前运行的程序与数据,否则CPU执行速度就会受到内存速度和容量的影响而得不到充分发挥,第4章 存储器管理,内存 是由存储单元(字节或字)组成的一维连续的地址空间,简称内存空间。用来存放当前正在运行程序的代码及数据,是程序中指令本身地址所指的、亦即程序计数器所指的存储器 内存可以分为 系统区:用于存放操作系统 用户区:用于装入并存放用户程序和数据,第4章 存储器管理,存储管理的主要任务 为多道程序的运行提供良好的环境 方便用户使用存储器 提高
3、存储器的利用率以及从逻辑上扩充存储 存储管理应具有功能 实现内存的分配和回收 地址变换 “扩充”内存容量 进行存储保护,第4章 存储器管理,4.1程序的装入和链接 4.2 连续分配存储管理方式 4.3 基本分页存储管理方式 4.4 基本分段存储管理方式,4.5 虚拟存储器的基本概念 4.6 请求分页存储管理方式 4.7 页面置换算法 4.8 请求分段存储管理方式 UNIX系统中存储器管理,本章作业,4.1 程序的装入和链接,用户源程序内存可执行程序: 编译:由编译程序将用户源程序编译成若干个目标模块 链接:由链接程序将目标模块和相应的库函数链接成装入模块 装入:由装入程序将装入模块装入内存,在
4、外存,在内存,4.1 程序的装入和链接,程序的装入 绝对装入方式 可重定位装入方式 动态运行时装入方式 程序的链接 静态链接 装入时动态链接 运行时动态链接,返回目录,1、绝对装入方式,在编译时,如果知道程序将驻留在内存的什么位置,那么,编译程序将产生绝对地址的目标代码 绝对装入程序按照装入模块中的地址,将程序和数据装入内存;装入模块被装入内存后,由于程序中的逻辑地址与实际内存中的地址完全相同,故不需对程序和数据的地址进行修改 该装入方式只适用于单道程序环境,2、可重定位装入方式,重定位:由于一个作业装入到与其地址空间不一致的存储空间所引起的,需对其有关地址部分进行调整的过程就称为重定位(实质
5、是一个地址变换过程/地址映射) 根据地址变换进行的时间及采用技术手段不同,可分为静态重定位和动态重定位两类,基本概念,逻辑地址(相对地址,虚地址) 用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0,其余指令中的地址都相对于首地址而编址 不能用逻辑地址在内存中读取信息 物理地址(绝对地址,实地址)内存中存储单元的地址,可直接寻址 地址转换(地址映射) 为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射,原因:当程序装入内存时, 操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地
6、址与分配到内存物理地址不一致, 而CPU执行指令时是按物理地址进行的,所以要进行地址转换,基本概念,静态地址转换(静态重定位) 当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换 一般在装入内存时由软件完成 动态地址转换(动态重定位) 在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射,一般为了提高效率,此工作由硬件地址映射机制来完成:硬件支持,软硬件结合完成) 硬件上需要一对寄存器的支持,2、可重定位装入方式,可重定位装入方式:事先不知用户程序在内存的驻留位置,装入程序在装入时根据内存的实际情况把相对地址(逻辑地址)转换为绝对地址,装入到适当的位
7、置(在装入时进行地址转换) 用于多道程序环境,3、动态运行装入方式,如果事先不知用户程序在内存的驻留位置,为了保证程序在运行过程中,它在内存中的位置可经常改变。装入程序把装入模块装入内存后,并不立即把装入模块中相对地址转换为绝对地址,而是在程序运行时才进行 这种方式需一个重定位寄存器来支持(在程序运行过程中进行地址转换),返回,装入内存后的所有地址都仍然是相对地址。,二、程序的链接,1、静态链接方式(Static Linking) 是一种事先链接方式,即在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块(执行文件),以后不再拆开 实现静态链接应解决的问题 (1)相对地址
8、的修改 (2)变换外部调用符号 存在问题 (1)不便于对目标模块的修改和更新 (2)无法实现对目标模块的共享,静态链接方式,图 4-3 程序链接示意图,二、程序的链接,2、装入时动态链接方式(Load-time Dynamic Linking) 将一组目标模块在装入内存时边装入边链接的方式,具有便于修改和更新、便于实现对目标模块的共享 存在问题:由于程序运行所有可能用的目标模块在装入时均全部链接在一起,所以会把一些不会运行的目标模块也链接进去,如程序中的错误处理模块 3、运行时动态链接方式 在程序运行中需要某些目标模块时,才对它们进行链接的方式,具有高效且节省内存空间的优点,返回,4.2 连续
9、分配存储管理方式,连续分配方式:指为一个用户程序分配一片连续的内存空间 单一连续分配方式 固定分区分配方式 动态分区分配方式 动态重定位分区分配方式 分区的存储保护 覆盖与交换,返回目录,4.2.1 单一连续分配方式(单独分区分配),存储管理方法 将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用) 采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存 最简单的一种存储管理方式,但只能用于单用户、单任务的OS中,4.2.1 单一连续分配方式,主要特点:管理简单,只需小量的软件和硬件支持,便于用户了解和使用 但内存中只装入一道作业运行,内存空间浪费大,各
10、类资源的利用率也不高,4.2.1 单一连续分配方式,例:一个容量为256KB的内存,操作系统占用32KB,剩下224KB全部分配给用户作业,如果一个作业仅需64KB,那么就有160KB的存储空间被浪费。,0KB 32KB96KB256KB-1,分配给用户的空间,返回,4.2.2 固定分区分配方式,是最早使用的一种可运行多道程序的存储管理方法 存储管理方法 内存空间的划分:将内存空间划分为若干个固定大小的分区,除OS占一区外,其余的一个分区装入一道程序。分区的大小可以相等,也可以不等,但事先必须确定,在运行时不能改变 系统需建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态
11、(已分配或未分配),固定分区分配方式示意图,图 4-4 固定分区使用表,分区号,起始地址,长度,状态,进程名,4.2.2 固定分区分配方式,内存分配 当用户程序装入内存时,由内存分配程序检索分区说明表,找出满足要求的尚未分配的分区分配该程序,修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存 程序执行完毕,释放占用分区,管理程序将修改说明表中相应分区的状态为未分配,实现内存资源的回收 主要特点 管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费,所以主存的利用率不高,例:在某系统中,采用固定分区分配管理方式,内存分区(单位:字节)情况如图所示
12、,现有大小为1K、9K、33K、121K的多个作业要求进入内存,试画出它们进入内存后的空间分配情况,并说明主存浪费多大?,(2)分区说明表,(2)分区说明表,(3)主存浪费空间=(8-1)+(32-9)+(120-33)+(331-121)=327(k),解:根据分区说明表,将4个分区依次分配给4个作业,同时修改分区说明表,其内存分配和分区说明表如下所示:,返回,4.2.3 动态分区分配方式,动态分区分配又称为可变式分区分配,是一种动态划分存储器的分区方法 存储管理方法 内存不是预先划分好的 作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配 若有足够的空间,则按需要分割一部分分区给
13、该进程,否则令其等待内存空间,4.2.3 动态分区分配方式,主要特点 管理简单,只需少量的软件和硬件支持,便于用户了解和使用 进程的大小与某个分区大小相等,从而主存的利用率有所提高,1、分区分配中的数据结构,空闲分区表 用来登记系统中的空闲分区(分区号、分区起始地址、分区大小及状态) 空闲分区链 用链头指针将系统中的空闲分区链接起来,构成空闲分区链,每个空闲分区的起始部分存放相应的控制信息(如大小、指向下一空闲分区的指针等),2、分区分配算法,为了将一个作业装入内存,应按照一定的分配算法从空闲分区表(链)中选 出一个满足作业需求的分区分配给作业,如果这个空闲分区的容量比作业申请的空间要大,则将
14、该分区一分为二,一部分分配给作业,剩下的部分仍然留在空闲分区表(链)中,同时修改空闲分区表(链)中相应的信息 目前常用分配算法有: 首次适应算法(First-Fit) 循环首次适应算法(Next-Fit) 最佳适应算法(Best-Fit) 最坏适应算法(Worst-Fit),前进,首次适应算法(最先适应算法),算法 空闲分区(链)按地址递增的次序排列 在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止 然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表(链)中,空闲分区表,解:按首次适应算法,申请作业100k,分
15、配3号分区,剩下分区为20k,起始地址160K ;申请作业30k,分配1号分区,剩下分区为2k,起始地址50K ;申请作业7k,分配2号分区,剩下分区为1k,起始地址59K。其内存分配图及分配后空闲分区表如下:,例 :系统中的空闲分区表如下表示,现有三个作业分配申请内存空间100K、30K及7K,给出按首次适应算法的内存分配情况及分配后空闲分区表。,(2)该算法分配后的空闲分区表,首次适应算法的特点优先利用内存低地址部分的空闲分区,从而保留了高地址部分的大空闲区。但由于低地址部分不断被划分,致使低地址端留下许多难以利用的很小的空闲分区(碎片),而每次查找又都是从低地址部分开始,增加了查找可用空
16、闲分区的开销,返回,循环首次适应算法,算法 又称为下次适应算法,由首次适应算法演变而来 在为作业分配内存空间时,不再每次从空闲分区表/链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足其大小要求的空闲分区为止 然后,再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表/链中,空闲分区表,解:按循环首次适应算法,申请作业100k,分配3号分区,剩下分区为20k,起始地址160K;申请作业30k,分配4号分区,剩下分区为301k,起始地址210K ;申请作业7k,分配1号分区,剩下分区为25k,起始地址27K 。其内存分配图及分配
17、后空闲分区表如下:,例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按循环首次适应算法的内存分配情况及分配后空闲分区表。,(2)该算法分配后的空闲分区表,返回,算法特点:使存储空间的利用更加均衡,不致使小的空闲区集中在存储区的一端,但这会导致缺乏大的空闲分区。,最佳适应算法,算法 空闲分区表/链按容量大小递增的次序排列 在进行内存分配时,从空闲分区表/链的首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止 按这种方式为作业分配内存,能把既满足作业要求又与作业大小最接近的空闲分区分配给作业。如果该空闲分区大于作业的大小,则与首次适应算法相同,将剩余空
18、闲分区仍留在空闲分区表/链中,例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按最佳适应算法的内存分配情况及分配后空闲分区表。,分配前的空闲分区表,解:按最佳适应算法,分配前的空闲分区表如上表。申请作业100k,分配3号分区,剩下分区为20k,起始地址160K;申请作业30k,分配2号分区,剩下分区为2k,起始地址50K ;申请作业7k,分配1号分区,剩下分区为1k,起始地址59K 。其内存分配图及分配后空闲分区表如下:,1)作业100K分配后的空闲分区表,2)作业30K分配后的空闲分区表,3)作业7K分配后的空闲分区表,(2) 分配后的空闲分区表,返回,
19、算法特点若存在与作业大小一致的空闲分区,则它必然被选中,若不存在与作业大小一致的空闲分区,则只划分比作业稍大的空闲分区,从而保留了大的空闲分区。但空闲区一般不可能正好和它申请的内存空间大小一样,因而将其分割成两部分时,往往使剩下的空闲区非常小,从而在存储器中留下许多难以利用的小空闲区(碎片或零头)。,最坏适应算法,算法 空闲分区表/链按容量大小递减的次序排列 在进行内存分配时,从空闲分区表/链的首开始顺序查找,直到找到第一个比之大的空闲分区为止,剩下的空闲仍留在空闲分区表/链中,空闲分区表,例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按最坏适应算法的内
20、存分配情况及分配后空闲分区表。,解:按最坏适应算法,分配前的空闲分区表如上表。申请作业100k,分配1号分区,剩下分区为231k,起始地址280K;申请作业30k,分配1号分区,剩下分区为201k,起始地址310K ;申请作业7k,分配1号分区,剩下分区为194k,起始地址317K 。其内存分配图及分配后空闲分区表如下:,1)作业100K分配后的空闲分区表,2)作业30K分配后的空闲分区表,3)作业7K分配后的空闲分区表,(2) 分配后的空闲分区表,返回,算法特点总是挑选满足作业要求的最大的分区分配给作业。这样使分给作业后剩下的空闲分区也较大,可装下其它作业。但由于最大的空闲分区总是因首先分配
21、而划分,当有大作业到来时,其存储空间的申请往往会得不到满足。,3、分区分配操作_分配内存和回收内存,分配内存 系统利用某种分配算法,从空闲分区表/链中找到所需大小的分区 分区的切割 设请求的分区大小为u.size,空闲分区的大小为m.size 若m.size-u.sizesize(size是事先规定的不再切割的剩余分区的大小),说明多余部分大小可不再切割,将整个分区分配给请求者 否则,从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区表/链中,然后将分配区的首址返回给调用者,3、分区分配操作_分配内存和回收内存,回收分区与已有空闲分区的相邻 回收分区上邻接一个空闲分区,
22、合并后首地址为空闲分区的首地址,大小为二者之和 回收分区下邻接一个空闲分区,合并后首地址为回收分区的首地址,大小为二者之和 回收分区上下邻接空闲分区,合并后首地址为上空闲分区的首地址,大小为三者之和 回收分区不邻接空闲分区,这时在空闲分区表中新建一表项,并填写分区大小等信息,内存回收情况,返回,4.2.4 可重定位分区分配方式,1、碎片问题 在分区存储管理方式中,必须把作业装入到一片连续的内存空间,如果系统中有若干个小的分区,其总容量大于要装入的作业,但由于它们不相邻接,也将致使作业不能装入内存 造成存储资源的浪费 例 :如图所示系统中有四个小空闲分区,并不相邻,但总容量为90KB,如果现有一
23、作业要求分配40KB的内存空间,由于系统中所有空闲分区的容量均小于40KB,故此作业无法装入内存,4.2.4 可重定位分区分配方式,内部碎片:指分配给作业的存储空间中未被利用的部分,如固定分区中存在的碎片 外部碎片:指系统中无法利用的小的空闲分区,如动态分区中存在的碎片,4.2.4 可重定位分区分配方式,2、碎片问题的解决方法 将内存中所有作业移到内存一端(作业在内存中的位置发生了变化,这就必须对其地址加以修改或变换即称为重定位),使本来分散的多个小空闲分区连成一个大的空闲区,这种通过移动作业从把多个分散的小分区拼接成一个大分区的方法称为拼接或紧凑或紧缩 拼接时机 分区回收时 当找不到足够大的
24、空闲分区且总空闲分区容量可以满足作业要求时,4.2.4 可重定位分区分配方式,动态重定位分区分配技术 在动态分区分配算法中增加拼接功能,在找不到足够大的空闲分区来满足作业要求,而系统中总空闲分区容量可以满足作业要求时,进行拼接,返回,4.2.4 可重定位分区分配方式,可重定位分区分配方式主要特点 可以充分利用存储区中的“零头/碎片”,提高主存的利用率 若“零头/碎片”大多,则拼接频率过高会使系统开销加大,4.2.5 分区的存储保护,存储保护是为了防止一个作业有意或无意地破坏操作系统或其它作业 1、界限寄存器方法上下界寄存器方法:用这两个寄存器分别存放作业的起始地址和结束地址。在作业运行过程中,
25、将每一个访问内存的地址都同这两个寄存器的内容比较,如超出这个范围便产生保护性中断 基址、限长寄存器方法:用这两个寄存器分别存放作业的起始地址和作业的地址空间长度。当作业执行时,将每一访问内存的相对地址和限长寄存器比较,如果超过了限长寄存器的值,则发出越界中断信号,并停止作业的运行,4.2.5 分区的存储保护,2、存储保护键方法 给每个存储块(大小相同,一个分区为整数倍存储块)分配一个单独的保护键,它相当于一把锁。进入系统的每个作业也赋予一个保护键,它相当于一把钥匙。当作业运行时,检查钥匙和锁是否匹配,如果不匹配,则系统发出保护性中断信号,停止作业运行,返回,4.2.6 覆盖与交换,覆盖与交换技
26、术是在多道程序环境下用来扩充内存的两种方法,覆盖技术主要用在早期的OS中,而交换技术则主要用在现代OS中 覆盖技术 覆盖技术主要用在早期的OS中(内存64KB),可用的存储空间受限,某些大作业不能一次全部装入内存,产生了大作业与小内存的矛盾 例:,4.2.6 覆盖与交换,把一个程序划分为一系列功能相对独立的程序段(覆盖),让执行时并不要求同时装入内存的覆盖组成一组(覆盖段),共享主存的同一个区域,从而解决在小的存储空间中运行大作业问题,这种内存扩充技术就是覆盖,4.2.6 覆盖与交换,交换/对换 交换技术也是“扩充”内存容量和提高内存利用率的有效措施,现代OS中广泛采用 最早用在MIT的兼容分
27、时系统CTSS中,任何时刻系统中只有一个完整的用户作业,当运行一段时间后,因时间片用完或等待某事件发生,系统就把它交换到外存上,同时把另一作业调入内存让其运行,这样,可以在内存容量不大的小型机上分时运行,早期的分时系统多采用这种交换技术,4.2.6 覆盖与交换,交换技术 将暂时不用的某个进程及数据(首先是处于阻塞状态优先级最低的)部分(或全部)从内存移到到外存(备份区或对换区,采用连续分配的动态存储管理方式)中去,让出内存空间,同时将某个需要的进程调入到内存中,让其运行 交换到外存的进程需要时可以被再次交换回(选择换出时间最久的)内存中继续执行,4.2.6 覆盖与交换,4.2.6 覆盖与交换,
28、交换与覆盖技术的区别 交换技术不要求程序员给出程序段之间的覆盖结构,交换主要在作业或进程之间进行 操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。覆盖技术主要在同一个作业或进程中进行,同时覆盖只能覆盖与覆盖程序段无关的程序段,返回,4.3 基本分页存储管理方式,连续分配存储管理方式产生的问题 在分区存储管理中,要求把进程放在一个连续的存储区中,因而会产生许多碎片 碎片问题的解决方法 拼接/紧凑技术:代价较高 离散分配方式:允许将作业/进程离散放到多个不相邻接的分区中,就可以避免拼接 分页式存储管理:离散分配的基本单位是页 分段式存储管理:离散分配的基本单位是段 段页式存储管理:离散分配
29、的基本单位是段/页,4.3 基本分页存储管理方式,返回目录,在分页存储管理方式中,如不具备页面对换功能,不支持虚拟存储器功能,在调度作业运行时,必须将它的所有页面一次调入内存,若内存没有足够的块,则作业等待,这种存储管理方式称为纯分页或基本分页存储管理方式 基本思想 页表 地址结构 地址变换机构 多级页表 页的共享与保护,4.3.1 基本思想,空间划分 将一个用户进程的地址空间(逻辑)划分成若干个大小相等的区域,称为页或页面,并为各页从0开始编号 内存空间也分成若干个与页大小相等的区域,称为(存储、物理)块或页框(frame),同样从0开始编号 内存分配 在为进程分配内存时以块为单位,将进程中
30、若干页装入到多个不相邻的块中,最后一页常装不满一块而出现页内碎片,页内碎片,注:需要CPU的硬件支持(地址变换机构),4.3.1 基本思想,页面大小:由地址结构(逻辑)决定 若页面较小: 减少页内碎片和内存碎片的总空间,有利于提高内存利用率 每个进程页面数增多,从而使页表长增加,占用内存就较大 页面换进换出速度将降低若页面较大: 每个进程页面数减少,页表长度减少,占用内存就较小 页面换进换出速度将提高 会增加页内碎片不利于提高内存利用率 页面大小:选择适中,通常为2的幂,一般在512B-8KB间,返回,4.3.2 页表,为了便于在内存找到进程的每个页面所对应块,系统为每个进程建立一张页面映象,
31、简称页表,如图 记录了页面在内存中对应的块号 页表一般存放在内存中 页表的基址及长度由页表寄存器给出 访问一个字节的数据/指令需访问内存2次(页表一次,内存一次),所以出现内存访问速度降低的问题,页号 块号,作业的地址空间,0 1 2 3 4 5 6 78 9,内存空间,页表,返回,4.3.3 地址结构,逻辑地址:地址长为32位,其中0-11位为页内地址,即每页的大小为212=4KB 12-31位为页号,地址空间最多允许有220 =1M页 物理地址:地址长为22位,其中0-11位为块内地址,即每块的大小为212=4KB,与页相等 12-21位为块号,内存地址空间最多允许有210 =1K块,4.
32、3.3 地址结构例题,例:设有一页式存储管理系统,向用户提供的逻辑地址空间最大为16页,每页2048B,内存总共有8个存储块,试问逻辑地址至少应为多少位?内存空间有多大? 解:(1)页式存储管理系统的逻辑地址为:其中页内地址表每页的大小即 2048B=2*1024B=211B,所以页内地址为11位;页号表最多允许的页数即 16页=24页,所以页号为4位。故逻辑地址至少应为15位。 (2)物理地址为:其中块内地址表每块的大小与页大小相等,所以块内地址也为11位;其中块号表内存空间最多允许的块数即 8块=23块,所以块号为3位。故内存空间至少应为14位,即214 =16KB。,返回,4.3.4 地
33、址变换机构,为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设置地址变换机构 基本的地址变换机构和具有快表的地址变换机构 地址变换机构的基本任务 实现逻辑地址向物理地址的转换(页号-块号) 地址变换借助页表来完成,4.3.4 地址变换机构,分页系统的基本地址变换机构如图所示,4.3.4 地址变换例题,例1:若在一分页存储管理系统中,某作业的页表如下表所示,已知页面大小为1024B,试将逻辑地址1011,2148,5012转化为相应的物理地址?画出其地址转换图。,4.3.4 地址变换例题,解:由题知逻辑地址为:物理地址为: (1)逻辑地址1011(十进制)的二进制表示为:
34、00 1111110011,由此可知逻辑地址1011的页号0,查页表知该页放在第2物理块中;其物理地址的二进制表示为:010 1111110011,所以逻辑地址1011对应的物理地址为0BF3H。其地址转换图如后所示。,地址变换过程,+,页表长度,页表始址,3F3,0,页表寄存器,逻辑地址1011(03F3H),物理地址0BF3H,越界中断,页合法,4.3.4 地址变换例题,4.3.4 地址变换例题,(2)逻辑地址2148(十进制)的二进制为:10 0001100100,由此可知逻辑地址2148的页号是2,查页表知该页放入物理块1中;其物理地址的二进制是:001 0001100100,所以逻辑
35、地址2148对应的物理地址是0464H。(3)逻辑地址5012(十进制)的二进制表示为:100 1110010100,可知该逻辑地址的页号为4,查页表知该页为不合法页,则产生越界中断。,4.3.4 地址变换机构:具有快表的地址变换机构,基本的地址变换机构存在的问题 地址变换速度降低(因页表放于内存中,CPU访问一个字节的数据需两次访问内存) 目的:为提高地址变换速度 快表(联想寄存器、联想存储器、TLB) 为一种特殊的高速缓冲存储器 内容: 页表中的一部分或全部内容 CPU产生逻辑地址的页号,首先在快表中寻找,若找到(命中)就找出其对应的物理块;若未找到(未命中),再到页表中找其对应的物理块,
36、并将之复制到快表 若快表中内容满,则按某种算法淘汰某些页,有效访问内存的时间T=PTLB*(TTLB+TM)+ (1-PTLB )*( TTLB + 2TM ) 其中,PTLB为快表的命中率,TTLB为快表的访问时间, TM为内存的访问时间,例: 有一页式系统,其页表存放在主存中。 (1)如果对主存的一次存取需要100ns,试问实现一次页面访问的存取时间是多少? (2)如果系统加有快表,对快表的一次存取需要20ns,若平均命中率为85%,试问此时的存取时间为多少? 解:(1)页表放主存中,则实现一次页面访问需2次访问主存,一次是访问页表,确定所存取页面的物理块,从而得到其物理地址,一次根据物理
37、地址存取页面数据。所以实现一次页面访问的存取时间为:100ns*2=200ns (2)系统加有快表,则实现一次页面访问的存取时间为:0.85*(20ns+100ns)+(1-0.85)*(20ns+2*100ns)=135ns,有效内存访问时间T例题,返回,4.3.5 多级页表,问题 若逻辑地址空间很大,则划分的页就很多,页表就很大,其占用的存储空间(要求连续)就大,实现较难 解决问题的方法 只将当前需用的部分页表项调入内存,其余的需用时再调入 级页表,0 1 2n,0121023,第 0 页 页 表,第 1 页 页 表,第 n 页 页 表,0121141151468,内存空间,外部页表,两级
38、页表结构,0121023,0121023,4.3.5 多级页表,二级页表 将页表再进行分页,并离散地将各个页表页面存放在不同的物理块中,同时也再建立一张页表(外层页表)用以记录页表页面对应的物理块号 逻辑地址,4.3.5 多级页表,二级页表 地址转换,4.3.5 多级页表,多级页表 将外层页表再进行分页,也将各外层页表页面离散地存放在不同的物理块中,再利用第2级的外层页表来记录它们之间的对应的关系 逻辑地址:,返回,4.3.6 页的共享与保护,共享代码(数据)的实现方法 由各进程共享的一段代码(数据),要求各进程相应的页存入内存相同物理块中,4.3.6 页的共享与保护,带来的问题 若共享数据与
39、不共享数据划在同一块中 有些不共享的数据也被共享,不易保密 计算共享数据的页内位移较困难 实现数据共享的最好方法: 段式存储管理 页的保护 页式存储管理系统提供了两种方式 地址越界保护 在页表中设置保护位(定义操作权限:只读,读写,执行等),返回,4.4 基本分段存储管理方式,分段存储管理方式的引入 分段系统的基本原理 共享与保护 段页式存储管理方式,返回目录,4.4.1 分段存储管理方式的引入,为了满足用户的一系列要求 方便编程:按逻辑关系分为若干个段,每个段从0开始编址,并有名字和长度,访问的逻辑地址由段名(段号)和段内偏移量(段内地址)决定 信息共享:共享是以信息的逻辑单位为基础的;页是
40、存储信息的物理单位,并无完整的意义,不便于实现贡献;然而段却是信息的逻辑单位 信息保护:保护也是以信息为逻辑单位进行 动态链接:动态链接以段为单位 动态增长:实际应用中,某些段(数据段)会不断增长,事先无法确切知道数据段会增长到多大,前面的存储管理方法均难以实现,返回,4.4.2 分段系统的基本原理,空间划分(分段) 将用户作业的逻辑地址空间划分成若干个大小不等的段(由用户根据逻辑信息的相对完整来划分),各段有段名(常用段号代替),首地址为0,4.4.2 分段系统的基本原理,内存分配 在为作业分配内存时以段为单位,分配一段连续的物理地址空间,段间不必连续 整个作业的逻辑地址空间是二维的,其逻辑
41、地址由段号和段内地址组成;物理地址空间是一维的 需要CPU的硬件支持(地址变换机构),段表 记录了段与内存位置的对应关系 段表常保存在内存中(一组寄存器) 段表的基址及长度由段表寄存器给出 访问一个字节的数据/指令需访问内存两次(段表一次,内存一次),所以也出现内存访问速度降低的问题 逻辑地址: 例:采用段式存储管理的系统中,若地址用24位表示,其中8位表示段号,则允许段的最大长度是( )A.224 B. 216 C. 28 D. 232,4.4.2 分段系统的基本原理,B,段表寄存器,逻辑地址,+,+,4.4.2 分段系统的基本原理,地址变换机构-实现逻辑地址向物理地址的变换,访问两次内存
42、成倍地降低计算机的速度 解决方法:设置联想寄存器快表,保存最近常用的段表项 段比页大,段表项的数目比页表项的数目少,所需的联想寄存器也相对较小,可以显著减少存取数据的时间,比没有地址变换的常规存储器的存取速度降低10-15%,例1、在一个段式存储管理系统中,其段表为:段号 内存起始地址 段长0 210 5001 2350 202 100 903 1350 5904 1938 95 试求右表中逻辑地址对应的物理地址是什么?地址空间多大? 解:逻辑地址为:逻辑地址 对应的物理地址为:210+430=640。逻辑地址 因为段内地址120段长90,所为该段为非法段。,分段地址变换例题1,由段表可知段号
43、为3位,段内地址为10位。,分段地址变换例题2,例2、某段表的内容如下: 段号 段首址 段长度0 120K 40K1 760K 30K2 480K 20K3 370K 20K 对于逻辑地址2154,它对应的物理地址为多少? 解:逻辑地址为:由段表可知段号为2位,段内地址为16位,段允许的最大长度为 216=210*26=1024*64=65536。所以逻辑地址2154(二进制为100001101010)的段号为0,查段表知其对应的物理地址为:120K+2154=125034,分页和分段的主要区别,二者优点的结合-段页式存储管理,返回,4.4.3 保护与共享,共享代码/数据 保护:地址越界保护;
44、*存取控制保护,editor,editor,editor,返回,4.4.4 段页式存储管理,段页式存储管理是分段和分页原理的结合,即先将用户程序分成若干个段(段式),并为每一个段赋一个段名,再把每个段分成若干个页(页式)。其地址结构由段号、段内页号、及页内位移三部分所组成。,主程序段,数据段,子程序段,0 4k 8k 12k 16k,0 4k 8k,0 4k 8k 12k,用户程序,利用段表和页表实现地址映射,段表,页表,内存,段页式系统中的地址变换机构,段超长,页表长度 页表始址,+,+,逻辑地址,段页式系统中的地址变换,系统中设段表和页表,均存放于内存中。读一字节的指令或数据须访问内存三次
45、。为提高执行速度可增设高速缓冲寄存器 每个进程一张段表,每个段一张页表 段表含段号、页表始址和长度;页表含页号和块号 进行地址变换 先用段号与段寄存器中的段长进行比较,若小于段长则利用段表始址和段号找出该段页表的始址,(否则越界中断), 再用逻辑地址中的段内页号在页表中找到相应的块号,最后与页内位移形成物理地址,返回,4.5 虚拟存储器的基本概念,常规存储管理方式的共同点 要求一个作业全部装入内存后方能运行 问题 有的作业很大,所需内存空间大于内存总容量,使作业无法运行 有大量作业要求运行,但内存容量不足以容纳下所有作业,只能让一部分先运行,其它在外存等待 解决方法 *增加内存容量 从逻辑上扩
46、充内存容量:覆盖、对换、虚拟存储器,4.5.1 虚拟存储器的引入,常规存储器管理方式的特征 一次性:作业在运行前需一次性地全部装入内存,将导致上述两问题 驻留性:作业装入内存后,便一直驻留内存,直至作业运行结束,4.5.1 虚拟存储器的引入,局部性原理 指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域 时间局部性:由于大量的循环操作,某指令或数据被访问后,则不久可能会被再次访问 空间局部性:如顺序执行,指程序在一段时间内访问的地址,可能集中在一定的范围之内,4.5.1 虚拟存储器的概念,基于局部性原理,程序在运行之前,没有必
47、要全部装入内存,仅须将当前要运行的页(段)装入内存即可 运行时,如访问的页(段)在内存中,则继续执行,如访问的页未在内存中(缺页或缺段),则利用OS的请求调页(段)功能,将该页(段)调入内存 如内存已满,则利用OS的页(段)置换功能,按某种置换算法将内存中的某页(段)调至外存,调入需访问的页(段) 虚拟存储器是指仅把作业的一部分装入内存便可运行作业的存储管理系统,它具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充,其逻辑容量由外存容量和内存容量之和决定,其运行速度接近于内存,成本接近于外存,虚拟存储器的概念,举例:虚拟存储技术与电脑配件销售方法的类比,虚拟存储器功能,请求调入功能:将作
48、业的部分页或段调入内存,其余的留在磁盘上,运行时,若所访问的页(段)不在内存(缺页或缺段),需要启用请求调入功能,将相关页(段)调入内存。置换功能:若调入页(段)时,内存已满,即无法装入新页(段), 需要启用页(段)置换功能,将内存中暂时不用的页(段)调出至磁盘上,腾出一定的内存空间。,4.5.2 虚拟存储器的实现方法,1、分页请求系统 在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页式虚拟存储器系统 它允许只装入若干页的用户程序和数据,便可启动运行,以后在硬件支持下通过调页功能和置换页功能,陆续将要运行的页面调入内存,同时把暂不运行的页面换到外存上,置换时以页面为单位 系统须设
49、置相应的硬件支持和软件 硬件支持:请求分页的页表机制、缺页中断机构和地址变换机构 软件:请求调页功能和页置换功能的软件,4.5.2 虚拟存储器的实现方法,2、分段请求系统 在分段系统的基础上,增加了请求调段功能及分段置换功能,所形成的段式虚拟存储器系统 它允许只装入若干段的用户程序和数据,便可启动运行,以后再硬件支持下通过请求调段功能和分段置换功能,陆续将要运行的段调入内存,同时把暂不运行的段换到外存上,置换时以段为单位 系统须设置相应的硬件支持和软件 硬件支持:请求分段的段表机制、缺段中断机构和地址变换机构 软件:请求调段功能和段置换功能的软件,4.5.3 虚拟存储器的特征,1、多次性 多次性是虚拟存储器最重要的特征,指一个作业被分成多次调入内存运行 2、对换性 对换性指允许在作业运行过程中进行换进、换出,换进、换出可提高内存利用率 3、虚拟性 虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量注:虚拟性以多次性和对换性为基础,而多次性和对换性又以离散分配为基础,