操作系统页式储管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Use=0 3
Use=1
8
8
Page727
Page222 Use=0
Page556 Use=0
Page33 Use=1
Page67
Use=1
Page13
4
Page67
Page13
4
Use=1
Use=0
Use=1
Use=0
7
7
5
5
6
6
(b)下一页替换后的缓冲区状态
(a)一个页替换前的缓冲区状态
当发生缺页中断时,将要进入主存的页面是page727,指针指向的是page45(在页框2中)。Clock页 面替换算法执行如下:page45的”引用位”是1,故它不能被淘汰掉,仅把其”引用位”清0,指 针推进。同样道理,page191(在页框3中)也不能被替换, 把其”引用位”清0,指针继续推进。在 下一页即page556(在页框4中),它的”引用位”是0,于是,page556被page727替换,并把page727的” 引用位”置1,指针前进到下一页page13(在页框5中)。算法执行到此结束。
• 第一个问题可以通过扩充页表的方法解 决;第二个问题当内存没有空闲页面时 即是页面置换算法的问题。
※ 页表表项
• 页号、驻留位、内存块号、外存始址、访 问位、修改位
• 驻留位(中断位):表示该页是在内存还 是在外存
• 访问位:根据访问位来决定淘汰哪页(由 不同的算法决定)
• 修改位:查看此页是否在内存中被修改过
效率较低
地址映射机制
P’
d
物理地址
页表地址寄存器
b
页表长度寄存器
l
逻辑地址
页号p 页内地址d
+ 页表
比较 P>=l
地址越界
p’
高速
快表
缓存
p p’ ...
地址映射机制
P’
d
物理地址
6.4.4 静态页式管理
• 将程序的逻辑地址空间和物理内存划分 为固定大小的页或页面(page or page frame),程序加载时,分配其所需的所有 页,这些页不必连续。
FIFO:缺页9次
请求n个页面
存储页面表中有 n个空闲页面吗
设置请求表,将页表 始址,页表长度置入 请求表中,置状态已分配
搜索存储页面表,分配 n个页面,并将页面号
填入页表中
返回
无法分配
3. 简单页式管理的地址变换
• 指令所给出地址分为两部分:逻辑页号, 页内偏移地址->查进程页表,得物理页 号->物理地址
– 为缩短查找时间,引入快表,按内容查找 (associative mapping),即逻辑页号->物理 页号
4. 最佳算法(OPT, optimal)
选择“未来不再使用的”或“在离当前最远位置上 出现的”页面被置换。这是一种理想情况,是实际 执行中无法预知的,因而不能实现。可用作性能评 价的依据。
430411232 444411222
33333333 0000000
××× √ × √ × √ √
※ 影响缺页次数的因素
430411232 444444433
33311111 0000222
××× √ × √ ×× √
430411232 430411232
43044123 4300411
××× √ × √ ×× √
3.时钟页面替换算法(Clock Policy)
* 一个页面首次装入主存时,其”引用位”置0。 * 在主存中的任何一个页面被访问时, 其”引用位” 置1。 * 淘汰页面时,存储管理从指针当前指向的页面开 始扫描循环队列,把所迁到的”引用位”是1的页 面的”引用位”清成0,并跳过这个页面; 把所迁到 的”引用位”是0的页面淘汰掉,指针推进一步。 * 它是LRU(最近最久未使用算法)和FIFO的折衷。
• Belady现象:采用FIFO算法时,如果对一个进程未 分配它所要求的全部页面,有时就会出现分配的页 面数增多,缺页率反而提高的异常现象。
• Belady现象的描述:一个进程P要访问M个页,OS 分配N个内存页面给进程P;对一个访问序列S,发 生缺页次数为PE(S,N)。当N增大时,PE(S, N)时 而增大,时而减小。
• 显然地,请求页式更能有效利用有限的内存页 面,不过,这种方式需要有效解决缺页率的问 题,尤其是页面置换的问题;
• 不论是静态还是请求方式,更多地是从物理页 面的角度考虑和解决问题,有的时候,需要从 逻辑角度考虑问题,比如共享,这就引入了段 式管理方法。
习题:某程序在内存中分配三个页面,
初始为空,页面走向为4,3,2,1,4, 3,5,4,3,2,1,5,计算采用FIFO , LRU , OPT进行页面置换时相应的缺页次 数。
– 逻辑页号(本进程的地址空间)->物理页面号 (实际内存空间);
• 存储页面表:整个系统有一个存储页面表,描 述物理内存空间的分配使用状况。
– 数据结构:位示图,空闲页面链表;
• 请求表:整个系统有一个请求表,描述系统内 各个进程页表的位置和大小,用于地址转换, 也可以结合到各进程的PCB里;
2. 分配算法
页号
页内地址
• 内存空间 按页的大小划分为大小相等的区域,称 为内存块(物理页面)
• 内存分配 以页为单位进行分配,并按作业的页数 多少来分配。逻辑上相邻的页,物理上 不一定相邻
0 1 2 3 4 5 6
作业的 地址空间
页框 页号 (物理块)
. 0 . 1 . 2 . 3 . 4 . 5 . 6
6.4.5 动态(请求)页式管理
• 在进程开始运行之前,不是装入全部页 面,而是装入部分页面,之后根据进程 运行的需要,动态装入其它页面;当内 存空间已满,而又需要装入新的页面时, 则根据某种算法淘汰某个页面,以便装 入新的页面。
• 请求页式的地址变换与静态页式的相同。
• 但是,由于只让部分页面驻留内存,如 何发现那些不在内存的虚页以及如何处 理是请求页式必须处理的问题。
1第1页框
n
0
n
0
1
Page9
Page19
use=1
Use=1
Page1
Use=0
下一个帧指
2 Page45
针
Use=1
Page9 use=1
Page19 Use=1
1
Page1 Use=0
2 Page45
Use=0
Page191
Page33
Page191
Use=1 3
Page222 Use=0
6.4 页式存储管理
6.4.1 基本原理 6.4.2 管理 6.4.3 硬件支持 6.4.4 静态页式管理 6.4.5 请求页式管理 6.4.6 页式管理的优缺点
6.4.1 基本思想(工作原理)
• 用户程序划分
把用户程序按逻辑页划分成大小相等的 部分,称为页。从0开始编制页号,页内 地址是相对于0编址 • 逻辑地址
• 首先,需要有一个页表地址寄存器和页表 长度寄存器。系统把所调度执行的进程页 表始址和长度从请求表中取出置入寄存器
• 然后,找到页表。由虚地址100可知,指令 在第0页的第100单元中,对应内存地址为 1024*2+100=2148
• 当CPU执行到第2148单元时,需要从虚地 址2500中取数据,地址变换机构首先将 2500的页号和页内位移求出:2;452
• Belady现象的原因:FIFO算法的置换特征与进程访 问内存的动态特征是矛盾的,即被置换的页面并不 是进程不会访问的。
Belady现象的例子
进程P有5页程序访问页的顺序为:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5;
如果在内存中分配3个页面,则缺页情况如下: 12次访问中有缺页9次;
• 由页表可知,对应内存8号,内存地址为 1024*8+452=8644
• 以上由硬件地址变换机构自动完成。
• 优点:
– 没有外碎片,每个内碎片不超过页大小。 – 一个程序不必连续存放。
– 便于改变程序占用空间的大小。即随着程序运 行而动态生成的数据增多,地址空间可相应增 长。
• 缺点:程序全部装入内存,受到内存可用 页面数的限制。
4444333 √ ××××××
2.最近最久未使用算法(LRU)
该算法淘汰的页面是在最近一段时间里较久未 被访问的那一页。它是根据程序执行时所具有的局 部性来考虑的,即那些刚被使用过的页面,可能马 上还要被使用,而那些在较长时间里未被使用的页 面,一般说可能不会马上使用到。
给某作业分配了三块主存,该作业依次访问的页号为:4, 3,0,4,1,1,2,3,2。于是当访问这些页时,页面淘 汰序列的变化情况如下:
页号 中断位 内存块号 外存始址 访问位 修改位
※ 缺页中断处理ຫໍສະໝຸດ Baidu
• 在地址映射过程中,在页表中发现所要访问的 页不在内存,则产生缺页中断。操作系统接到 此中断信号后,就调出缺页中断处理程序,根 据页表中给出的外存地址,将该页调入内存, 使作业继续运行下去
• 如果内存中有空闲块,则分配一页,将新调入 页装入内存,并修改页表中相应表项
(1) 分配给进程的物理页面数 (2) 页面本身的大小 (3) 程序的编制方法 (4) 页面淘汰算法
例子3:内存分配一页,初始时第一页在内存; 页面大小为128个整数;矩阵A128X128按行存 放
程序编制方法1: For j:=1 to 128 For i:=1 to 128 A[i,j]:=0;
8
C.1
9
C.2
10
C.3
11
12
13
14
0
A.0
1
A.1
2
A.2
3
A.3
4
5
6
7
C.0
8
C.1
9
C.2
10
C.3
11
12
13
14
0
A.0
1
A.1
2
A.2
3
A.3
4
D.0
5
D.1
6
D.2
7
C.0
8
C.1
9
C.2
10
C.3
11
D.3
12
D.4
13
14
1. 简单页式管理的数据结构
• 页表:每个进程有一个页表,描述该进程占用 的物理页面及逻辑排列顺序;
• 若此时内存中没有空闲块,则要淘汰某页,若 该页在内存期间被修改过,则要将其写回外存
逻辑地址
无登记
有登记
查快表
在辅存
在主存
查页表
形成绝对地址
发缺页中断
保护现场 无
主存有空闲块 有 装入所需页面
调整页表和 主存分配表 恢复现场
重新执行 被中断指令
登记入快表
继续执行指令 硬件完成
未修改
选择调出页面 该页修改过?
已修改
把该页写回 辅存相应位置
※ 页面置换算法
• 随机置换算法 • 先进先出算法(FIFO) • 最近最久未使用算法(LRU, Least Recently
Used) • 时钟页面替换算法(Clock Policy) • 最佳置换算法(OPT, optimal)
1. 先进先出算法(FIFO)
选择建立最早的页面被置换。可以通过链表来 表示各页的建立时间先后。性能较差。较早调入的 页往往是经常被访问的页,这些页在FIFO算法下 被反复调入和调出。并且有Belady现象。
程序编制方法2: For i:=1 to 128 For j:=1 to 128 A[i,j]:=0;
6.4.6 页式管理的优缺点
• 相对于分区管理而言,静态页式有效的解决了 外部碎片的问题(当然有少量的内部碎片);
• 但是,静态页式要求全部装入,不支持虚拟存 储,因而有了请求页式,允许部分装入;
12341251 11144455
2221111 333222
××××××× √
2345 5555 1333 2244
√ ×× √
如果在内存中分配4个页面,则缺页情况如下: 12次访问中有缺页10次;
12341 11111
2222 333
44 ×××× √
2512345 1555544 2211115 3332222
Frame Number
0 1
2 3 4 5 6 7 8 9 10 11 12 13 14
0
A.0
1
A.1
2
A.2
3
A.3
4
5
6
7
8
9
10
11
12
13
14
0
A.0
1
A.1
2
A.2
3
A.3
4
B.0
5
B.1
6
B.2
7
8
9
10
11
12
13
14
0
A.0
1
A.1
2
A.2
3
A.3
4
B.0
5
B.1
6
B.2
7
C.0
Virtual Address
Page # Offset
Frame # Offset
Register
Page Table Ptr
Page Table
+ P#
Frame #
Offset
Page Frame
Program
Paging
Main Memory
页号 页面号
02 13 28
• 设每个页面长度为1k,指令LOAD 1,2500 的虚地址为100,依据左图进 行地址变换。
页表
主存中页框 (物理块)
6.4.2 管理
• 页表:系统为每个进程建立一个页表, 页表给出逻辑页号和具体内存块号相应 的关系。
页号 0 1 2
页面号 2 3 8
6.4.3 硬件支持
页表地址寄存器
b
页表长度寄存器
l
逻辑地址
页号p 页内地址d
+ 页表
p’
比较 P>=l
地址越界
二次访问内存 第一次取地址 第二次存取数据