590 likes | 695 Views
引言:同 CPU 一样,存储器(指内存)是计算机系统的重要资源,为操作系统、各种系统软件和用户程序所共享。存储器以空间分片方式实现共享(注意与 CPU 时间分片的区别)。存储器的空间被分为系统存储区(称为系统区)和用户存储区(称为用户区)。存储器管理讨论的主要对象是内存的用户区。. 5.1 存储器管理的基本概念. 5.1.1 存储器管理的功能. 存储器管理的两个基本目的 充分提高内存的利用率; 为用户使用存储器提供方便; 存储器管理的功能 内存分配;. 目标模块 1. 编译程序. 链接程序. 目标模块 2. 源程序. 装配模块. ……. 目标模块 n.
E N D
引言:同CPU一样,存储器(指内存)是计算机系统的重要资源,为操作系统、各种系统软件和用户程序所共享。存储器以空间分片方式实现共享(注意与CPU时间分片的区别)。存储器的空间被分为系统存储区(称为系统区)和用户存储区(称为用户区)。存储器管理讨论的主要对象是内存的用户区。引言:同CPU一样,存储器(指内存)是计算机系统的重要资源,为操作系统、各种系统软件和用户程序所共享。存储器以空间分片方式实现共享(注意与CPU时间分片的区别)。存储器的空间被分为系统存储区(称为系统区)和用户存储区(称为用户区)。存储器管理讨论的主要对象是内存的用户区。 5.1 存储器管理的基本概念 5.1.1 存储器管理的功能 • 存储器管理的两个基本目的 • 充分提高内存的利用率; • 为用户使用存储器提供方便; • 存储器管理的功能 • 内存分配;
目标模块1 编译程序 链接程序 目标模块2 源程序 装配模块 …… 目标模块n 库函数 • 地址重定位; • 内存保护; • 内存扩充; 5.1.2 地址重定位(映射) • 用户源程序在作业调度之前的处理:编译和链接 • 编译:将用户源代码编译为几个目标模块; • 链接:由链接程序将编译后的目标模块以及所需要的库函数,链接在一起,形成装配模块。
0 … 0 … 1000 … 100 Mov r1,[500] 1100 Mov r1,[500] 装入 … … 1500 1234 500 1234 … … … 599 511K • 地址空间 • 物理空间 • 地址空间:上图中的装配模块的地址是从“0”开始的,模块中的其它地址都是相对于起始的“0”地址计算的,这些相对地址所形成的地址范围称为“地址空间”。 • 相对地址(逻辑地址):地址空间中的地址。 • 存储空间:主存中一系列存储信息的物理单元的集合。 • 绝对地址(物理地址):存储空间中的地址。
0 … 1000 … 0 … 1100 100 Mov r1,[500] Mov r1,[500] 静态重定位 … … 1500 1234 … 500 1234 … 511K … 599 • 地址重定位(映射):将作业地址空间中使用的逻辑地址(相对地址)转换成存储空间的物理地址的过程。地址映射是由于分配给作业的存储空间与作业的地址空间不一致所引起的。地址重定位分为静态重定位和动态重定位两类。 • 静态重定位 • 在程序装入内存时进行; 物理地址=起始地址+相对地址 • 特点:无需增加硬件地址变换机构,但要求分配的区域为连续存储区,在执行期间不能移动,共享实现较难。
重定位寄存器 1000 0 … 相对地址 1000 … + 500 1100 Mov r1,[500] … 0 … 1500 100 1234 Mov r1,[500] … … … 511K 500 1234 … 599 • 动态重定位 • 在程序执行时进行重定位; • 特点:动态重定位可以将程序分配到不连续的存储空间中;在程序的执行过程中,可以实现部分装入,然后根据需要动态申请和分配内存,可以方便实现虚拟存储管理;便于程序段的共享。但需要硬件的支持,算法较复杂。
静态分配方式:装入内存时确定;一次性分配所需存储空间;在运行中不能移动,不能再申请和释放。静态分配方式:装入内存时确定;一次性分配所需存储空间;在运行中不能移动,不能再申请和释放。 动态分配方式:装入内存时确定;但在运行时可动态申请附加空间和归还系统,允许移动。 连续分配方式:将主存划分为大小不等的连续区;一个区存放一个程序或一个程序中的一个逻辑段。如分区存储方式和段式存储方式。 离散分配方式:将主存划分为一系列大小相等的块;将程序的地址空间划分为一系列页面,将页面放置于块中。如页面存储管理方式。 5.1.3 主存分配方式 • 从分配时间和运 • 行过程特征上分: • 从存储空间划分上:
5.1.4 虚拟存储器 • 概念:一个程序的地址空间大于内存的物理空间,可将一部分地址空间放在内存,其余放在外存。当访问的信息不在内存时,由操作系统将其调入内存。从逻辑上看,它是对内存容量进行扩充的一种存储系统;从效果上,系统好像提供了一个比实际内存大得多的存储器。 • 原理:程序局部性原理,即程序在执行时呈现出局部性规律,也就是程序在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某些区域。 • 特征 • 离散性:内存离散性分配,最基本特征; • 多次性:多次地被调入内存,最重要特征; • 对换性:允许指令或数据调进和调出; • 虚拟性:从逻辑上对内存容量的扩充。
实现的物质基础 • 足够的外存; • 一定容量的内存,受系统的地址结构限制; • 地址变换机构,一般利用动态重定位的方式; • 一定的策略,一定的调入策略和一定的调出策略。 • 虚拟存储器容量的限定:由计算机系统的地址结构确定的。 5.1.5 存储保护 • 目的:防止一个作业有意或无意破坏操作系统或其它作业的数据。 • 方式:不同的内存分配方式,采用不同的保护方式。 • 上、下界保护方式:为分给用户或进程的每个连续内存空间设置一对上下界寄存器,使它们分别指向该区的上界和下届,因而适用于连续的分配方式中。
0 0 … … 基址寄存器 下届寄存器 100 100 进程A 进程A 200 200 100 100 … … 限长寄存器 上届寄存器 500 500 200 100 … … 599 599 • 按上图所示,进程A物理地址应在[100,200)中,否则,发出保护性中断,停止该进程执行。 • 基址、限长寄存器保护方式:系统设置一对寄存器,存放当前执行的程序在内存分区始址的基址以及该程序地址空间的长度。运行时将每个访问内存的相对地址和寄存器的内容进行比较,如超长,则发出越界中断信号。 • 存储保护键方式:每个区域分配一个独立保护键,分配在该区域的程序也被赋予一个保护键。运行时,检查两者是否一致,如不一致,发出保护性中断。
访问控制信息方式:在专门数据结构中增加访问控制信息,如禁止任何操作、只能读操作、只能写操作和读/写操作。访问控制信息方式:在专门数据结构中增加访问控制信息,如禁止任何操作、只能读操作、只能写操作和读/写操作。
系统区 用户区 5.2 连续分配存储管理方式 连续分配:连续分配是为一个用户程序分配一个连续的内存空间。 分类:单一连续分配方式和分区分配方式。分区分配方式又分为固定分区和动态分区方式,是最简单的多道程序内存分配方法。 5.2.1 单一连续分配 • 分配思想:内存分为用户区域和系统区域。在用户区只允许驻留一道程序,被一个用户所独占。 • 例子:存在于单用户、单任务的操作系统中。 • 重定位:相对地址+基地址=物理地址。有的系统采用静态重定位方式,有的系统采用动态重定位方式。 • 内存保护:一些系统采用基址、限长寄存器保护方式,一些系统没有任何保护机构。 • 特点:简单,但不能用于多用户的系统中,一般没设虚拟存储器。
0 OS 第1区 20K 第2区 28K 第3区 60K 第4区 124K 第5区 255K 5.2.2 固定分区分配 • 分配思想 • 内存分区:将内存空间划分为几个固定大小的区域;划分的原则由系统操作员或操作系统确定;所有分区大小可以相同,也可以不等;每个区域空间是连续的,且一个区域空间只能驻留一道程序,其大小及边界在程序运行过程中不能改变。 • 分区表:为实现内存固定分配,系统建立一个分区说明表(分区表),记录各分区数目、大小、起始地址和状态。
作业队列 碎片2K 作业A 作业B 50K 作业A 6K 作业C 20K 作业C 碎片12K 碎片14K 作业B • 程序装入:检索分区表,从表中寻找出一个能满足的、尚未分配的分区给该程序,并修改分区表中该分区表项的状态。若找不到大小足够的分区,则拒绝为该程序分配内存。当进程运行完毕,进程释放该分区空间,系统将该分区在分区表中对应的表项的状态改为未分配。 0 OS 20K 28K 60K 124K 255K 内存 • 缺点 • 各分配分区可能造成碎片(零头); • 程序大小受分区空间大小的限制。
5.2.3 动态分区(可变式分区)分配 • 思想 • 分区:根据作业的实际大小动态地划分分区,使分区的大小正好适应作业的需求。各分区大小是不定的,内存中分区的数目也是不定的。 • 空闲分区表(或空闲分区链):系统建立一个空闲分区表(或空闲分区链) ,记录各空闲分区数目、大小、起始地址和状态。 • 程序装入:按照一定的分配算法从空闲分区表(或空闲分区链)中选出一个能满足程序需求的分区,如果这个空闲分区比所要求的存储量大,则将其一分为二,一部分分配给作业,剩下的一部分仍留在空闲分区表(或空闲分区链),并对空闲分区表(或空闲分区链)中有关信息进行修改。若找不到大小足够的空闲分区,则拒绝为该程序分配内存。
分配算法 • 首次适应算法 • 空闲分区表按地址递增的顺序排列。在进行分配时,从空闲分区表表首开始查找,直到能满足其大小要求的空闲分区为止。然后将该分区划出一块空间给请求者,剩余的空闲部分仍留在空闲分区表中。 • 特点:优先利用内存低地址部分的空闲区。 • 优点:保留了高地址部分的大空闲区。 • 缺点 • 低地址端留下许多难以利用的很小空闲分区(碎片); • 增加查找可用空闲分区开销。
最佳适应算法 • 空闲分区表按大小递增的顺序排列。在进行分配时,从空闲分区表首开始查找,直到能满足其大小要求的空闲分区为止。然后将该分区划出一块空间给请求者,剩余的空闲分区仍留在空闲分区表中。 • 特点:优先利用了大小与程序要求最接近的空闲区。 • 优点:保留了大空闲区。 • 缺点:剩下的空闲区很小,且数量较多。
最坏适应算法 • 空闲分区表按大小递减的顺序排列。在进行分配时,判断空闲分区表首的空闲分区是否能满足其大小的要,如果大于程序需求,则从该分区中划出一部分空间给请求者,剩余的空闲分区仍留在空闲分区表中;如果小于程序需求,则拒绝内存分配。 • 特点:总是挑选出最大的分区分配给程序。 • 优点:分配给程序后剩下的空闲区较大,可能能装下其它作业。 • 缺点:最大空闲区总是首先被分配而进行划分,难于满足大作业的要求。
作业序列 0 OS 20K 作业A -18K 30K 使用 100K 20K 使用 160K 5K 0 OS 使用 210K 46K 20K 255K 30K 作业序列 0 使用 OS 20K 作业A -18K 30K 100K 20K 使用 100K 20K 使用 使用 160K 160K 5K 5K 使用 使用 210K 46K 255K 210K 46K 作业序列 0 255K OS 20K 作业A -18K 30K 使用 100K 20K 使用 160K 5K 使用 210K 46K 255K 首次适应算法空闲分区表 例子 12K 38K 最佳适应算法空闲分区表 2K 118K 首次适应算法空闲分区表 28K 228K
E E+R R • 分区回收 • 当作业运行完毕,应回收已分配的分区。回收分区时应首先检查该分区是否有上邻或下邻的空闲分区。如有邻接的空闲区,则合并成一个大的空闲区,然后修改有关的分区状态信息,有四种情况。 • 回收分区R上邻一个空闲分区,此时应合并为一个连续的空闲区。合并分区的首地址为R上邻的空闲区的首地址,其大小为两者之和。如下图所示:
R E E+R E1 E1+E2+R R E2 • 回收分区R下邻一个空闲分区,此时应合并为一个连续的空闲区。合并分区的首地址为R的首地址,其大小为两者之和。如下图所示: • 回收分区R上邻一个空闲分区,下邻一个空闲分区,此时应将这三个分区合并为一个连续的空闲区。合并分区的首地址为与R上邻的空闲区的首地址,其大小为三者之和,且应将与R下邻的空闲分区在空闲分区表中的有关信息删去。如下图所示:
0 0 OS OS 20K 20K 在使用 在使用 50K 50K 在使用 100K 70K 在使用 在使用 120K 120K 160K 在使用 210K 255K 255K • 回收分区R不与任何空闲分区相邻,此时应建立一个新的空闲区,并将有关信息加入空闲分区表中。 5.2.4 碎片问题及拼接技术 • 碎片:内存中无法被利用的小空闲区域。 • 拼接:用于解决碎片问题,使空闲区域能满足作业的要求。方式是:移动存储器中所分配区到内存的一端,使本来分散的空闲区域连成一个大的空闲区。
采用拼接技术的时机 • 在某个分区回收时立即进行拼接; • 当找不到足够大的空间,且空闲区的存储容量可以满足作业要求时进行拼接。 • 拼接技术存在的问题 • 消耗系统资源; • 当系统进行拼接时,必须停止所有其它的工作; • 拼接需要重新定位已进入内存的作业。
练习:某操作系统采用可变分区分配存储管理方法,用户区为512K,始址为0,用空闲分区表管理空闲分区。若分配时采用分配空闲区低地址部分的方案,且初始时用户区的512K空间空闲,对下述申请序列:练习:某操作系统采用可变分区分配存储管理方法,用户区为512K,始址为0,用空闲分区表管理空闲分区。若分配时采用分配空闲区低地址部分的方案,且初始时用户区的512K空间空闲,对下述申请序列: • 申请300K,申请100K,释放300K,申请150K,申请30K,申请40K,申请60K,释放30K • 回答以下问题: • (1)采用首次适应算法,空闲分区有哪些空块(给出始址、大小)? • (2)采用最佳适应算法,空闲分区有哪些空块(给出始址、大小)? • (3)如再申请100K,针对(1)和(2)各有什么结果?
5.3 对换 • 多道程序下的对换 • 在多道程序的环境下采用对换设施的背景: • 被阻塞的进程占了大量的内存空间; • 驻留在外存的大量作业,因无内存而不能运行; • 对换:内存中暂时不能运行的进程或数据,换出到外存;将已经具备运行条件的进程,或进程所需要的程序和数据,调入内存。 • 对换的目的:提高内存利用率,提高系统的吞吐量。 • 对换例子:在UNIX和Windows中具有对换的功能。 • 对换的分类 • 整体对换(进程对换):以进程为单位进行对换; • 部分对换:以页或段为单位进行对换;
OS为了实现进程的对换,必须实现以下三方面的功能:对换空间管理,进程的调出,进程的调入。OS为了实现进程的对换,必须实现以下三方面的功能:对换空间管理,进程的调出,进程的调入。 • 对换空间管理:指对换空间的分配和回收。 • 外存的划分:文件区和对换区。前者存放文件,采取离散分配方式;后者存放从内存换出的进程,采取连续分配方式。 • 对换区的分配与回收:与动态分区分配方式相似,空闲分区表,包含对换分区首址和对换区长度。 • 进程的换出:即中级调度,由对换程序执行。 • 选出被换出的进程 • 选择处于阻塞的进程,有多个时,以优先级最低和在内存驻留时间综合考虑; • 选择处于就绪的进程,有多个时,以优先级最低和在内存驻留时间综合考虑;
换出过程 • 申请对换空间->写入对换区->释放所占用的内存->修改进程控制块和内存分配表->循环前面过程。 • 注意:在进程被调出内存时,该进程的PCB仍保留在内存。 • 进程的换入:即中级调度,由对换程序执行。 • 检查PCB中所有进程的状态,从中找出“就绪且换出”状态的进程->申请内存->换入->循环前面过程。
5.4 页式存储管理及请求页式存储管理· 页式存储管理产生的背景:与分区存储管理比较。分区存储管理要求将作业放在连续的存储区中,产生许多碎片。页式存储管理允许将作业存放在不相邻的分区中,实现非连续分配,可有效地解决碎片问题。 5.4.1 页式存储管理 • 实现思想 • 页面(页):用户作业地址空间被分为大小相等区域。 • 块(物理块):存储空间被分为与页大小相等的区域。 • 分配:以块为单位分配,可将任意一页放在任意一块中;一次性分配所有页面所需要的块。 • 页表:系统为每个进程建立一张页面与物理块的映射表,即:记录相应页在内存中对应的物理块号,称为页表,一般驻留在内存中。
页表 内存 用户作业 页号 块号 0 0×1024=0 1 0 2 0页 2 1×1024=1024 1 4 1页 3 2×1024=2048 2 7 2页 4 3×1024=3072 … … … 5 4×1024=4096 6 5×1024=5120 7 6×1024=6144 8 7×1024=7168 假设页面大小为1K=1024字节 …
页号P1 页号P2 …… …… …… …… …… …… …… …… 位移w 相对 相对 位移w 页号P 页内位移w 0 10 9 15 • 页式逻辑地址结构:作业装入内存或进程访问某个逻辑地址中的数据时,由机器硬件将作业的逻辑地址划分为页号和页内地址(系统地址结构所决定的),如下所示。 • 按照上述的结构来分,作业逻辑地址被分为两部分。假设某系统地址为16位,则按上图的地址结构,两部分地址长度为16位,0~9位为页内地址,即每页大小为210=1K;10~15位为页号,即地址空间最多允许有28=64个页面。
一般说,具体操作系统的页面大小是固定的(假设为L),当给定一个逻辑地址空间中的地址为A时,则A转换为页号p和页内地址w可按下式求得:一般说,具体操作系统的页面大小是固定的(假设为L),当给定一个逻辑地址空间中的地址为A时,则A转换为页号p和页内地址w可按下式求得: • P=int[A/L] w=A mod L • 如:设页面大小为1KB=1024,有一个逻辑地址A=3484,则p= int[3484/1024]=3,w= 3484 mod 1024=412 • 地址变换过程(重定位过程) • 分页地址变换机构自动将逻辑地址分为页号和页内位移两部分,再以页号为索引去检索页表。在检索前,先将页号和页表长度进行比较,如果页号超过页表长度,则表示本次要访问的地址超过进程的地址空间,系统产生越界中断。如果页访问合法,则由页表起始地址和页号计算出相应页表项的位置,得到该页的物理块号。最后将块号的起始物理地址与逻辑地址中的页内位移相加,得到物理地址。
越界中断 逻辑地址 页表寄存器 页表始址 页表长度 页号 页内位移 < + 页号 块号 0 x 1 y 物理地址 2 z … … 块始址+页内位移 页表
页表始址 页表长度 2 452 越界中断 逻辑地址 页表寄存器 < + 页号 块号 0 2 物理地址 1 3 8×1024+452=8644 2 8 … … 页表 例题:假设某系统为16位系统,页面大小为1K,逻辑地址为2500的页面为2,页内位移为452,则该逻辑地址转换过程如下:
具有高速缓存的地址变换机构 • 页表放在内存,存取一个数据或一条指令至少要访问两次内存。这种方式效率低。为提高查表速度,增设了高速缓存(联想存储器)。通常将正在运行作业当前访问的页表项存放在高速缓存中,页表的其余部分放在内存中。 • 地址变换过程:页号与高速缓存所有页号比较,若其中有与其匹配的页号,取出对应的块号,形成物理地址;若没有匹配的页号,还需访问内存的页表,找出对应块号,形成物理地址,并将所找到的页表项加到高速缓存中。若高速缓存已满,则必须按某种原则淘汰一个表项以腾出位置。
作业:若有一分页存储管理系统中,某作业页表如下表所示。已知页面大小为1024字节,试将逻辑地址1011,2148,3000,4000和5015转化为相应的物理地址。作业:若有一分页存储管理系统中,某作业页表如下表所示。已知页面大小为1024字节,试将逻辑地址1011,2148,3000,4000和5015转化为相应的物理地址。 页表 页号 块号 0 2 1 3 2 1 3 6
页面是否在内存 该页最近访问记录 该页调入内存后是否被修改 该页在外存的地址 5.4.2 请求页式存储管理 • 页式存储管理的局限性:要求将所有作业的页面一次调入内存,不利于大作业的运行。 • 请求页式存储管理实现思想 • 页面、块与页式存储管理一样; • 区别1:部分页面装入内存,当所需要的页面不在内存时由操作系统将其调入。 • 区别2:页表结构修改。为发现所需页面是否在内存以及为了处理当要访问的页面不在内存的情况,必须对页式存储管理的页表结构进行修改,如下:
区别3:地址变换。当访问的页面在内存时,地址变换与页式存储管理 相同;当不在内存时,产生缺页中断,用户程序被中断,控制转到调页程序,由调页程序根据该页在外存的地址将其调入内存;当内存有空闲块时,只要将该页面装入任何空闲块,并将块号填入页表中相应的表目,同时修改状态位;若内存无空闲块,则必须先淘汰主存中某一页面,若被淘汰的页在主存中被修改过,将其写回辅存。 • 页面置换算法 • 目的:用于确定应淘汰哪一页的策略。 • 抖动:刚被淘汰出去的页,过后不久又要被访问,需要再次调入,而调入不久又再次被淘汰,然后又要访问,如此反复,使系统将大部分时间花在页面的调进和调出上。 • 分类:最佳置换算法、先进先出置换算法和最近最久未使用置换算法。
页面置换算法 • 最佳置换算法:从内存中移出永远不再需要的页面。若无这样的页面,则选出最长时间不再需要的页面。特点:不实际。 • 先进先出置换算法:选择在主存驻留时间最长的一页并将其淘汰。特点:对按线性顺序访问的程序比较适合,另外,可能出现Belady现象。 • 最近最久未使用置换算法:选择最近一段时间内没有被访问过的页淘汰。特点:实现比较困难。
例题:在一个请求分页存储管理系统中,一个作业的页面的走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数分别是3和4时,试计算采取下述页面置换算法时缺页率(假设开始执行时主存中没有页面),并比较结果。例题:在一个请求分页存储管理系统中,一个作业的页面的走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数分别是3和4时,试计算采取下述页面置换算法时缺页率(假设开始执行时主存中没有页面),并比较结果。 • (1)最佳置换淘汰算法; • (2)先进先出淘汰算法; • (3)最近最久未使用淘汰算法。
解(1)使用最佳淘汰(置换)算法,页面淘汰情况如下:解(1)使用最佳淘汰(置换)算法,页面淘汰情况如下: • 物理块数为3时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 第1块 4 3 1 缺 4 缺 4 3 缺 4 3 2 缺 4 3 1 4 3 1 4 3 5 缺 4 3 5 4 3 5 2 3 5 缺 2 1 5 缺 2 1 5 第2块 第3块 缺页 • 故缺页率:7/12=58.3%
物理块数为4时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 第1块 4 3 2 1 缺 4 缺 4 3 缺 4 3 2 缺 4 3 2 1 4 3 2 1 4 3 2 5 缺 4 3 2 5 4 3 2 5 4 3 2 5 1 3 2 5 缺 1 3 2 5 第2块 第3块 第4块 缺页 • 故缺页率:6/12=50%
(2)使用先进先出淘汰(置换)算法,页面淘汰情况如下:(2)使用先进先出淘汰(置换)算法,页面淘汰情况如下: • 物理块数为3时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 第1块 1 3 2 缺 4 缺 4 3 缺 4 3 2 缺 1 4 2 缺 1 4 3 缺 5 4 3 缺 5 4 3 5 4 3 5 2 3 缺 5 2 1 缺 5 2 1 第2块 第3块 缺页 • 故缺页率:9/12=75%
物理块数为4时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 第1块 4 3 2 1 缺 4 缺 4 3 缺 4 3 2 缺 4 3 2 1 4 3 2 1 5 3 2 1 缺 5 4 2 1 缺 5 4 3 1 缺 5 4 3 2 缺 1 4 3 2 缺 1 5 3 2 缺 第2块 第3块 第4块 缺页 • 故缺页率:10/12=83.3%
(3)使用最近最久淘汰(置换)算法,页面淘汰情况如下:(3)使用最近最久淘汰(置换)算法,页面淘汰情况如下: • 物理块数为3时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 1 3 2 缺 第1块 4 缺 4 3 缺 4 3 2 缺 1 4 2 缺 1 4 3 缺 5 4 3 缺 5 4 3 5 4 3 2 4 3 缺 2 1 3 缺 2 1 5 缺 第2块 第3块 缺页 • 故缺页率:10/12=83.3%
物理块数为4时: 左向 • 4 3 2 1 4 3 5 4 3 2 1 5 第1块 4 3 2 1 缺 4 缺 4 3 缺 4 3 2 缺 4 3 2 1 4 3 2 1 4 3 5 1 缺 4 3 5 1 4 3 5 1 4 3 5 2 缺 4 3 1 2 缺 5 3 1 2 缺 第2块 第3块 第4块 缺页 • 故缺页率:8/12=66.7%
5.4.3 页的共享与保护 • 在页式存储管理下的共享实现 • 可重入代码(纯代码):允许多个进程进行同时访问的代码。不允许在执行过程中可重入代码有任何改变。 • 实现方法:使共享同一个可重入代码的各进程的页表中,都建立可重入代码的页表项,即指向相同的物理块。 • 缺点: • 被共享的部分不一定被包含于一个完整的页面中。不该被共享的数据也被共享,不利于保密; • 被共享的页面在诸作业中页内地址可能不同; • 保护 • 越界保护; • 在页表中设置访问控制信息;
5.4.4 页式存储管理系统的特点 • 优点 • 有效解决碎片; • 提供虚拟存储管理,方便用户利用大的存储空间,有利于多道程序执行。 • 缺点 • 要求一定的硬件支持; • 增加系统开销; • 可能产生抖动(在请求页式存储管理中可能产生); • 可能产生页内碎片; • 不利于数据的共享。
作业1:有一矩阵 • int a[100][100]; • 按先行后列次序存储。假设在一虚拟系统中,采用最近最久未使用的淘汰策略(LRU),一个进程有3页内存空间,每页可以存放200个整数,其中第一页存放程序,且假定程序已在内存。 • 程序A: for (i=1;i<=100;i++) • for (j=1;j<=100;j++) • a[i][j]=0; • 程序B: for (j=1;j<=100;j++) • for (i=1;i<=100;i++) • a[i][j]=0; • 问:程序A和程序B在执行过程的缺页次数。
5.5 段式与请页式存储管理 段式存储管理产生的背景:分区存储管理存在碎片的问题;分页存储管理实现了非连续分配,较好地解决了碎片问题,但不利于数据的共享以及难以满足用户二维地址空间的要求(即不能满足用户的要求);在一般情况下,用户作业空间是二维的,即按一定的逻辑关系将作业分段,每段有自己的名字,用户可以根据名字来访问相应的程序或数据段。段式存储管理能较好地解决上述问题。 5.5.1 段式存储管理 • 实现思想 • 作业地址空间分段:作业的地址空间由若干逻辑分段组成,每一分段为一组逻辑意义完整的信息集合,每段有自己的名字,且每一分段都是首地址为0的连续一维地址空间。因此,整个地址空间是二维的。见下图。
0 0 0 0 500 300 1k 400 分段a (子程序) 分段c (堆栈段) 分段main (主程序) 分段b (数据段) • 内存分配:以段为单位分配内存,每段分配一个连续的内存区,但各段不要求连续。内存的分配与回收类似动态分区分配。 • 地址空间结构:作业地址空间是二维的,由段号和段内位移组成。 段号S 段内位移W 16 15 23 0
段表:为了实现从逻辑地址转变到物理地址,系统为每个进程创建一个段表。段表:为了实现从逻辑地址转变到物理地址,系统为每个进程创建一个段表。 • 地址变换过程 • 为了实现从地址的转换,在系统中设置了段表寄存器,用于存放段表的起始地址和段表的长度。在进行地址转换时,系统将逻辑地址中的段号与段表长度进行比较,若段号超过段表长度,表示超界,产生越界中断;若未越界,根据段表起始地址和段号计算出该段对应段表项的位置,读出该段在内存的起始地址,然后再检查段内地址是否超过该段的段长,若超过则同样发出越界中断信号;若未越界,则将该段在内存的起始地址与段内位移相加,从而得到要访问的物理地址。 • 快表:为了提高内存访问速度,也可使用快表。