操作系统存储管理(2)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.地址变换过程
在段页式系统中,为了便于实现地址变换,须配置一个 段表寄存器,其中存放段表始址和段表长TL。进行地址变换 时,首先利用段号S,将它与段表长TL进行比较。若S<TL, 表示未越界,于是利用段表始址和段号来求出该段所对应的 段表项在段表中的位置,从中得到该段的页表始址,并利用 逻辑地址中的段内页号P来获得对应页的页表项位置,从中 读出该页所在的物理块号b,再利用块号b和页内地址来构成 物理地址。图4-23示出了段页式系统中的地址变换机构。
3.虚拟存储器的定义
基于局部性原理,应用程序在运行之前,没有必要全部 装入内存,仅须将那些当前要运行的少数页面或段先装入内 存便可运行,其余部分暂留在盘上。程序在运行时,如果它 所要访问的页(段)已调入内存,便可继续执行下去;但如果 程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时 程序应利用OS所提供的请求调页(段)功能,将它们调入内存, 以使进程能继续执行下去。如果此时内存已满,无法再装入 新的页(段),则还须再利用页(段)的置换功能,将内存中暂时 不用的页(段)调至盘上,腾出足够的内存空间后,再将要访 问的页(段)调入内存,使程序继续执行下去。
1. 两级页表
逻辑地址结构可描述如下:
图 4-4-4 两级页表结构
虚拟地址 目录位移 页表位移 页位移
页目录(每进程一个)
+
页表 块号
内存块
页表地址
. . .
+ 代码或数据
.
.
.
.
.
.
页目录地址
二级页表结构及地址映射
多级页表
• 32位 进程页表多大? 设:页面大小为4K 用户空间 2GB 则:一个进程 219页 设:每个内存块号 4字节 则:进程页表 512页
4.4.2 页面与页表
1.页面和物理块
分页存储管理,是将一个进程的逻辑地 址空间分成若干个大小相等的片,称为页面 或页,并为各页加以编号。相应地,也把内 存空间分成与页面相同大小的若干个存储块, 称为(物理)块或页框(frame),在为进程分配 内存时,以块为单位将进程中的若干个页分 别装入到多个可以不相邻接的物理块中。由 于进程的最后一页经常装不满一块而形成了 不可利用的碎片,称之为“页内碎片”。
• 分页:把用户程序按逻辑页划分成大 小相等的部分,称为页或虚页。从0 开始编制页号,页内地址是相对于0 编址。
内存块
• 块:内存按页的大小划分为大小相等的 区域,称为内存块(物理页面,页框)
• 内存按页的大小划分为大小相等的区域, 称为内存块(物理页面,页框)。
• 内存分配:以页为单位进行分配,并按 作业的页数多少来分配。逻辑上相邻的 页,物理上不一定相邻,通过页表把作 业的各个页面与页框对应起来。
分段管理中作业i与段表、存储空间的关系
逻辑段号
0
0
M
K
10X P
0
2
Y
L
0
3
A
N
. 长度 段地址 . 0 K 3200 . 1 P 1500 . 2 L 6000 . 3 N 8000
1000 3200
操作系统
操作系统
P
K
4 S 5000
5000
S
6000
L
0
4
B
S
作业1的地址空间
8000
N
主存
3. 硬件支持
4.快表
如果把页表放在主存中,无疑会影响系统的 性能。这是因为每次访问主存,首先必须访问页 表,读出页描述子,之后根据形成的实际地址再 访问主存,这样使访问主存的次数加倍,因而使 总的处理速度明显下降。
为了解决这个问题人们采用一组硬件寄存器, 存放当前访问过的页的页描述子,
每次访问主存时,首先查找快表,若找到所 需的页描述子,则快速形成物理地址。否则从页 表中查找后形成物理地址,同时把页描述子写入 快表。如果设计得当,快表的命中率可以很高。
2.页表
• 列出了作业的逻辑地址与其在主存中的物 理地址间的对应关系。
• 页面大小: 页面的大小应选择得适中,且 页面大小应是2的幂,通常为512 B~8 KB
• 一个页表中包含若干个表目,表目的自然 序号对应于用户程序中的页号,表目中的 块号是该页对应的物理块号。
• 页表的每一个表目除了包含指向页框的指 针外,还包括一个存取控制字段。
1. 基本的地址变换机构
图 4-4-2分页系统的地址变换机构
2. 地址变换过程
• 例如指令 LOAD 1,2500 的地址变换过程如下:
地址变换过程(续)
• 把虚拟地址2500转换成页号P=2,位移量W=452; • 如果页号2大于页表大小,则中断;否则继续; • 页号2与页表起址1000运算(1000+2*20,设页描
(2) 过程调用将会使程序的执行轨迹由一部分区域转至 另一部分区域,但经研究看出,过程调用的深度在大多数情 况下都不超过5。这就是说,程序将会在一段时间内都局限在 这些过程的范围内运行。
(3) 程序中存在许多循环结构,这些虽然只由少数指令 构成,但是它们将多次执行。
(4) 程序中还包括许多对数据结构的处理,如对数组进行 操作,它们往往都局限于很小的范围内。
2.局部性原理
早在1968年,Denning.P就曾指出:程序在执行时将呈 现出局部性规律,即在一较短的时间内,程序的执行仅局限 于某个部分;相应地,它所访问的存储空间也局限于某个区 域。他提出了下述几个论点:
(1) 程序执行时,除了少部分的转移和过程调用指令外, 在大多数情况下仍是顺序执行的。该论点也在后来的许多学 者对高级程序设计语言(如FORTRAN语言、PASCAL语言)及 C语言规律的研究中被证实。
地址越界
快表
地址越界 d>=1
比较
lb
S lb ...
地址映射及存储保护机制
d>=1
比较
地址越界
b+d
物理地址
4. 分页和分段的主要区别
(1) 页是信息的物理单位,段则是信息的逻 辑单位 (2) 页的大小固定且由系统决定,而段的长 度却不固定 (3) 分页的作业地址空间是一维的,即单一 的线性地址空间,分段的作业地址空间则 是二维的
4.5.3 信息共享
图 4-5-3 分页系统中共享editor的示意图
图 4-5-4 分段系统中共享editor的示意图
分段管理的优缺点
优点: 便于动态申请内存 管理和使用统一化 便于共享 便于动态链接
缺点:产生碎片
思考:与可变分区存储管理方案的 相同点与不同点?
4.5.4 段页式存储管理方式
• 表目也称为页描述子。
分页管理中页与页框的对应 关系示意图
3. 地址结构
分页地址中的地址结构如下:
31
12 11
0
页号P
位移量W
对某特定机器,其地址结构是一定的。若给定一个逻
辑地址空间中的地址为A,页面的大小为L,则页号P和页
内地址d可按下式求得:
P
INT
A L
d [ A]MODL
4.4.3 地址变换机构
第四章 存储器管理
4.4 基本分页存储管理 4.5 基本分段存储管理 4.6 虚拟存储器
第四章 存储器管理
4.4 分页存储管理
4.4.1 页式存储管理的引入
• 在动态分区的存储空间中, 存在“零 头”问题。尽管采用“紧凑”技术可以解 决这个问题,但要为移动大量信息花 去不少的处理机时间,代价较高。
4.6.1 虚拟存储器的引入
1.常规存储器管理方式的特征
(1) 一次性。在前面所介绍的几种存储管理方式中,都 要求将作业全部装入内存后方能运行,即作业在运行前需一 次性地全部装入内存,而正是这一特征导致了上述两种情况 的发生。此外,还有许多作业在每次运行时,并非其全部程 序和数据都要用到。如果一次性地装入其全部程序,也是一 种对内存空间的浪费。
1) 3) 信息保护 5) 动态链接
2) 信息共享 4)
0 ... ... CALL [X] [E]
CALL [Y] [F]
... ... CALL [A] 116
K
主程序段[M]
0 ... E ...
P
子程序段[X]
0 ... F ...
L
子程序段[Y]
0 ...
116 12345
N
数组[A]
0
(2) 驻留性。作业装入内存后,便一直驻留在内存中, 直至作业运行结束。尽管运行中的进程会因I/O而长期等待, 或有的程序模块在运行过一次后就不再需要(运行)了,但它 们都仍将继续占用宝贵的内存资源。
由此可以看出,上述的一次性及驻留性,使许多在程序 运行中不用或暂不用的程序(数据)占据了大量的内存空间, 使得一些需要运行的作业无法装入运行。现在要研究的问题 是:一次性及驻留性在程序运行时是否是必需的。
述子大小为20)得到页描述子地址为1040; • 从页描述子中读取块号8; • 根据页描述子的“存取控制”判断该指令是否被
允许访问内存,如果不允许,则中断;否则继续; • 块 号 8 与 位 移 量 452 运 算 ( 8*1024+452=9644 ,
1024为页面大小)得到物理地址9644; • 把数字1写进内存地址9644单元中。
• 结论:一个进程的页表的各页之间可以不 连续存放
• 解决:页表本身使用地址索引——页目录
第四章 存储器管理
4.5 分段存储管理
4.5.1 分段式存储管理的引入
在分页存储系统中,作业的地址空间是 一维线性的,这破坏了程序内部天然的逻辑 结构,造成共享、保护的困难。引入分段存 储管理方式, 主要是为了满足用户和程序员
局限性还表现在下述两个方面:
(1) 时间局限性。如果程序中的某条指令一旦执行,则 不久以后该指令可能再次执行;如果某数据被访问过,则不 久以后该数据可能再次被访问。产生时间局限性的典型原因 是由于在程序中存在着大量的循环操作。
(2) 空间局限性。一旦程序访问了某个存储单元,在不久 之后,其附近的存储单元也将被访问,即程序在一段时间内 所访问的地址,可能集中在一定的范围之内,其典型情况便 是程序的顺序执行。
• 系统设置一对寄存器 • 段表始址寄存器:
用于保存正在运行进程的段表的始址 • 段表长度寄存器:
用于保存正在运行进程的段表的长度 (例如上图的段表长度为3)
3. 地址变换机构
图 4-5-2 分段系统的地址变换过程
段表始址寄存器 段表长度寄存器
Cb
Cl
逻辑地址 段号S 段内地址d
+
段表
比较 S>= Cl
1.基本原理
段页式系统的基本原理,是分段和分页原理的结合,即 先将用户程序分成若干个段,再把每个段分成若干个页,并 为每一个段赋予一个段名。图4-21示出了一个作业地址空间 的结构。该作业有三个段,页面大小为4 KB。在段页式系统 中,其地址结构由段号、段内页号及页内地址三部分所组成, 如图4-22所示。
4.6 虚拟存储器的基本概念
前面所介绍的各种存储器管理方式有一个共同的特点, 即它们都要求将一个作业全部装入内存后方能运行,于是, 出现了下面这样两种情况:
(1) 有的作业很大,其所要求的内存空间超过了内存总 容量,作业不能全部被装入内存,致使该作业无法运行。
(2) 有大量作业要求运行,但由于内存容量不足以容纳所 有这些作业,只能将少数作业 装入内存让它们先运行,而将 其它大量的作业留在外存上等待。
...
S
工作区段[B]
4.5.2 分段系统的基本原理
1. 分段 分段地址中的地址具有如下结构:
段号Fra Baidu bibliotek
段内地址
31
16 15
0
2.段表
段号 0 1 2
段首址 58K 100K 260K
段长度 20K 110K 140K
它记录了段号,段的首(地)址和 长度之间的关系
每一个程序设置一个段表,放在 内存,属于进程的现场信息
在段页式系统中,为了获得一条指令或数据, 须三次访问内存。第一次访问是访问内存中的段表, 从中取得页表始址;第二次访问是访问内存中的页 表,从中取出该页所在的物理块号,并将该块号与 页内地址一起形成指令或数据的物理地址;第三次 访问才是真正从第二次访问所得的地址中,取出指 令或数据。
显然,这使访问内存的次数增加了近两倍。为 了提高执行速度,在地址变换机构中增设一个 高速缓冲寄存器。每次访问它时,都须同时利 用段号和页号去检索高速缓存,若找到匹配的 表项,便可从中得到相应页的物理块号,用来 与页内地址一起形成物理地址;若未找到匹配 表项,则仍须再三次访问内存。
具有快表的地址变换机构
图 4-4-3 具有快表的地址变换机构
4.4.4 两级和多级页表
现代的大多数计算机系统,都支持非常大 的逻辑地址空间(232~264)。页表就变得非常大, 要占用相当大的内存空间。可采用两个方法来 解决这一问题:① 采用离散分配方式来解决 难以找到一块连续的大内存空间的问题:② 只将当前需要的部分页表项调入内存,其余的 页表项仍驻留在磁盘上,需要时再调入。