第七章实存管理技术.ppt

上传人:本田雅阁 文档编号:2094755 上传时间:2019-02-13 格式:PPT 页数:108 大小:1.41MB
返回 下载 相关 举报
第七章实存管理技术.ppt_第1页
第1页 / 共108页
第七章实存管理技术.ppt_第2页
第2页 / 共108页
第七章实存管理技术.ppt_第3页
第3页 / 共108页
亲,该文档总共108页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第七章实存管理技术.ppt》由会员分享,可在线阅读,更多相关《第七章实存管理技术.ppt(108页珍藏版)》请在三一文库上搜索。

1、第七章 实存管理技术,存储器是计算机最重要的资源之一,内存管理一直是操作系统最主要的功能之一。 内存容量一直是计算机硬件资源中最紧张的资源,特别在多道程序设计技术条件下,一方面要充分利用内存容量,另一方面必须保证多个程序在内存中互不干扰即保证内存安全。 存储器管理技术分实存管理和虚存管理。,基本的存储管理方法是分区法、覆盖技术、交换技术 、分页法、分段法、段页法。,第七章 实存管理技术,7.1 存储管理的基本概念 7.2 连续分配存储管理方式 7.3 离散分配存储管理方式 7.4 交换技术 7.5 覆盖技术,7.1 存储管理的基本概念,7.1.1 存储管理要解决的问题 7.1.2 存储管理的分

2、类 7.1.3 地址映射(重定位),7.1.1 存储管理要解决的问题,早期计算机系统中,内存是最紧张的资源之一。为了在小内存中运行大程序,人们先发明了覆盖技术。当发明虚存管理技术后,才真正解决了在小内存中运行大程序的问题。 为了有效管理计算机内存资源,操作系统的存储管理要具备以下功能: 1. 内存空间分配与回收 根据某种分配方式,遵循某种分配算法,为进程分配内存,当进程结束时再回收内存。,2. 地址映射 设计地址变换机构,静态和动态地址变换的方法。 3. 内存保护 怎样让内存中各个进程互不干扰,怎样保证内存中程序、数据的安全。 4. 内存扩充 怎样从逻辑上扩充内存。这属于虚存管理的范畴。,7.

3、1.2 存储管理的分类,从分配方式上按进程在内存中是否连续,可以把存储管理分成连续分配方式和离散分配方式两类。 1. 连续分配方式 必须为进程在内存分配一片连续的空间。 2. 离散分配方式 允许将一个进程分散地装入内存的多个不相邻的区域。,从进程是整体装入还是局部装入内存可以把存储管理分成实存管理和虚存管理两类。 1. 实存管理 必须把进程完整地装入内存。 2. 虚存管理 允许将一个进程局部地装入内存。,7.1.3 地址映射(重定位),1. 地址空间和存储空间 源程序经过编译或汇编产生目标文件,目标文件经过连接和装配产生可以执行的文件。在连接装配时,语言系统并不知道将来这个执行文件会放在内存的

4、哪个位置,为了方便地将执行文件装入内存,把执行文件中第一条指令的地址设为 0。 其他指令的地址都以它做参照。执行文件中指令的地址称相对地址或逻辑地址。而相对地址的集合称相对地址空间,简称地址空间。,内存每个字节都有一个地址,这是物理地址是真实的地址,也称绝对地址。绝对地址空间也叫物理地址空间,简称存储空间。 一个程序的逻辑地址和它在内存中的地址是不同的,显然必须先将逻辑地址变成物理地址后程序才能正确运行。,2. 静态重定位 静态重定位是由专门设计的重定位装配程序来完成的,是在目标程序装入到内存区时由装配程序来完成地址转换。 优点:无需增加地址转换机构 缺点 : 不能实现重新分配内存 用户必须事

5、先确定所需的存储量 每个用户进程需各自使用一个独立的副本。,Load #1,450, , ,3500,0,100,450, ,Load #1,2450, ,3500, , , ,2100,操作系统,2000,2450,逻辑地址,物理地址,图 7-2 静态地址映射,3. 动态重定位 动态重定位是在目标程序执行过程中,在CPU访问内存之前,由硬件地址映射机构来完成将要访问的指令或数据的逻辑地址向内存的物理地址的转换。 优点:内存的使用更加灵活有效;几个作业共享一程序段的单个副本比较容易;无需用户干预,由系统来负责全部的存储管理。 缺点 :需附加硬件支持;实现存储器管理的软件比较复杂。,Load#1

6、,450, , ,3500,0,100,450, ,Load#1, 450, ,3500, , , ,2100,操作系统,2000,2450,逻辑地址,物理地址,图 7-3 动态地址映射,基址寄存器,2000,7.2 连续分配方式,7.2.1 单一连续分配方式 7.2.2 固定分区内存管理方式 7.2.3 可变分区内存管理方式,7.2.1 单一连续分配方式,在单任务的操作系统条件下,让用户占用计算机所有资源,内存管理采用单一连续分配方式。 内存被分成两个区 1. 系统区 供操作系统使用 2. 用户区 供用户放一个程序,操作系统区,用户区 ,7.2.2 固定分区内存管理方式,分区管理是满足多道程

7、序设计的一种最早采用的存储管理方法。其基本原理是给每一个进程在内存中划分一块可用的存储区,连续存储各进程的程序和数据,使各进程能并发进行。,内存分配算法: (1)首次适应法 空闲分区按物理地址为升序排列,在内存现有空闲分区中,找到第一个可用的分区就分配。 (2)最佳适应法 在内存现有的空闲分区中,找一个浪费最小的分区分配。,(3)最坏适应法 在现有内存空闲区中,找一个浪费最大的分区分配。 (4)唯一最佳分配法 作业按长度分类排队,一个分区对应一个队,使这个队中每个作业的长度小于等于分区的长度,使分配后内存浪费最小。从整体上看,这个算法也不是最佳的。,固定分区法 固定分区法就是把内存固定划分为若

8、干个不等的区域,划分的原则由系统决定。在整个执行过程中保持分区长度和分区个数不变。操作系统为每个用户作业分配一个分区。,内存管理 :,管理数据结构:设置内存分配表 内存分配:每个区分配一个进程 内存回收:简单 缺点:内存利用率不高,如何记录系统的状况呢?,分配策略,分区4,分区3,分区2,分区1,操作系统,0,100K,200K,400K,700K,1300K,多个输入队列,分区4,分区3,分区2,分区1,操作系统,0,100K,200K,400K,700K,1300K,单个输入队列,(a)唯一最佳分配算法,(b)其他分配算法,固定分区,操作系统建立一个内存分区管理表(分区号、分区长度、分区首

9、址和分区状态),所有分区按物理地址升序排列,每个分区占表中一行。操作系统为作业分配内存时,按(1)、(2)、(4)中某个分配算法查表,有合适的分区就分配,否则就不分配。 固定分区法管理方式虽然简单,但是存在大量内碎片(在分区内存在空余的空间,这就称为内碎片),内存利用率不高。,内存分区管理表,地址映射 对于固定分区,可以采用静态地址映射也可以采用动态地址映射。 内存保护 可以采用界限寄存器法,用两个寄存器分别放用户区的首地址和用户的长度。用户程序访问内存的地址必须在这个范围内,否则就是地址越界。,7.2.3 可变分区内存管理方式,可变分区法 动态分区分配是根据进程的实际需要,动态地为它分配连续

10、的内存空间,各个分区是在相应进程装入内存时建立的,其大小恰好等于进程的大小。 为了实现内存分配,系统中设置了相应的数据结构来记录内存的使用情况,常用的数据结构形式有空闲分区链。,内存分配 数据结构,可以用空闲区链表,节点中包含空闲区的首址、长度、链指针。 在进程PCB中包含进程的内存首址、长度、访问权限等项目。 分配算法:首次适应法、最佳适应法、最坏适应法。 分配时,操作系统填写PCB中进程的内存首址、长度、访问权限。,内存回收 为了最大限度的利用内存资源,就要不断将分散的小碎片拼接成一个大的空闲区,这里有个拼接的时机问题,可以在分配时拼接,也可以在回收时拼接。拼接意味着要求进程能在内存中移动

11、,例如现在进程的首址是 a ,将它向地址增大方向移动 b 个字节,进程的首址变成 a + b 。进程长度不变。,地址映射 为了实现内存拼接,必须用动态地址映射 CPU提供基址寄存器、限长寄存器、地址运算器。 进程切换时,操作系统把PCB中的内存信息( 进程的首址、长度 )写入基址寄存器和限长寄存器同时将进程PCB中的现场信息写入CPU的寄存器集合。,动态重定位的实现过程,内存保护 利用基址寄存器和限长寄存器,一个进程只能访问自己的内存区,只有操作系统进程可以访问全部的内存区。 除了地址界限保护外,为了进程间共享数据还需要访问权限保护,进程可以给另一个进程赋予访问权限,允许在访问权限范围内访问。

12、,动态分区举例,外碎片 进程外的内存空间碎片化 能用压缩方法解决 OS 移动进程使进程和进程相连。 消耗CPU时间,P1 (20M),P2 (14M),P3 (18M),Empty (56M),Empty (4M),P4(8M),Empty (6M),P2 (14M),Empty (6M),Refer to Figure 7.4,例:现在有三个作业A(20KB),B(80KB),C(50KB),内存有两个空闲区F1(110KB),F2(60KB)。 首次适应法(设F1的首址 F2的首址 ) A(占20KB) B(占80KB) C(占50KB),F1( 100KB, 10KB ),F2( 50K

13、B, 10KB ),首次适应法(设F1的首址 F2的首址 ) A(20KB) B(80KB) 最坏适应法 A(20KB) B(80KB) C(50KB),F2(20KB,40KB),F1(80KB,30KB),F1( 100KB, 10KB ),F2( 50KB, 10KB ),最佳适应法 A(20KB) B(80KB) 可变分区分配采用最佳适应算法,结果不一定是最佳的;采用最坏程序算法,结果不一定是最差的。,F2( 20KB, 40KB ),F1( 80KB, 30KB ),伙伴系统,全部可用空间被分成一个长度是2U的块 如请求分配长度s符合2U-1 s = 2U 全部空间分配给它 否则块被

14、分成两个相等的伙伴。 这个过程一直持续直到找到符合长度= s的伙伴,伙伴系统举例,伙伴系统树型表示,7.3 离散分配存储管理方式,固定分区和可变分区都是连续分配内存的技术,把一个进程装入一个分区,使用这种方法会造成许多碎片,降低了内存的利用率。产生碎片的根本原因就是要求把一个进程连续地放在一个内存区。虽然可变分区技术使用内存拼接技术把分散的空闲分区集中成较大的分区,但要增加系统的开销。人们考虑能否化整为零提高内存的利用率。,7.3.1 分页式存储管理方式 7.3.2 分段式存储管理方式 7.3.3 段页式存储管理方式,7.3.1 分页式存储管理方式,可变分区方式除了产生大量的外碎片,还有一个缺

15、点,就是进程动态增长不方便。分页管理是解决碎片问题的一种有效办法,它允许进程在内存空间里是不连续的;还便于进程动态增长。 分页管理技术原理 (1)操作系统按一个2的整数次幂为长度,把内存用户区分成若干存储区,称为块,每个块的容量都是相同的,每个块按物理地址值由小到大顺序从 0 开始编号,称为块号。,000000 000,000000 001,000000 010,000000 ,000000 111,000001 000,000001 001,000001 ,000001 111, ,111111 000,111111 001,111111 010,111111 ,111111 111,块 号

16、 块内地址,# 0,# 1,# 63,假设每块的容量是23个字节物理地址被分成两部分,高位部分称为块号,低位部分称为块内地址。假设内存共有64个块,每块有 8 个字节。块号是从物理地址中截出来,是物理地址固有的。 物理地址=(块号,块内地址) =( B , d ) 内存块的起始地址等于内存块号乘以块长。,物理地址,(2)用户进程的逻辑空间也按内存块的大小分页,每页也按逻辑地址由小到大编号称为页号。 假设一个进程有61个字节,以每页8个字节分页,分成8 页,如图所示:,000000 000,000000 001,000000 010,000000 ,000000 111,000001 000,0

17、00001 001,000001 ,000001 111, ,000111 000,000111 001,000111 010,000111 101,页 号 页内地址,# 0,# 1,# 7,每页的容量是23 逻辑地址被分成两部分,高位部分称为页号,低位部分称为页内地址。 逻辑地址=( p , d ) 程序共有8页,每页有 8 个字节。页号是从逻辑地址中截出来的。为程序的每一页分配一个内存块,这就得出程序任何一页装入内存后,它的页内地址就等于块内地址。,逻辑地址, ,物理地址(块号,块内地址)用(B,d)表示, 逻辑地址(页号,页内地址)用(p,d)表示, 设逻辑地址是A,页长是L,从数学角度

18、描述: p = A div L d = A mod L 因为L=2m,所以p是A逻辑右移 m 位后的结果,d 是A逻辑右移 m 位时,移出去的m 位值。,用汇编语言整数除法指令很容易描述,以A 作为被除数,以L 作为除数,商就是页号,余数就是页内地址。 其实不用对逻辑地址移位,也不用对逻辑地址做除法,在工程上直接根据页长的位数,将逻辑地址一分为二,高位部分是页号,低位部分是页内地址(页内偏移)。,内存空间分配与回收 页式管理以块为单位给进程分配内存,操作系统必须随时掌握内存块的状态(已分配、未分配、当前空闲块的总数)。 下面建立内存空间分配与回收的数学模型: 首先看数据的性质,内存块具有哪些属

19、性? 内存块的起始地址、内存块的状态(已分配或空闲),内存块的总数是固定的。,这个模型要能反映内存块的地址和状态信息。 并且内存块的总数是不变的。 从数据结构和程序语言角度讲,一个数组元素具备两个特性,能否用一个数组元素代表一个内存块? 用数组元素的值代表内存块的状态,元素的下标值代表内存块的地址。因为一个内存块的状态不是已分配就是未分配,可以用一个二进制位表示,0表示未分配,1表示已分配。,进程和页架,A.0,A.1,A.2,A.3,B.0,B.1,B.2,C.0,C.1,C.2,C.3,D.0,D.1,D.2,D.3,D.4,假定系统有m* n个内存块(m行n列),用m*n的位图表示:,0

20、 1 2 3 4 5 . 30 31,0 1 2 3 4 5 6 7,在程序语言中用二维数组表示这个位图,每个元素的长度是一个二进制位,用一个数组元素表示一个内存块。 数组元素值表示对应的内存块的状态(空闲或占用)数组元素的下标映射内存块的起始地址。 从分页原理可知,内存块的起始地址等于内存块号乘以页长,在此页长是个常数,用元素的下标值映射内存块号。块号左移就可获得块的起始地址。,假设i和j分别代表数组元素的行、列下标 。 B = i * n + j 例:n=32, m= 8 , i = 3, j = 5 B = i * n + j = 3 * 32 + 5 = 101 分配时遍历数组,找到元

21、素值是0的元素,再根据该元素的下标计算内存块块号B。分配后,将该元素值更改为1。,分配原则:设系统有m 个空闲内存块,进程申请n块,如m=n就分配,即要求进程一次性的装入内存,不论这些块在内存中是否连续。一个进程装入内存后,可以离散分布在各个内存块中,进程不需要操作系统为它分配一个连续的内存区。这正是分页管理与分区管理的根本区别。,设k是系统当前的空闲块数,n是进程的页数,分配算法可以用N-S流程图表示为:,T,T,F,F,k = n,n x ; q=,当 x 0,* q = = 0 (未分配),分配 *q= 1,填写页表,记录块号 B, x-, k -,修改 q +; B+,不分配,进程结束

22、后,要回收进程占用的所有内存块,这时要根据内存块号计算它在位图中的位置(即行下标和列下标) i = B div n j = B mod n 例:B=197,n=32 i = B div n = 197 div 32 = 6 j = B mod n = 197 mod 32 = 5,计算出内存块对应的行和列下标后,就可以访问数组,把该元素的值修改为 0 ,系统空闲内存块数自增 1 ,这个内存块就被系统收回;进程如占有 n 块,就把这个过程重复 n 次。,地址映射 地址映射是将逻辑地址转换成真实的物理地址。由于内存的一块恰好装入一页,页内地址与块内地址一一对应。 逻辑地址是(p , d ) 物理地

23、址是(B , d ) 现在的问题是已知p ,求B。因为进程的一页可以装入内存的任何一块中,p 和B之间不存,在一种可计算的线性函数。但是存在每页对应一个内存块的关系。一个显而易见的方法是建立一张表 (页表) ,表中每行代表一页,每行的序号代表页号,通过这张表描述页号与块号的关系。地址映射的工作是用页号 p 查表,找到对应的块号B ,再用B 与页内地址d 计算物理地址。 为了提高地址映射的效率,需要硬件的支持。在CPU中设立页表控制寄存器(其中包含页表长度L和页表起始地址a)。,页表,每个进程都有自己的一张页表,页表的起始地址和长度记录在PCB中。当进程由就绪态变成执行态时,由操作系统根据进程的

24、PCB将进程页表的起始地址和页表长度填入CPU页表控制寄存器。,p,d,L,a,p L,B,B,d,p + a,p + a,越界中断,n,y,a,逻辑地址,页表寄存器,页表,物理地址,由于页表是驻留在内存的某个固定区域中,而取数据或指令又必须经过页表变换才能得到实际物理地址。因此,取一个数据或指令至少要访问内存两次以上。一次访问页表以确定所取数据或指令的物理地址,另一次是根据地址取数据或指令。这比通常执行指令的速度慢了一倍。,提高查找速度一个最快的办法就是把页表放在寄存器中而不是内存中,但由于寄存器价格太贵,这样做是不可取的。另一种办法是在地址变换机构中加入一个高速联想存储器,构成一张快表。在

25、快表中,存入那些当前执行进程中最常用的页号与所对应的块号,从而以提高查找速度。,(2)快表的地址转换,由于在某段时间内执行程序时,是在一个范围内逐条顺序执行指令;数组一类数据结构在内存占据一片连续存储空间,访问数组时也是在数组范围内访问,所以快表的命中率可达到80%到90%。CPU存取一个数据的平均时间为: T=命中率(访内时间访cache时间)非命中率(2 访内时间访cache时间) 例:访内时间是100ns,访cache时间是20ns,访cache命中率是85%计算CPU存取一个数据的平均时间。 T=0.85*(100+20)+0.15*(200+20)=135ns,页的共享和保护,分页存

26、储管理技术使每个进程分别存储在内存的不连续的存储块中,这种灵活性允许两个和多个进程共享程序库中的例程或公共数据段的同一副本,共享的方法是使这些相关进程的逻辑空间中的页指向相同的内存块。 共享页面是有条件的,故实现信息共享的前提是提供附加的保护措施,对共享信息加以保护。,页共享与保护,7.3.2 分段式存储管理方式,其实程序在逻辑上是分成不同段的,每个段具有其独特的性质,例如一个代码段是只执行的,一个数据段只允许读,另一个数据段可允许读和写。显然,如以段作为内存分配的最小单位,这便于对各个段实施控制和保护。这些段的长度可以不同,段和段在内存中也可以不连续。每个段在内存占据一片连续的空间。,分段基

27、本原理,内存分配与回收 分段管理中,内存的最小分配对象是段,特别地是为每个段分配各自的连续空间,在内存里段和段之间可以不连续。 分配算法与可变分区的分配算法相似,可以采用最佳适应法、最坏适应法和首次适应法等分配算法。显然仍然要解决外碎片的问题。,分段基本原理,内存分配的数据结构要采用空闲区链表,为了提高内存的利用率,必须实施内存碎片拼接的方案,内存碎片拼接的时机可以在分配时刻或回收时刻。 可以理解分段管理技术继承了可变分区管理技术,但管理上要比可变分区更复杂。例如可变分区管理以进程为内存分配的最小对象,为一个进程只进行一次分配工作;而分段管理以段为内存分配的最小对象,为一个进程的每个段要进行一

28、次分配工作。,分段基本原理,地址映射 从前面论述中,知道进程被分成若干个逻辑段,每个段在内存中占据一片连续的空间,内存分配可以按可变分区的算法,必须进行外碎片拼接。那么采用静态地址映射还是动态地址映射呢? 答案显然是必须采用动态地址映射。否则无法实施外碎片拼接。 地址映射是将逻辑地址转换为物理地址,先研究逻辑地址的构成。,分段基本原理,进程的逻辑地址空间 在分段存储管理方式中,段是一组相关的逻辑信息的集合。 每个段都有自己的名字和长度,通常用一个段号来代替段名,每个段都从0 开始编址,并采用一段连续的地址空间,段的长度由相应的逻辑信息组的长度决定。 分段系统中的逻辑地址由段号 s和段内地址 d

29、 组成, 是一个二维地址( s , d )。是程序员负责安排的地址。,由于分段的进程逻辑地址空间是二维的,所以分段的地址映射在于如何把二维段地址结构动态地变成一维的内存地址结构。 内存分配时,是为任何一个段分配一个连续的内存片,一个段内的所有逻辑地址在该内存片中的顺序仍然不变。假设段的物理起始地址是 a,由于段的起始逻辑地址是 0,逻辑地址中作为偏移地址,加上段物理起始地址就是所求的物理地址。所以逻辑地址为 x的单元其物理地址为 a+x 。,现在已知逻辑地址(s,d),怎样计算它在内存的物理地址?与分页管理的分析一样,关键是找到逻辑地址与物理地址之间的映射关系。 由于每个段在内存是连续的,可以

30、将段的物理地址看成是由基址和偏移地址( a,d)组成,根据前面分析,偏移地址又等于段内地址,关键要找 s 和 a 的联系。分配内存时,是随机为一个段分配空间,所以 s 和 a 之间,不会存在某种线性函数关系,即不可能用数值计算的方法求解。 但是段号 s 和段物理起始地址 a 之间确实存在着一一对应的关系,可以用一个表(段表)保存这个关系,根据表的起始地址和 s 找该段的起始物理地址 a 。然后计算 a+d 得到所要的物理地址。 操作系统每个进程建立一个表,保存其段号 s 和段物理起始地址 a 之间的关系,称为段表。,在查表中仍然要防止地址越界的问题。所以表中除了段物理起始地址外,还要保存段的长

31、度值。 硬件上要提供相应的段表控制寄存器,当进程切换时,操作系统把新进程PCB中的段表起始地址和段表长度值写入段表控制寄存器中,进程访问内存时,按照段表控制寄存器找段表,通过查表找段的物理起始地址。,地址映射,段号,段内地址,段表始址,逻辑地址( 2 , 100 ),=,段号越界中断,+,1K,500,200,600,0,1,2,3,基址,段号,段长,物理地址,8292,段式存储的地址变换机构,2,100,+,6K,8K,9K,4K,y,n,=,y,n,段内地址越界,段表长度4,段的共享和保护,段的共享 段的共享是指两个以上的进程,使用同一个子程序或数据段,而在内存中只保留该信息的一个副本。具

32、体地说,只需在每个进程的段表中,用相应的表项装入共享段在内存的起始地址即可。,内存保护 分段管理优点之一就是方便内存保护。前面看到怎样进行地址越界保护,它只是内存保护的一部分,为了实施访问权限保护,在段表中再增加访问权限字段,每个进程访问该段时还要进行访问权限检查,符合的才允许访问,否则拒绝访问。,段的共享与保护,例子:有一个多用户系统,可以容纳40个用户,他们都执行一个文本编辑程序,如果文本编辑程序有160K的代码和40K的数据区,则需要: (160+40)*40 =8M 的内存空间,如果160K的代码是可重入的,则在内存中只保存一个副本就可以了,则需要:160+40*40=1760K内存空

33、间。,段的共享与保护,引入分段的理由: 逻辑上的完整 动态链接 信息共享 信息保护,分页和分段的区别: 页的大小是固定的,页的长度是由内存块长度决定的。段的长度是可变的,段的长度是由信息的长度决定的; 分页的逻辑地址空间是一维的,分段的逻辑地址空间是二维的; 分页存在内碎片,分段存在外碎片;,逻辑地址,分页,分段,7.3.3 段页式存储管理方式,分页存储管理能有效地提高内存的利用率,分段存储管理能很好地满足用户的需要,段页式存储管理则是分页和分段两种存储管理方式的结合,它同时具备了两者的优点。也继承了两者的缺点。,分段和分页都有各自的优势。分页对程序员来说是透明的,它消除了外部碎片,因而可以更

34、有效地使用主存。它具有处理不断增长的数据的能力。分段是由程序员决定的,对段的共享及保护操作容易,支持动态链接等优势。把它们二者的优点结合起来,就形成了非常具有优势的“段页式存储管理”方式。,7.3.3.1 段页式管理原理,程序员仍然按分段编程,逻辑地址是二维地址(段号,段内地址)。 操作系统仍对内存用户区实施分块,物理地址由块号和块内地址组成(块号,块内地址)。 操作系统对进程以段为单位进行分页,一个段被分成若干页,每一页刚好占一个内存块,内存里段和段之间可以不连续,一个段内的页和页之间也可以不连续。,7.3.3.1 段页式管理原理,内存分配和回收 虽然名叫段页式,其实内存并没有段的影子只有大

35、小相同的块,块长度决定了页的长度。所以内存分配和回收与分页式管理是一样的。 内存分配和回收操作简单,内存的利用率比分页式稍低一些,因为每一段的最后一页会有内碎片。这是继承了分页式的优点。,7.3.3.1 段页式管理原理,地址映射 首先研究逻辑地址在段页式中的变化。 程序员编程时仍然是分段编程,所以逻辑地址仍是二维的,即段号和段内地址。 操作系统以段为单位分页,就把段内地址分成两部分,即页号和页内地址,这样,逻辑地址变成(段号,页号,页内地址)。 再来看物理地址,物理地址是(块号,块内地址),因为一块正好装入一页,所以,页,7.3.3.1 段页式管理原理,内地址就等于块内地址。下面就要考虑段号和

36、页号与块号之间的联系。 因为以段为单位分页,所以每个段都要一个页表,页表每项装入对应的块号;每个进程分多个段,一个进程设置一个段表。段表项目内容与分段式中的段表内容不同,为了检查地址越界,一个段表项至少包括页表的长度和页表的起始地址。,7.3.3.1 段页式管理原理,段页式分配的地址变换图解,=,越界中断,段页式存储的地址变换机构,0,1,2,3,基址,段号2,页表,长度,页表,+,B,1,块号,页号,0,1,2,3,=,块内地址,块号,段号2,页号2,页内地址d,段表地址,段表长度,段内地址,Y,N,Y,N,7.3.3.1 段页式管理原理,从地址映射看到,为了计算内存物理地址需要两次访问内存

37、(段表,页表),显然增加执行一条指令的时间,使进程执行时间延长,这是段页式管理天生缺陷,为了提高访问内存的速度,可以用增加快表的方法,利用高速缓冲内存存放段表和页表的子集,缩短计算物理地址的时间。,7.3.3.1 段页式管理原理,内存共享和保护 段页式管理吸取了分段式管理和分页式管理的优点,可以说在内存分配回收方面吸取了分页管理的优点,在内存共享和保护方面吸取了分段式管理的优点。 段页式管理的内存保护除了前面讲的地址越界保护外,还有访问权限保护。这可通过在段表中增加保护字段实现。,7.3.3.2段页式的实例,Pentium的虚拟存储器采用段页式存储管理Pentium虚拟存储器的核心是两张表:L

38、DT(局部段描述符表)和GDT(全局段描述符表)。每个进程都有自己的LDT,一台计算机上的所有进程共享一个GDT。LDT描述每个进程的段,包括代码、数据、堆栈等;GDT描述系统段,包括操作系统本身。,7.3.3.2段页式的实例,为了访问一个段,操作系统必须把这个段的选择符(selector)装入中央处理器的某个段寄存器。每个选择符是一个16位数。,15 3 2 1 0,索 引,0=GDT / 1=LDT,优先级(03),7.3.3.2段页式的实例,段寄存器SS表示堆栈段,CS表示代码段, DS 表示数据段, ES、FS、GS表示附加数据段。在选择符被装入段寄存器时,从LDT或GDT中取出对应的

39、描述符,以便快速访问。一个描述符由8个字节组成包括段的基地址、大小和其它信息。,基址 24 -31,G,X,0,段长 16-19,基址16 -23,0:16位段 1:32位段,0:段长以字节为单位 1:段长以页长为单位,基址0 -15,段长 0 -15,Type,S,DPL,P,A,0:段不在内存中 1:段在内存中,0: 未访问过 1: 访问过,0:系统段或门 1:代码段或数据段,段类型和 保护,优先级(03),Pentium段描述符,7.3.3.2段页式的实例,现在让我们跟踪一个逻辑地址(选择符,偏移地址)转换为物理地址的过程: 用选择符做索引,查段描述符表中的描述符。 Pentium接着把

40、段描述符中的32位段基址和偏移地址相加形成线性地址 。 如果禁止分页,线性地址就作为物理地址并被送往寄存器用于读写。 如果允许分页,线性地址将被解释成一个虚拟地址并通过页表映射到物理地址。,7.3.3.2段页式的实例,段选择符,段描述符表,段起始地址,段长度,段的其他属性,偏移地址,32位线性地址,+,逻辑地址转换为线性地址,CS DS SS ES FS GS,7.3.3.2段页式的实例,在实存管理中,会遇到内存不够用的情况。人们也想了解决该问题的办法,交换技术和覆盖技术就是在实存管理中扩充内存的方法。 这些方法在一定程度上解决了实存管理中用小内存运行大程序的问题。,7.4 交换技术,交换技术

41、是指将一个进程完整地从内存移动到磁盘上,腾出空间给其他进程使用。需要时,再将该进程移入内存。交换进程由换出和换进两个过程组成,换出是把内存中的数据和程序换到外存的交换区,反之就是换进。 在交换系统中,交换所占用的时间相当多。在前面学习进程状态时,曾经学习过挂起和激活转换,从进程状态转换上讲,交换技术就是将进程挂起或激活。,7.5 覆盖技术,覆盖是在程序运行过程中,把同一存储区在不同时刻分配给同一程序中的不同程序段或数据段来共享的一种存储分配技术。 使用覆盖技术时的难点是程序员必须按树形结构设计程序和数据结构,使得要覆盖的段块具有相对独立性,不存在相互交叉访问。可以认为覆盖技术是从实存管理向虚存管理的过渡阶段。,如不用覆盖结构,程序需要190K的空间,采用覆盖结构后,只需要110K的空间。节省了80K空间。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1