第四章 存储器管理 4.0 引言 4.1 连续分配方式 4.2 基本分页存储管理方式 4.3 基本分段存储管理方式 4.4 段页式存储管理方式 4.5 虚拟存储器的基本概念 4.6 请求分页存储管理方式 4.7 页面置换算法 4.8 请求分段存储管理方式 本章的主要内容如下: (1) 存储管理的目的和四大基本功能。 (2) 实存管理中讲述了固定分区存储管理、 可变式分区存储管理、基本分页存储管 理等存储管理方案的实现原理 (3) 虚存管理以请求式分页存储管理为重点 (4) 总结各种存储管理方案中存在的碎片和 抖动问题及解决方法 4.0 引 言 内存(Main Memory或Primary Memory或 Real Memory)也称主存,是指CPU能直接 存取指令和数据的存储器。 图4.01 内存在计算机系统中的地位.

Download Report

Transcript 第四章 存储器管理 4.0 引言 4.1 连续分配方式 4.2 基本分页存储管理方式 4.3 基本分段存储管理方式 4.4 段页式存储管理方式 4.5 虚拟存储器的基本概念 4.6 请求分页存储管理方式 4.7 页面置换算法 4.8 请求分段存储管理方式 本章的主要内容如下: (1) 存储管理的目的和四大基本功能。 (2) 实存管理中讲述了固定分区存储管理、 可变式分区存储管理、基本分页存储管 理等存储管理方案的实现原理 (3) 虚存管理以请求式分页存储管理为重点 (4) 总结各种存储管理方案中存在的碎片和 抖动问题及解决方法 4.0 引 言 内存(Main Memory或Primary Memory或 Real Memory)也称主存,是指CPU能直接 存取指令和数据的存储器。 图4.01 内存在计算机系统中的地位.

第四章
存储器管理
4.0
引言
4.1
连续分配方式
4.2
基本分页存储管理方式
4.3
基本分段存储管理方式
4.4
段页式存储管理方式
4.5
虚拟存储器的基本概念
4.6
请求分页存储管理方式
4.7
页面置换算法
4.8
请求分段存储管理方式
本章的主要内容如下:
(1) 存储管理的目的和四大基本功能。
(2) 实存管理中讲述了固定分区存储管理、
可变式分区存储管理、基本分页存储管
理等存储管理方案的实现原理
(3) 虚存管理以请求式分页存储管理为重点
(4) 总结各种存储管理方案中存在的碎片和
抖动问题及解决方法
4.0
引
言
内存(Main Memory或Primary Memory或
Real Memory)也称主存,是指CPU能直接
存取指令和数据的存储器。
图4.01 内存在计算机系统中的地位
高
速 价
寄存器
小
容
高速缓存
主存储器
度 格
量
磁盘缓存
磁盘
低
可移动存储介质
大
图4.02 多级存储器体系示意图
继续
主存储器
可执行的程序必须被保存在主存储器,与
外围设备交换的信息一般也依托于主存储
器地址空间。
返回
高速缓存和寄存器
由于处理器在执行指令时主存访问时间远大
于其处理时间,所以高速缓存和寄存器被引
入来加快指令执行速度。
寄存器是访问速度最快但最昂贵的存储器,
容量小,以字为单位。
高速缓存容量稍大,访问速度快于主存储器,
利用它存放主存中一些经常访问的信息可以
大幅度提高程序执行速度。
返回
磁盘缓存
本身并不是一种实际存在的存储介质,
它依托于固定磁盘,提供对主存储器存
储空间的扩充
返回
存储管理的作用
(1)为用户使用存贮器提供方便,这包含两个含义:一
是,每个用户都以独立的方式编程,即用户只需在各自的
逻辑空间内编程,而不必关心他的程序在内存空间上的物
理位置;其次是,为用户提供充分大的存贮空间,使得用
户程序的大小不受实际内存容量的限制,即用户不必关心
(2)充分发挥内存的利用率,既要为每个用户程序提供
足够大的内存空间,使它们得以有效地运行,又要不浪费
内存空间,在合理的前提下,让尽可能多的用户程序进驻
内存运行。
存储管理的功能
• 内存的分配与回收
• 存储共享
• 存储保护
• 存储扩充
• 地址重定位
1、内存空间的分配与回收
确定分配算法
实施内存分配
回收内存
分配回收方式: 静态分配与动态分配
(1)静态分配:作业要求的内存空间是在目
标模块连接装入内存时确定并分配之,且在作业
的整个运行过程中不允许再申请,即分配工作是
(2) 动态分配:作业要求的基本内存空间是
在目标模块装入时确定并分配的,但在作业运行
过程中允许申请附加的内存空间,即分配工作可
连续性 ;
驻留性 ;
一次性;
离散性
交换性
多次性
2 、存储共享
内存共享:两个或多个进程共用内存中相
同区域
目的:
节省内存空间,提高内存利用率
实现进程通信(数据共享)
共享内容:
代码共享,要求代码为纯代码
数据共享
纯代码:在一段程序代码中,没有任何代码
直接或间接写全局变量的动作,同时也不
存在其他任何代码写这段代码中可能用到
的全局变量的可能性.
3 、存储保护与安全
保护目的:
为多个程序共享内存提供保障,使在内
存中的各道程序, 只能访问它自己的区
域,避免各道程序间相互干预,特别是
当一道程序发生错误时, 不致于影响其
他程序的运行。通常由硬件完成保护功
能,由软件辅助实现。
存储保护
保护系统程序区不被用户侵犯
(有意或无意的)
不允许用户程序读写不属于自己地址空
间的数据(系统区地址空间,其他用户
程序的地址空间)
保护过程----防止地址越界
每个进程都有自己独立的进程空间,
如果一个进程在运行时所产生的地址在
其地址空间之外,则发生地址越界。即
当程序要访问某个内存单元时,由硬件
检查是否允许,如果允许则执行,否则
产生地址越界中断,由操作系统进行相
应处理。
保护过程----防止地址越界
一般由硬件提供一对寄存器:
基址寄存器:存放起始地址
限长寄存器:存放长度
(上界寄存器/下界寄存器)
图4.03 界限寄存器的两种存储保护方式
返回本节
保护过程----防止操作越权
对于允许多个进程共享的存储区域,
每个进程都有自己的访问权限。如果一
个进程对共享区域的访问违反了权限规
定,则发生操作越权。
即读写保护。
4 内存“扩充”
通过虚拟存储技术实现
用户在编制程序时,不应该受内存容量
限制,所以要采用一定技术来"扩充"内
存的容量,使用户得到比实际内存容量
大的多的内存空间。
内存“扩充”
具体实现是在硬件支持下,软硬件
相互协作,将内存和外存结合起来统一
使用。通过这种方法把内存扩充,使用
户在编制程序时不受内存限制。
5 、地址映射
(地址重定位,地址变换)
(1) 逻辑地址(相对地址,虚地址)
(2) 物理地址(绝对地址,实地址)
(3) 地址映射
(1)内存空间(或物理空间)
内存是由若干个存储单元组成的,每个
存储单元有一个编号,这种编号可唯一
标识一个存储单元,称为内存地址(或
物理地址),可直接寻址。
(2)逻辑空间
源程序经过汇编或编译后,形成目标程
序,每个目标程序都是以0为基址顺序进
行编址的,原来用符号名访问的单元用
具体的数据——单元号取代。这样生成
的目标程序占据一定的地址空间,称为
作业的逻辑地址空间,简称逻辑空间。
在逻辑空间中每条指令的地址和指令中
要访问的操作数地址统称为逻辑地址。
不能用逻辑地址在内存中读取信息。
源程序
0 逻辑地址空间
物理地址空间
100
Load A data1
编译连接
Load A 200
地址映射
BA=1000
200
data1 3456
1200
3456
Load A 200
3456
。
。
。
(3)地址映射
为了保证CPU执行指令时可正确访问存储
单元,需将用户程序中的逻辑地址转换
为运行时由机器直接寻址的物理地址,
这一过程称为地址映射。
逻辑地址空间
0
..
.
BR
物理地址空间
1000
..
.
+
LOAD A 200
LOAD A 200
0
VR
100
200
LOAD A 200
..
.
3456
..
.
300
200
..
.
3456
3456
..
.
..
.
1000
1100
1200
1300
原因: 当程序装入内存时, 操作系统要
为该程序分配一个合适的内存空间,由
于程序的逻辑地址与分配到内存物理地
址不一致, 而CPU执行指令时,是按物理
地址进行的,所以要进行地址转换。
静态重定位
当用户程序被装入内存时,一次性实现
逻辑地址到物理地址的转换,以后不再
转换(一般在装入内存时由软件完成)。
动态重定位
在程序运行过程中要访问数据时再进行
地址变换(即在逐条指令执行时完成地
址映射。一般为了提高效率,此工作由
硬件地址映射机制来完成。硬件支持,
软硬件结合完成)。
硬件上需要一对寄存器的支持。
4.1 连续分配方式
4.1.1 单一连续分配
单用户系统在一段时间内,只有一个进程
在内存,故内存分配管理十分简单,内
存利用率低。
内存分为两个区域,一个供操作系统使
用,一个供用户使用。
0xFFF...
用户程序
ROM中的
设备驱动程序
位于RAM中的
操作系统
用户程序
位于RAM中的
操作系统
用户程序
0
位于RAM中的
操作系统
0
0
4.1.2 固定分区存储管理
固定分区存储管理是实现多道程序设计的最简
单的一种存储管理技术。
其基本思想是:在作业未进入内存之前,就由
操作员或操作系统把内存可用空间划分成若干
个固定大小的存储区,除操作系统占用一个区
域外,其余区域为系统中多个用户共享,因为
在系统运行期间,分区大小、数目都不变,所
以固定式分区也称为静态分区。
1. 划分分区的方法
(1) 分区大小相等。
(2) 分区大小不等。
多个输入队列
分区4
700K
分区4
单个输入队列
分区3
分区3
400K
分区2
分区2
300K
分区1
分区1
100K
操作系统
操作系统
0
2. 内存分配
图 4.11 固定分区使用表
固定分区存储管理的地址转换和
存储保护
操作系统区
下限寄存器
B
用户分区1
越界中断
CPU
用户分区2
< B+L2
逻辑地址
绝对地址
用户分区3
用户分区4
用户分区5
上限寄存器
B+L2
用户分区6
图 4.12
4.1.3 可变式分区存储管理
内存不是预先划分好的,而是当作业装
入时,根据作业的需求和内存空间的使
用情况来决定是否分配。若有足够的空
间,则按需要分割一部分分区给该进程;
否则令其等待主存空间。
1.空闲分区的组织形式
2.常用的分配算法
3.内存的分配与回收
4. 地址转换与存储保护
5. 存储共享
进程队列
进程
需要内存大小
运行时间
1
2
3
4
5
60KB
100KB
30KB
70KB
50KB
10
5
20
8
15
0 操作系统
40K
进程
1
100K
进程
2
200K
0
40K
操作系统
进程
1
40K
操作系统
进程
1
100K
100K
装入进
程4
进程2
结束
200K
0
170K
200K
0
0 操作系统
40K
256K
操作系统
40K
40K
进程1
结束
进程
4
170K
200K
进程5
装入 90K
进程5100K
100K
进程
4
0 操作系统
进程
4
170K
230K
230K
230K
230K
200K 进程3
230K
256K
256K
256K
256K
256K
进程3
进程3
进程3
图 4.13
进程3
1. 分区分配中的数据结构(空闲分区的组织形式)
可变分区主存分配表可由两张表格组成,
• 一张称”已分配分区表”
• 另一张”未分配分区表”
分区号 起始地址
长度
标志
1
40KB
60KB
2
3
100KB
200KB
200KB
230KB
job1
job2
job3
长度
标志
26KB
未分配
已分配分区表
分区号 起始地址
1
230KB
未分配分区表
•(2) 空闲分区链。
前
向
指
针
N
£«
2
后
向
指
针
N个 字 节 可 用
0
图 4.15 空闲链结构
N
£«
2
0
0
20K
操作系统
0
6K 72K
0
26K
50K
6K
0
作业1
0 11K
0
0 11K 72K
61K
72K
100K
作业2
0
11K 50k
0 11K 20K
空闲分区链表组织形式示例
图 4.16 空闲链组织形式
2. 分区分配算法
(1)首次适应算法
空闲表是按位置排列的(即空闲块地址小的,在
表中的序号也小)。
(2)最佳适应算法
空闲表是以空闲块的大小为序、按增量形式排列
的,即小块在前,大块在后。
(3)最差适应算法
空闲表是以空闲块的大小为序、按递减次序排列
的,即大块在前,小块在后。
图4.17 首次适应算法的空闲分区链表组织形式
图4.18 最佳适应算法的空闲分区链表组织形式
图4.19 最差适应算法的空闲分区链表组织形式
从 头开 始 查表
3. 分区分配操作
1) 分配内存
检 索完 否 ?
Y
返回
N
N
继 续检 索 下一 个 表项
Y
.
图
4
1
10
内
存
分
配
流
程
m. size£ ¾u. size?
Y
.
m. size£ -u.size¡Ü size ?
N
从 该分 区 中划 出
u.size 大 小 的 分 区
将 该分 区 分配 给 请求 者修
改 有关 数 据结 构
返回
将 该分 区 从链 中 移出
2) 回收内存
A
X
变为
B
A
B
A
X
变为
X
B
x
X终止前
变为
A
B
变为
X终止后
图 4.1.11 内存回收时的情况
4.可变分区地址转换与存储保护
限长寄存器
基址寄存器
限长
基址
操作系统区
空闲分区1
CPU
逻辑地址
<
限长
N
越界中断
用户作业1
Y
绝对地址
空闲分区2
5. 存储共享
多对基址/限长寄存器
• 允许一个进程占用两个或多个分区。规
定某对基址/限长寄存器的区域是共享
的,用来存放共享的程序和常数,对共
享区域的信息只能读出不能写入。
• 进程共享的例行程序就可放在限定的公
用区域中,而让进程的共享部分具有相
同的基址/限长值。
存储碎片
内部碎片:内存某存储区间大于其存放作
业空间的部分。
外部碎片:内存某存储区间容不下要运行
的作业时。
作业长度:5KB,8KB,12KB
4KB
OS
3KB
OS
外部碎片
4KB
6KB
12KB
内部碎片
12KB
作业:
1.什么叫地址重定位,它有哪两种基本方法。
2.固定分区存储管理如何进行存储保护?
3.可变分区存储管理可采用的存储分配算法
有哪几种?
4.1.4
1.
操 作系 统
操 作系 统
用 户 程 序1
用 户 程 序1
10 KB
用 户 程 序3
用 户 程 序3
用 户 程 序6
30 KB
用 户 程 序9
用 户 程 序6
14 KB
用 户 程 序9
80 KB
26 KB
(a ) 紧 凑 前
(b ) 紧 凑 后
图 4.1.12 紧凑的示意
紧缩
移动某些已分配区的内容,使所有进程的分区紧挨在一
起,而把空闲区留在另一端。这种技术称为紧缩(或拼
凑)。
操作系统
操作系统
操作系统
作业1
作业1
作业1
空闲区
作业2
作业2
作业2
作业3
作业3
空闲区
空闲区
作业4
作业3
空闲区
空闲区
•紧缩时机
什么时候进行紧缩呢?有两种不同的方案。
第1种方案是当进程结束、释放所占用的分区时。
第2种方案是在分配进程的分区时进行
2.
图 4.19 动态重定位示意图
图4.1.13 动态重定位的实现过程
3. 动态重定位分区分配算法
请 求分 配
u.size 分 区
检 索 空 闲 分 区 链 (表 )
无 法分 配
返回
否
空 闲分 区
总 和 ≥ u.size?
否
找 到 大 于u.size
的 可用 区 否?
是
进 行紧 凑 形
成 连续 空 闲区
按 动态 分 区方 式
进 行分 配
修 改有 关 的
数 据结 构
修 改有 关 的
数 据结 构
图 4.1.14 动态分区分配算法流程图
返 回分 区 号
及 首批
可重定位分区法的优缺点
• 优点是可以消除碎片,能够分配更多的分
区,有助于多道程序设计,提高内存的利
用率。紧缩为作业执行过程中动态扩充主
存提供了方便。便于共享内存。
• 它的缺点是:紧缩花费了大量CPU时间
思考:
如果允许作业执行过程中动态扩充主存,
可能会产生什么问题?
死 锁
4.1.5 对换(Swapping)
1. 对换的引入
所谓“对换”, 是指把内存中暂时不能运行
的进程或者暂时不用的程序和数据,调出到外存
上,以便腾出足够的内存空间,再把已具备运行
条件的进程或进程所需要的程序和数据,调入内
存。对换是提高内存利用率的有效措施。
图4.1.15 对换两个进程
图4.1.16 多道程序对换技术示例
2. 对换空间的管理
为了能对对换区中的空闲盘块进行管理,在系统
中应配置相应的数据结构,以记录外存的使用情况。
其形式与内存在动态分区分配方式中所用数据结构相
似,即同样可以用空闲分区表或空闲分区链。在空闲
分区表中的每个表目中应包含两项, 即对换区的首址
及其大小,它们的单位是盘块号和盘块数。
对换(映像)区大小
• 考虑将最小一道作业从主存送出去。
假定主存中最多容纳n道作业,主存能
提供给一道作业的最大容量为V,那
么,送出去的作业的辅助存储器区域
大小为:
(1/2 + 1/3 + ┅ + 1/n)·V
3. 进程的换出与换入
(1) 进程的换出。
每当一进程由于创建子进程而需要更多的内存空
间,但又无足够的内存空间等情况发生时,系统应将某进
程换出。 其过程是:系统首先选择处于阻塞状态且优先级
最低的进程作为换出进程,然后启动盘块,将该进程的程
序和数据传送到磁盘的对换区上。若传送过程未出现错误,
便可回收该进程所占用的内存空间,并对该进程的进程控
制块做相应的修改。
(2) 进程的换入。
系统应定时地查看所有进程的状态,从中找出“就绪”
状态但已换出的进程,将其中换出时间(换出到磁盘上)最
久的进程作为换入进程,将之换入,直至已无可换入的进
程或无可换出的进程为止。
无论是哪一种对换式存贮管理都涉及到下述三个
(1)对需换进的进程分配的内存空间必须是它
原先占据过的空间,或者允许分配一个新的空间?
(2)对进程实体是整体还是部分交换?
(3)关于对换时间。
4.2
基本分页存储管理方式
4.2.1
分页式存储管理的基本原理
4.2.2
快表
4.2.3
分页式存储空间的页面共享和保护
4.2.4
多级页表
4.2.1 分页式存储管理基本原理
• 为什么要引进分页技术?
• 基本原理
(1) 页面
(2) 逻辑地址形式
(3) 页框
(4) 页面与页框间联系
(5) 页表和地址转换
(1) 页面
把用户程序按逻辑页划分成大小相等的部分,
称为页。从0开始编制页号,页内地址是相
对于0编址。
(2) 逻辑地址形式
页号
页内地址
用户程序的划分是由系统自动完成的,对用户
是透明的。一般,一页的大小为2的整数次幂,
因此,地址的高位部分为页号,低位部分为页
内地址。
页内位移量W
页号P
23
12 11
编号0~4096
相对地址0~4096
0
若给定一个逻辑地址空间中的地址为A,页面的大
小为L,则页号P和页内地址d可按下式求得:
 A
P  INT
 L 


d  [ A ] MODL
(3) 页框
把内存空间分成与页面相同大小的若干个存
储块,称为(物理)块或页框(frame), 也同
样为它们加以编号,如0#块、1#块等等。
(4) 页面与页框间联系
在为进程分配内存时,以块为单位将进程中
的若干个页分别装入到多个可以不相邻接的
物理块中。
0
1
2
3
4
5
6
作业的
地址空间
主存中页框
逻辑上相邻的页,物理上不一定相邻。
作业的页面与分给的页框如何建立联系呢?
逻辑地址(页面)如何变换成物理地址(页框)呢?
(5) 页表和地址转换
1.页表:系统为每个进程都建立了一个页表,
页表给出逻辑地址号和具体内存块号相应
的关系
页号 块号
0
12
1
5
2
7
…
…
页号 块号
3
0
0
5
1
1
3
2
2
14
3
3
12
4
4
23
19
5
5
19
23
6
6
25
作业的
地址空间
页表
5
12
14
25
主存中页框
2.地址转换
1) 硬件支持
• 一对寄存器:
a 页表始址寄存器
b 页表长度寄存器
• 快表
a 页号
b 页在内存的块号
c 标识位
d 淘汰位
2). 基本的地址变换机构
越 界中 断
页 表寄 存 器
页 表始 址
+
逻 辑地 址 L
页 表长 度
>
页号
0
页 号 (3)
页 ÄÚ µØ Ö·
块号
1
1
2
3
b
物 理地 址
页表
0k
1k
2k
21
例: 若在一分页存储管理系统中,某作业的页
表如下所示。已知页面大小为1024字节,试将逻
辑地址1011,2148,3000,5012转化为相应的物
理地址。
页号
0
1
2
3
块号
2
3
1
6
解 :设页号为P,页内位移为W,逻辑地址为A,内存
地址为M,页面大小为L,则
对于逻辑地址1011
P=int(1011/1024)=0
W=1011 mod 1024=1011
A=1101=(0,1101)
查页表第0页在第2块,
所以物理地址为
M=1024*2+1101= 3059。
…
3).
页 表寄 存 器
页 表始 址
逻 辑地 址 L
页 表长 度
>
越 界中 断
页 ÄÚ µØ Ö·
页号
+
页号
块号
b
页表
页号
块号
输
入
寄
存
器
b
快表
图 4-13 具有快表的地址变换机构
b
d
物 理地 址
利
用
快
表
实
现
地
址
转
换
4.2.3
分页式存储空间的页面共享和保护
通过页表可以使几个逻辑空间指向同一个物
理空间,实现程序共享。
举例:
P1
P2
EDIT1
EDIT2
EDIT3
DATA2
EDIT1
EDIT2
EDIT3
DATA1
3
4
6
1
页表
0
OS
1
DATA1
2
P3
EDIT1
EDIT2
EDIT3
DATA3
3
4
6
7
3
4
EDIT1 EDIT2
5
3
4
6
10
6
7
EDIT3 DATA2
8
9
10
DATA3
11
存储保护:
• 越界保护:设置页表长度寄存器,查
页表前,先检查页号是否越界。
• 操作访问保护:在每个页表项中增设
一存储保护域,用于说明对该页的访问
权限,每一个对该页存储的访问都首先
比照是否满足该页访问权限的说明,满
足则访问,否则报错。
举例:设为每一页表项增加三位,R位表
示读权限,W位表示写权限,E位表示执行
权限。
R
W
E
0
0
0 不可进行任何操作
0
0
1 可以执行,不可以读写
0
1
0 只可以写
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
4.2.4
多级页表
大多数现代计算机系统都支持非常大的
逻辑地址空间,如232 ~264。在这种情况
下,只用一级页表会使页表变得非常大。
一种方法是利用两级页表,即把页表本
身也分页。
两级页表地址结构
两
级
页
表
结
构
两级页表结构的地址转换
三级页表地址结构
4.3
基本分段存储管理方式
4.3.1 基本分段存储管理的基本概念
1.分段
每段都有自己的名字长度。
分段地址空间
模块化程序设计的分段结构
主程序段
┇
call [X]∣<E>
(调用X段的入口E)
┇
call [Y]∣<F>
(调用Y段的入口F)
┇
load 1,[A]∣<G>
(调用数组段
A[G])
┇
子程序段X
E:┅┅┅┅┅┅
子程序段Y
F:┅┅┅┅┅┅
数组段A
G:┅┅┅┅┅┅
工作区段
2.程序的地址结构
• 逻辑地址要用两个成分来表示:段号s和段内地址
d。在分段存储情况下,进程的逻辑地址空间是
二维的。
分段技术地址结构
3.内存分配
• 内存以段为单位进行分配,每段单独占用一块连
续的内存分区。各分区的大小由对应段的大小决
定。
4.段表和段表地址寄存器
• 系统为每个进程建立一个段映射表,简称
“段表”。每个段在段表中占有一项,段表
项中包含段号、段长和段起始地址(又称
“基址”)等。
• 系统还要建立一个段表地址寄存器。
• 一部分指出该段表在内存的起始地址;另一
部分指出该段表的长度。
0
作 业空 间
(M AIN )£½ 0
内 存空 间
0
段表
30 K
0
15 K
0
段长
基址
0
30 K
40 K
(X )£½ 1
20 K
0
段号
1
20 K
80 K
2
15 K
12 0K
(D )£½ 2
3
10 K
15 0K
(S)£½3
(M AIN )£½ 0
30 K
(X )£½ 1
20 K
(D )£½ 2
15 K
(S)£½3
10 K
10 K
利用段表实现地址映射
40 K
80 K
12 0K
15 0K
4.3.2
地址转换
控 制寄 存 器
段 表始 址
越界
段 表长 度
>
段 号S
位 移 量W
2
10 0
有 效地 址
+
段号
段长
基址
0
1K
6K
1
60 0
4K
2
50 0
8K
3
20 0
92 00
+
82 92
8K
82 92
86 92
主存
分段系统的地址变换过程
物 理地 址
4.3.3
段的共享和保护
1.段的共享
• 共享是在段一级实现的,任何共享信息可以
单独成为一段。
• 也可以只共享部分程序。
分段系统中段的共享
进 程1
段表
ed itor
段长
基址
da ta 1
16 0
80
40
24 0
ed itor
da ta 2
da ta 1
24 0
28 0
…
进 程2
ed itor
80
16 0
80
40
38 0
分段系统中共享editor的示意图
da ta 2
38 0
42 0
2.段的保护
•
•
•
•
•
•
段的保护措施包括以下三种:
① 存取控制。
② 段表本身可起保护作用。
表项中设置该段的长度限制
段长
段表地址寄存器中有段表长度的信息。
• ③ 保护环。
4.3.4 分页和分段的主要区别
① 页是信息的物理单位。
段是信息的逻辑单位。
② 页的大小是由系统确定的
段的长度因段而异
③ 分页的进程地址空间是一维的
分段的进程地址空间是二维的。
4.4 段页式存储管理方式
1. 基本原理
0
Ö÷³ÌÐò ¶Î
0
×Ó ³ÌÐò ¶Î
0
4K
4K
4K
8K
8K
8K
10 K
12 K
12 K
15 K
16 K
Êý ¾Ý¶Î
(a )
¶Îº Å(S)
¶ÎÄ ÚÒ ³ºÅ( P)
¶ÎÄ Úµ ØÖ· (W)
(b )
作业地址空间和地址结构
操 作系 统
段 表寄 存 器
段 表大 小
段号 状态
0
1
2
3
4
段 表始 址
页 表大 小
1
1
1
0
1
页 表始 址
页号 状态
0
1
1
1
2
1
3
0
4
1
存 储块 #
段表
页表
主存
利用段表和页表实现地址映射
2. 地址变换过程
段 表寄 存 器
段 表始 址
段 表长 度
>
段 超长
段 号S
页 号P
页 内地 址
+
段表
页表
0
0
1
1
2
2
3
页 表长 度
+
3
b
页 表始 址
段页式系统中的地址变换机构
块号 b
块 内地 址
4.5 虚拟存储器的基本概念
物理地址空间
虚拟地址空间
主存
虚地址 存储
处理器
实地址
管理
部件
虚拟存储器的概念图
辅存
4.5.1
1.
(1) 一次性。
(2) 驻留性。
2.
(1) 时间局限性。如果程序中的某条指令一旦执行, 则不
久以后该指令可能再次执行;如果某数据被访问过, 则不
久以后该数据可能再次被访问。产生时间局限性的典型原
(2) 空间局限性。一旦程序访问了某个存储单元,在不久
之后,其附近的存储单元也将被访问,即程序在一段时间
内所访问的地址,可能集中在一定的范围之内,其典型情
况便是程序的顺序执行。
3. 虚拟存储器定义
所谓虚拟存储器, 是指具有请求调入功能和置换功能,
能从逻辑上对内存容量加以扩充的一种存储器系统。其逻
辑容量由内存容量和外存容量之和所决定,其运行速度接
近于内存速度,而每位的成本却又接近于外存。可见,虚
拟存储技术是一种性能非常优越的存储器管理技术,故被
广泛地应用于大、 中、 小型机器和微型机中。
4.5.2 虚拟存储器的实现方法
实现虚拟存储器须解决的问题:
•主存辅存统一管理问题、
•逻辑地址到物理地址的转换问题、
•部分装入和部分对换问题。
1. 分页请求系统
(1)硬件支持。
① 请求分页的页表机制,它是在纯分页的页表机
制上增加若干项而形成的,作为请求分页的数据结构;
② 缺页中断机构,即每当用户程序要访问的页面
尚未调入内存时 便产生一缺页中断,以请求OS将所
缺的页调入内存;
③ 地址变换机构, 它同样是在纯分页地址变换机
构的基础上发展形成的。
(2) 实现请求分页的软件。
2. 分段请求系统
(1)硬件支持。
① 请求分段的段表机制;
② 缺段中断机构;
③ 地址变换机构;
(2) 实现请求分段的软件。
4.5.3 虚拟存储器的特征
1. 多次性
2. 对换性
3. 虚拟性
4. 离散性
4.6 请求分页存储管理方式
4.6.1 请求分页中的硬件支持
1. 页表机制
页号
物理块号
状态位P
访问字段A
修改位M
外存地址
2. 缺页中断机构
页面
6
B£ º
5
4 A£ º
3
2
1
指令
co py A
TO
B
涉及6次缺页中断的指令
3. 地址变换机构
程 序请 求 访问 一 页
开始
缺 页中 断 处理
请
求
分
页
中
的
地
址
变
换
过
程
页 号> 页 表长 度 ?
是
保 留 CPU 现 场
否
CPU 检 索 快 表
从 外存 中 找到 缺 页
内 存满 否 ?
否
页 表项 在 快表 中 ?
是
否
选 择一 页 换出
否
该 页被 修 改否 ?
访 问页 表
产 生缺 页 中
页 在内 存 ?
断 请求 调 页
是
将 该页 写 回外 存
OS 命 令 CPU 从 外 存 读 缺 页
启 动 I/O 硬 件
是
修 改快 表
修 改访 问 位和 修 改位
形 成物 理 地址
地 址变 换 结束
将 一页 从 外存 换 入内 存
修 改页 表
是
越 界中 断
CPU送入的
逻辑地址(8196)
CPU把逻辑地
址送至MMU
0 0 1 0
0 1 0 0
CPU
内
页号 页框号 在主存否
0
MMU
存
0 0 0 0 0 0 0 0
010
1
1
001
2
110
3
000
4
100
5
011
1
1
1
MMU把物理地址送至内存
1
1
MMU的位置 、 功能和16个4KB页
面情况下MMU的内部操作
6
1 1 0
1 0 0 0
0 0000
0 0 0 0 0 0 0
7
000
9
000
MMU送出的物理地
0
址(24580)
8
101
1
0
…
请求分页虚存地址转换过程(1)
逻辑空间地址
CPU
逻辑地址
进程切换时装入
MMU
快表
页号 页内地址
②查快表
①分解地
址
主存(用户区)
⑥装入快表
④查页表
运行进程页表基址
物理地址
④不命中
辅存
页框 页内地址
主存(系统
区)运行进
程页表
③
⑤
⑤页表命中
⑦发缺页中断
⑨装入
运行进
程映象
③命中
、改表
⑧调页
缺页中断处理
访
问
请求分页虚存地址转换过程(2)
逻辑地址
无登记
有登记
查快表
在辅存
在主存
查页表
发缺页中断
形成绝对地址
登记入快表
继续执行指令
操作系统
保护现场
无
主存有空闲块
有
装入所需页面
调整页表和
主存分配表
选择调出页面
未修改
该页是否修改
已修改
恢复现场
重新执行
被中断指令
硬件
把该页写回
辅存相应位置
4.6.2 内存分配策略和分配算法
1. 最小物理块数的确定
是指能保证进程正常运行所需的最小物理块数。当
系统为进程分配的物理块数少于此值时,进程将无法运
行。
2. 物理块的分配策略
在请求分页系统中,可采取两种内存分配策略,即固定
和可变分配策略。在进行置换时, 也可采取两种策略,即全
局置换和局部置换。于是可组合出以下三种适用的策略。
1) 固定分配局部置换(Fixed Allocation, Local
Replacement)
2) 可变分配全局置换(Variable Allocation, Global
Replacement)
3) 可变分配局部置换(Variable Allocation, Local
Replacemen
3. 物理块分配算法
1)
将系统中所有可供分配的物理块,平均分配给各个进程。
2)
根据进程的大小按比例分配物理块的算法。
3)
在实际应用中,为了照顾到重要的、紧迫的作业能尽
快地完成, 应为它分配较多的内存空间。
4.6.3
1. 何时调入页面
1)
2) 请求调页策略
2. 从何处调入页面
在请求分页系统中的外存分为两部分:用于存放文件的
文件区和用于存放对换页面的对换区。通常,由于对换区是
采用连续分配方式,而事件是采用离散分配方式,故对换区
的磁盘I/O速度比文件区的高。这样,每当发生缺页请求时,
系统应从何处将缺页调入内存,
(1)
系统拥有足够的对换区空间,这时可以全部从对换区调入所
需页面,以提高调页速度。为此,在进程运行前, 便须将
与该进程有关的文件,从文件区拷贝到对换区。
(2) 系统缺少足够的对换区空间,这时凡是不会被修改
的文件,都直接从文件区调入;而当换出这些页面时,由于
它们未被修改而不必再将它们换出,以后再调入时,仍从文
件区直接调入。但对于那些可能被修改的部分,在将它们换
出时,便须调到对换区,以后需要时,再从对换区调入。
(3) UNIX方式。由于与进程有关的文件都放在文件区,
故凡是未运行过的页面,都应从文件区调入。而对于曾经运
行过但又被换出的页面,由于是被放在对换区,因此在下次
调入时,应从对换区调入。由于UNIX系统允许页面共享,
因此, 某进程所请求的页面有可能已被其它进程调入内存,
此时也就无须再从对换区调入。
3. 页面调入过程
每当程序所要访问的页面未在内存时,便向CPU发出一
缺页中断,中断处理程序首先保留CPU环境,分析中断原因
后, 转入缺页中断处理程序。该程序通过查找页表,得到该
页在外存的物理块后, 如果此时内存能容纳新页,则启动磁
盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,
则须先按照某种置换算法从内存中选出一页准备换出;如果
该页未被修改过,可不必将该页写回磁盘;但如果此页已被
修改, 则必须将它写回磁盘,然后再把所缺的页调入内存,
并修改页表中的相应表项,置其存在位为“1”,并将此页表
项写入快表中。在缺页调入内存后,利用修改后的页表, 去
形成所要访问数据的物理地址,再去访问内存数据。
4.7 页面置换算法
4.7.1
1. 最佳(Optimal)
最佳置换算法是由Belady于1966年提出的一种理论上
的算法。 其所选择的被淘汰页面,将是以后永不使用的,
或许是在最长(未来)时间内不再被访问的页面。采用最佳
置换算法,通常可保证获得最低的缺页率。
假定系统为某进程分配了三个物理块, 并考虑有以下
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
进程运行时, 先将7,0,1三个页面装入内存。 以后,
当进程要访问页面2时, 将会产生缺页中断。此时OS根据
最佳置换算法, 将选择页面7予以淘汰。
引 用率
7
0
7
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
7
7
2
2
2
2
2
7
0
0
0
0
4
0
0
0
1
1
3
3
3
1
1
页 框(物理 块 )
利用最佳页面置换算法时的置换图
1
2. 先进先出(FIFO)
引 用率
7
0
7
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
1
7
0
1
7
7
2
2
2
4
4
4
0
0
0
7
7
7
0
0
0
3
3
3
2
2
2
1
1
1
0
0
1
1
1
0
0
0
3
3
3
2
2
2
1
页框
利用FIFO置换算法时的置换图
4.7.2 最近最久未使用(LRU)置换算法
1. LRU(Least Recently Used)置换算法的描述
引 用率
7
0
7
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
7
7
2
2
4
4
4
0
1
1
1
0
0
0
0
0
0
3
3
3
0
0
1
1
3
3
2
2
2
2
2
7
页框
LRU页面置换算法
1
2. LRU置换算法的硬件支持
1)
为了记录某进程在内存中各页的使用情况,须为每个
在内存中的页面配置一个移位寄存器,可表示为
R=Rn-1Rn-2Rn-3 … R2R1R0
• 当页面被访问时,对应的寄存器的最左边
位置1;
• 每隔时间t,将r寄存器右移一位;发生缺
页中断时,找最小数值的r寄存器对应的
页面淘汰。
• 例如,r寄存器共有四位,页面
P0、P1、P2在T1、T2、T3时刻
的r寄存器内容如下:
页
时刻
面
T1
T2
P0
0100
P1
1100
P2
T3
1000
1010
1000
0110
0000
某进程具有8个页面时的LRU访问情况
2) 栈
4
4
7
0
7
1
0
1
2
1
2
6
2
1
2
6
1
0
1
1
2
1
2
0
7
7
1
0
0
0
0
1
7
7
0
0
7
7
7
7
7
0
4
4
4
4
4
4
4
4
4
7
用栈保存当前使用页面时栈的变化情况
4.7.3 Clock置换算法
1. 简单的Clock置换算法
入口
块号
1
2
否
访 问位
置 页面 访
问 位 = “0”
4
0
2
1
6
5
0
7
1
1
3
4
是
选 择该 页 面淘 汰
返回
指针
0
查 寻指 针 前进 一 步, 指 向
下 一个 表 目
页 面 访 问 位 =0?
页号
5
简单Clock置换算法的流程和示例
替换
指针
时钟页面替换算法的一个例子
第1页框
n
0
0
n
1
Page9
use=1
1
Page9
use=1
Page19
Use=1
Page19
Use=1
Page1
Use=0
Page1
Use=0
2
2
Page45
Use=1
下一个
帧指针
8
Page191
Use=1
Page33
Use=1
Page222
Use=0
Page45
Use=0
3
8
Page222
Use=0
Page556
Use=0
Page67
Use=1
Page33
Use=1
4
Page13
Use=0
Page191
Use=1
Page727
Use=1
Page67
Use=1
Page13
Use=0
4
7
7
5
5
6
6
一个页替换前的缓冲区状态
下一页替换后的缓冲区状态
3
2. 改进型Clock置换算法
由访问位A和修改位M可以组合成下面四种类型的页面:
1类(A=0, M=0): 表示该页最近既未被访问, 又未被修改,
是最佳淘汰页。
2类(A=0, M=1): 表示该页最近未被访问, 但已被修改,
并不是很好的淘汰页。
3类(A=1, M=0): 最近已被访问, 但未被修改, 该页有
可能再被访问。
4类(A=1, M=1): 最近已被访问且被修改, 该页可能再被
访问。
(1) 从指针所指示的当前位置开始, 扫描循环队列, 寻
找A=0且M=0的第一类页面, 将所遇到的第一个页面作为所
选中的淘汰页。 在第一次扫描期间不改变访问位A。
(2) 如果第一步失败,即查找一周后未遇到第一类页面,
则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇
到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所
有扫描过的页面的访问位都置0。
(3) 如果第二步也失败,亦即未找到第二类页面,则将指
针返回到开始的位置,并将所有的访问位复0。 然后重复第
一步,如果仍失败,必要时再重复第二步,此时就一定能找
到被淘汰的页。
4.7.4 其它置换算法
1. 最少使用(LFU: Least Frequently Used)置换算法
•
选择到当前时间为止被访问时间最少的页面被置换。
•
每页设置访问计数器,每页被访问时,该页面访问
计数器加1。
•
发生缺页中断时,淘汰计数值最小的页面,并将所
有计数清零
2. 页面缓冲算法(PBA: Page Buffering Algorithm)
•是对FIFO算法的发展,通过对置换页的缓冲,有机
会找回刚被置换的页面。
•被置换页面的选择和处理:用FIFO算法选择被置换
页,把被置换页面放入两个链表之一:
如果页面未被修改,就将其插入空闲页面链表的末尾。
否则将其插入到已修改页面链表的末尾。
•需要调入新的物理页时,将新页面内容读入空闲页面
链表的第一项所指页面,然后将第一项删除。
•空闲页面和已修改页面仍停留在内存一段时间,如果
这些页面被再次访问,只需较小开销。
请求页式虚拟存储系统优缺点
•优点:作业的程序和数据可按页分散存放在内存
中,减少移动开销,有效解决了碎片问题;既有
利于改进主存利用率,又有利于多道程序运行。
•缺点:要有硬件支持,要进行缺页中断处理,机
器成本增加,系统开销加大。
4.8 请求分段存储管理方式
为了能实现虚拟存储,段式逻辑地址空间中的程序段在
运行时并不全部装入内存,而是如同请求式分页存储管
理,首先调入一个或若干个程序段运行,在运行过程中
调用到哪段时,就根据该段长度在内存分配一个连续的
分区给它使用。若内存中没有足够大的空闲分区,则考
虑进行段的紧凑或将某段或某些段淘汰出去。相应于请
求式分页存储管理,这种存储管理技术称为请求式分段
存储管理。
4.8.1 请求分段中的硬件支持
1.
段名
段长
段的
基址
存取
方式
访问
修改
字段A 位M
存在
位P
增补
位
外存
始址
在段表项中, 除了段名(号)、 段长、 段在内存中的起
始地址外,
(1) 存取方式。
(2) 访问字段A。
(3) 修改位M。
(4) 存在位P。
(5) 增补位。
(6) 外存始址。
2. 缺段中断机构
虚 段 S不 在 内 存
阻 塞请 求 进程
否
内 存中 有 合适
的 空闲 区 吗?
是
空 区容 量 总
和 能否 满 足?
从 外 存 读 入 段S
否
是
修 改段 表 及内 存 空区 链
空 区拼 接 , 以 形成
一 个合 适 的空 区
淘 汰一 个 或几 个 实段 ,
以 形成 一 个合 适 空区
唤 醒请 求 进程
返回
请求分段系统中的中断处理过程
访 问 [s] [w]
3. 地址变换机构
w¡ Ü段 长 ?
否
分 段越 界
中 断处 理
是
否
分 段保 护
中 断处 理
否
缺 段中
断 处理
符 合存 取 方式 ?
是
段 S在 主 存 ?
是
修 改 访 问 字 段 ,如 写
访 问 , 置 修 改 位£½ 1
形 成访 问 主存 地 址
(A )£½(主 存 始 址)
£«(位 移 量 w)
返回
请
求
分
段
系
统
的
地
址
变
换
过
程
4. 段的动态连接
间接寻址与间接字
连接标志L=1,表示直接地址不在本段中,要进行连
接;L=0,则仅作间接地址处理。在图4-23中,一源
程序的主段MAIN中用符号名对另一段进行访问,例如
“LOAD1,[x]|〈y〉”,这里x是段名,y是
地址标号,汇编程序将其翻译成一条间接寻址指令“LO
AD1,0|200”,其中0是MAIN的段号,20
0是MAIN存放间接字的直接地址,该间接字中L=1,
并指向单元204,那里存放连接地址的符号名
“[x]|〈y〉”。
段的动态连接示例
4.8.2 分段的共享与保护
1. 共享段表
段名
段长
内 存始 址
状态
外 存始 址
共 享 进 程 计 数co unt
状态
进 程名
进 程号
段号
存 取控 制
…
…
…
…
…
…
共 享段 表
图 4-33 共享段表项
2. 共享段的分配与回收
1)
在为共享段分配内存时,对第一个请求使用该共享段的进
程,由系统为该共享段分配一物理区,再把共享段调入该区,
同时将该区的始址填入请求进程的段表的相应项中,还须在共
享段表中增加一表项,填写有关数据,把count置为1;之后,
当又有其它进程需要调用该共享段时,由于该共享段已被调入
内存,故此时无须再为该段分配内存,而只需在调用进程的段
表中,增加一表项,填写该共享段的物理地址;在共享段的段
表中,填上调用进程的进程名、存取控制等,再执行
count∶=count+1操作,以表明有两个进程共享该段。
2)
当共享此段的某进程不再需要该段时,应将该段释放,
包括撤在该进程段表中共享段所对应的表项,以及执行
count∶= count-1操作。若结果为0,则须由系统回收该共
享段的物理内存,以及取消在共享段表中该段所对应的表
项, 表明此时已没有进程使用该段;否则(减1结果不为0),
则只是取消调用者进程在共享段表中的有关记录。
3. 分段保护
1) 越界检查
2) 存取控制检查
•
只读
•
只执行
•
读/写
3) 环保护机构
•
一个程序可以访问驻留在相同环或较低特权环中的数据。
•
一个程序可以调用驻留在相同环或较高特权环中的服务。
环0
环0
调用
返回
环1
环1
调用
环2
数 据访 问
环2
返回
数 据访 问
(a ) 程 序 间 的 控 制 传 输
环保护机构
(b ) 数 据 访 问