4.8windows 2003 虚拟存储管理

31
4.8Windows 2003 虚虚虚虚虚虚 4.8.1 虚虚虚虚虚虚虚虚 4.8.2 虚虚虚虚虚虚虚虚 4.8.3 虚虚虚虚虚虚虚

Upload: carl

Post on 02-Feb-2016

146 views

Category:

Documents


0 download

DESCRIPTION

4.8Windows 2003 虚拟存储管理. 4.8.1 进程地址空间布局 4.8.2 用户空间主存分配 4.8.3 主存管理的实现. 4.8.1 主存管理的功能和地址空间布局. 1 主存管理的组成和功能 存储管理系统服务程序 转换无效和访问错误的陷阱处理程序 一组系统线程 · 工作集管理器 · 进程 / 堆栈交换程序 · 已修改页面写入器 · 映射页面写入器 · 废弃段线程 · 零页线程. FFFFFFFFH. 固定页面区 页交换区. C0000000H. 系统存储区. C0000000H. 操作系统驻留区 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4.8Windows 2003 虚拟存储管理

4.8Windows 2003 虚拟存储管理

4.8.1 进程地址空间布局4.8.2 用户空间主存分配 4.8.3 主存管理的实现

Page 2: 4.8Windows 2003 虚拟存储管理

4.8.1 主存管理的功能和地址空间布局1 主存管理的组成和功能1) 存储管理系统服务程序 2) 转换无效和访问错误的陷阱处理程序 3) 一组系统线程 · 工作集管理器 · 进程 / 堆栈交换程序 · 已修改页面写入器 · 映射页面写入器 · 废弃段线程 · 零页线程

Page 3: 4.8Windows 2003 虚拟存储管理

2 进程地址空间布局

固定页面区

页交换区

操作系统驻留区(直接映射区)

页交换区

系统存储区

用户存储区

C0000000H

80000000H

00000000H

C0000000H

FFFFFFFFH

Page 4: 4.8Windows 2003 虚拟存储管理

4 . 8 . 2 用户空间主存分配 系统管理应用程序主存有两个数

据结构:虚址描述符和区域对象;三种主存管理方法:

虚页主存分配 主存映射文件 主存堆分配

Page 5: 4.8Windows 2003 虚拟存储管理

1 虚址描述符 对每个进程,主存管理器都维

护一组 VAD ,用来描述进程地址空间哪些虚拟地址已被保留,而哪些没有,这个数据结构叫“虚地址描述符” VAD 。

Page 6: 4.8Windows 2003 虚拟存储管理

VAD 的使用 · 线程首次访问一个地址,主存

管理器为此地址的页面创建一个页表项,它找到一个包含被访问地址的 VAD ,并利用所得信息填充页表项。

· 如果访问地址落在 VAD 覆盖的地址范围外,或所在的地址范围仅被保留而未提交,将产生一次访问违规。

Page 7: 4.8Windows 2003 虚拟存储管理

2 区域对象及作用 “ 区域对象”( Section object )在

Win32 子系统中被称为“文件映射对象”,表示可被两个或多个进程所共享的主存块。其作用有:

系统利用区域对象将可执行映象装入主存;

高速缓存管理器利用区域对象访问高速缓存文件中的数据;

使用区域对象将文件映射到进程地址空间,可像访问主存中数组一样访问这个文件,而不是对文件进行读写。

Page 8: 4.8Windows 2003 虚拟存储管理

区 域最大尺寸页保护限制盘交换区/映射文件基本/非基本区域

创建区域打开区域扩展区域映射/取消映射视口查询区域

对象类型

对象属性

对象服务

区域对象的结构

Page 9: 4.8Windows 2003 虚拟存储管理

区域对象的使用 一个区域对象代表可由两个或多个进程

共享的主存块。 一个进程的线程可创建区域对象,为它

起名字,以便其他进程的线程能打开这个区域对象的句柄。

区域对象句柄被打开后,线程就能把这个区域对象映射到自己或另一个进程的虚地址空间中。

Page 10: 4.8Windows 2003 虚拟存储管理

3 应用程序主存管理方法1) 虚页主存分配 系统中使用虚拟主存,分三个

阶段:· 保留主存( reserved memor

y )· 提交主存( committed memo

ry ) · 释放主存 (release memory)

Page 11: 4.8Windows 2003 虚拟存储管理

2) 主存堆分配 堆( heap)是保留地址空间中一个或

多个页组成的区域,并由堆管理器按更小块划分和分配主存的技术。

缺省进程堆。HeapCreate 创建私有堆, Heap Destr

oy 释放私有堆。GetprocessHeap得到指向堆的句柄,HeapAlloc 和 HeapFree从堆中分配和回收主存块。

Page 12: 4.8Windows 2003 虚拟存储管理

3) 主存映射文件 (1) Memory-mapped File允许进程分配一段虚地址

空间或某一个盘文件相关联,当把盘文件映射到该地址空间后,多个进程可以方便地访问。主存映射文件用于三种场合 :

(1) 执行体使用主存映射把可执行文件 .exe 和动态连接库 .dll 文件装入主存,节省应用程序启动时间。 (2) 进程使用主存映射文件存取磁盘文件信息,减少文件 I/O和对文件进行缓存。 (3) 多个进程使用主存映射文件来共享主存中的数据和代码。

Page 13: 4.8Windows 2003 虚拟存储管理

主存映射文件 (2)使用步骤

步 1 使用 CreateFile 打开文件 步 2 使用 CreateFile Mapping建立文件映射步 3 使用MapViewOfFile 读写文件视窗 步 4 使用 OpenFileMapping 打开文件映射

对象 步 5使用 UnmapViewOfFile解除映射

Page 14: 4.8Windows 2003 虚拟存储管理

4.8.3 主存管理的实现 1 进程页表与地址映射 •在 x86 硬件平台上采用二级页表结

构来实现进程的逻辑地址到物理地址的转换。

·32位逻辑地址解释成三个分量,页目录索引( 10位)页表页索引( 10位)和位置索引( 12位),页面大小为 4KB。

Page 15: 4.8Windows 2003 虚拟存储管理

2 页框号数据库 (1) 所有主存物理页框组成了页框

数据库( Page Frame Datebase ) ,每个页框占一项,每项称为一个 PFN结构( Page Frame Number )。

Page 16: 4.8Windows 2003 虚拟存储管理

工作集索引

页表项地址

共享计数

标识 类型 访问计数

初始页表项的内容

页表项的页框号

工作集中页面的 PFN

前向链接

页表项地址

后向链接

标识 类型 访问计数

初始页表项的内容

页表项的页框号

后备或修改链表中页面的 PFN

事件地址

页表项地址

共享计数

标识 类型 访问计数

初始页表项的内容

页表项的页框号

正在 I/O页面的 PFN

前向链接

页表项地址

后向链接

标识 类型 访问计数

初始页表项的内容

页表项的页框号

零或空闲链表中页面的 PFN

页框号数据库 (2)

Page 17: 4.8Windows 2003 虚拟存储管理

页框号数据库 (3) PFN可能状态

有效( Vaild )过渡( transition )后备( Stand by )修改( Modified )修改不写入( modiqied no write ) 空闲( free ) 零初始化( zeroed )坏( bad )

Page 18: 4.8Windows 2003 虚拟存储管理

页框号数据库 (4)请求零页面错误 从盘或内核读出页 ( 页错误 )

缩小工作集

缺页错误处理

进 程工 作集

进 程工 作集

修改页写回线程

修改页框链表

修改页框链表

备用页框链表备用页框链表

零页页框链表

零页页框链表

空闲页框链表

空闲页框链表

零初始化线程

页框的状态转换

Page 19: 4.8Windows 2003 虚拟存储管理

3 缺页处理 (1)1) 无效页处理(1) 访问一个未知页,其页表项为零,或者页

表不存在,线程首次访问一个地址。(2) 所访问的页没有驻留在主存,而是在磁盘

的某个页文件或映像文件中,系统分配一个物理页框,将所需的页从磁盘读出,放入工作集中。

(3) 所访问的页在后备链表或更改链表中,将此页移到进程或系统工作集。

(4) 访问一个请求零页,给进程工作集添加一个由零初始化的页。

Page 20: 4.8Windows 2003 虚拟存储管理

缺页处理 (2)(5) 对一个只读页执行写操作,访问违约。(6) 从用户态访问一个只能在核心态下访问的

页,访问违约。(7) 对一个写保护页执行写操作,写违约。(8) 对一个写时复制的页执行写操作,为进程

进行页复制。(9) 在多处理机系统中,对有效但尚未执行写

操作的页执行写操作,将页表项修改位置“ 1” 。

Page 21: 4.8Windows 2003 虚拟存储管理

4原型页表项 (1) 当两个进程共享一个物理页框时,主存管理器在进程页表中插入一个称作“原型页表项”prototype PTE的数据结构来间接映射共享的页面。

Page 22: 4.8Windows 2003 虚拟存储管理

原型页表项 (2)

PFN

进程 1 页目录表

有效 :PFN=j

无 效 : 指向原型 PTE

页表

段结构

有效 :PFN=j

无 效 : 在页文件

PFNj

PFN=jPTE地址共享计数 =2

原型页表

主存

页框数据库

原型页表项

PFN

进程 2 页目录表

有效 :PFN=j

页表

Page 23: 4.8Windows 2003 虚拟存储管理

5 页面淘汰算法与工作集管理主存管理器在分配页框时,按照以下次序从非空链表中取得页面进行分配:

零页链表- >空闲链表- > 后备链表- >修改链表。

Page 24: 4.8Windows 2003 虚拟存储管理

“ 修改页写回程序” 零初始化链表,空闲链表和后备链表的页框数低于允许的最小值时,将修改链表中的页面写回磁盘,然后,这些页框可放入后备链表。

当修改链表太大时,把修改链表中的页面写回页文件中。

把修改页写回磁盘后,系统的可用页框还太少,把进程的工作集调整到最小规模,新淘汰的页被放到修改链表或后备链表中。

Page 25: 4.8Windows 2003 虚拟存储管理

6工作集管理 (1) ·请页式和页簇化调页技术, · 页簇化策略能减少线程引发的缺

页中断次数,减少调页 I/ O的数量。

·缺省页面读取簇的数量取决于物理主存大小,当主存大于 19MB时,代码页簇为 8 页、数据页簇为 4 页、其他页簇为 8 页。

Page 26: 4.8Windows 2003 虚拟存储管理

采用局部 FIFO算法。采用局部淘汰可防止客户进程损失太多主存;

采用 FIFO算法可让被淘汰的页在淘汰后在物理主存中停留一段时间,如果马上又用到该页的话,就可很快将该页回收,而无需从磁盘读出。

工作集管理 (2)

Page 27: 4.8Windows 2003 虚拟存储管理

工作集管理 (3) · 工作集:该进程当前在主存中的页面

的集合。 · 创建一个进程时,系统为其指定最小

工作集和最大工作集, · 系统初始化时,计算进程最小和最大

工作集值,当物理主存大于 32MB( server 大于 64MB)时,进程缺省最小工作集为 50 页,最大工作集为 345页。

Page 28: 4.8Windows 2003 虚拟存储管理

工作集管理 (4) 进程工作集降到最小后,如果发生缺页中断,且主存并不满,系统会增加该进程的工作集尺寸。

进程工作集升到最大后,如果没有足够主存可用,则该进程每发生一次缺页中断,系统都要从工作集中淘汰掉一页,再调入此次页中断所请求的页。

如果有足够主存可用,系统也允许一个进程的工作集超过它的最大工作集尺寸。

Page 29: 4.8Windows 2003 虚拟存储管理

工作集管理 (5)当物理主存剩余不多时,系统检查每个进程,其当前工作集是否大于其最小工作集,是则淘汰该进程工作集中的一些页,直到空闲主存数量足够或每个进程都达到其最小工作集。

Page 30: 4.8Windows 2003 虚拟存储管理

工作集管理 (6)系统定时从进程中淘汰一个有效页,观察其是否对该页发生缺页中断,以此测试和调整进程当前工作集的合适尺寸。如果进程继续执行,并未对被淘汰的页发生缺页中断,则该进程工作集减 1 ,该页被加到空闲链表中。

Page 31: 4.8Windows 2003 虚拟存储管理

7系统工作集中驻留 5种页面系统高速缓存页面分页缓冲池Ntoskrnl.exe 中可分页代码和

数据设各驱动程序中可分页代码和

数据系统映射视图