计算机操作系统(第七章)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 页面淘汰算法与工作集管理(1)
•请页式和页簇化调页技术, •页簇化策略能减少线程引发的缺页中断次数, 减少调页I/O的数量。 •缺省页面读取簇的数量取决于物理内存大小, 当内存大于19MB时,代码页簇为8页、数据页簇 为4页、其他页簇为8页。
页面淘汰算法与工作集管理(2)
• 采用局部FIFO算法。 • 采用局部淘汰可防止客户进程损失太多内存; • 采用FIFO算法可让被淘汰的页在淘汰后在物理内存 中停留一段时间,如果马上又用到该页的话,就可 很快将该页回收,而无需从磁盘读出。
工作集管理(3)
• 当物理内存剩余不多时,系统检查每个进程,其当 前工作集是否大于其最小工作集,是则淘汰该进程 工作集中的一些页,直到空闲内存数量足够或每个 进程都达到其最小工作集。
工作集管理(4)
• 系统定时从进程中淘汰一个有效页,观察其是否对 该页发生缺页中断,以此测试和调整进程当前工作 集的合适尺寸。如果进程继续执行,并未对被淘汰 的页发生缺页中断,则该进程工作集减1,该页被 加到空闲链表中。
“修改页写回程序”
• 零初始化链表,空闲链表和后备链表的页框数 低于允许的最小值时,将修改链表中的页面写 回磁盘,然后,这些页框可放入后备链表。 • 当修改链表太大时,把修改链表中的页面写回 页文件中。 • 把修改页写回磁盘后,系统的可用页框还太少, 把进程的工作集调整到最小规模,新淘汰的页 被放到修改链表或后备链表中。
(1)执行体使用内存映射把可执行文 件.exe和动态连接库.dll文件装入内存, 节省应用程序启动时间。 (2)进程使用内 存映射文件存取磁盘文件信息,减少文件 I/O和对文件进行缓存。(3)多个进程使用 内存映射文件来共享主存中的数据和代码。
内存映射文件(2)
使用步骤
步1使用CreateFile打开文件 步2使用CreateFile Mapping建立文件映射 步3使用MapViewOfFile 读写文件视窗 步4使用OpenFileMapping 打开文件映射对象 步5使用UnmapViewOfFile解除映射
3 页框号数据库(1)
所有内存物理页框组成了页框数据库 (Page Frame Datebase),每个页框占一项, 每项称为一个PFN结构(Page Frame Number)。
•
工作集索引
页框号数据库(2)
前向链接
页表项地址
共享计数 标识 类型 访问计数
页表项地址
后向链接 标识 类型 访问计数
内存管理的实现
1进程页表与地址映射 •在x86硬件平台上采用二级页表结构来 实现进程的逻辑地址到物理地址的转换。 •32位逻辑地址解释成三个分量,页目录 索引(10位)页表页索引(10位)和位置 索引(12位),页面大小为4KB。
2原型页表项和区域对象(1)
当两个进程共享一个物理页框时,内存管理 器在进程页表中插入一个称作“原型页表 项”prototype PTE的数据结构来间接映射 共享的页面。
初始页表项的内容 页表项的页框号
初始页表项的内容 页表项的页框号
工作集中页面的PFN
前向链接 页表项地址 后向链接 标识 类型 访问计数
后备或修改链表中页面的PFN
事件地址 页表项地址 共享计数 标识 类型 访问计数
初始页表项的内容 页表项的页框号
初始页表项的内容 页表项的页框号
零或空闲链表中页面的PFN
3 区域对象和视窗
系统提供视窗AWE机制,为区域对象空间中的一部分 空间(进程当前所需要的)保留虚地址,而所映射的 这一部分叫该区域对象的一个视窗。
• 映射区域对象的视窗就是使该区域的一部分能在虚地 址空间可见。
• 删除映射区域对象的视窗就是把它从进程的虚拟地址 空间中删去。
• 进程通过对区域对象多次开设和删除视窗,达到在较 小虚地址空间(最大232B)中处理较大区域对象(264B) 的目的。
VAD的使用
• 线程首次访问一个地址,内存管理器为此 地址的页面创建一个页表项,它找到一个 包含被访问地址的VAD,并利用所得信息填 充页表项。 • 如果访问地址落在VAD覆盖的地址范围外, 或所在的地址范围仅被保留而未提交,将 产生一次访问违规。
2 区域对象及作用
“区域对象”(Section object)在Win32子系 统中被称为“文件映射对象”,表示可被两个或多 个进程所共享的内存块。其作用有: • 系统利用区域对象将可执行映象装入内存; • 高速缓存管理器利用区域对象访问高速缓存文件中 的数据; • 使用区域对象将文件映射到进程地址空间,可像访 问内存中数组一样访问这个文件,而不是对文件进 行读写。
系统工作集中可以驻留5种页面
• • • • • 系统高速缓存页面 分页缓冲池 Ntoskrnl.exe中可分页代码和数据 设各驱动程序中可分页代码和数据 系统映射视图
6其他内存管理机制(1)
(1) 锁内存: (2)分配粒度: (3) 内存页级保护机制 : • 区分核心态和用户态, • 每个进程只有独立、私有的虚拟地址空间,禁止其他进程 的线程访问, • 以页面为单位的保护机制, • 以对象为单位的保护机制。
原型页表项和区域对象(2)
进程1 页目录 页表
有效
原型PTE地 址 原型PTE 无效页框: 在页文件
内存
共享页面
进程2 页目录
页表
原型PTE 有效页框: 在内存
原型PTE地 址 有效
进程通过原型PTE共享页框
原型页表项和区域对象(3)
共享页面是原型PTE所描述的6种状态之一
• • • • • • 活动/有效 ,页面存在物理内存中。 过渡,所需页在后备链表或修改链表中。 修改尚未写入,所需页在修改尚未写入链表中。 请求零页, 所需页内容应为零页。 页文件, 所需文件驻留在页文件中。 映射文件, 所需页驻留在映射文件中。
4 应用程序内存管理方法
1)虚页内存分配(1) 系统中使用虚拟内存,分三个阶段: •保留内存(reserved memory) •提交内存(committed memory) •释放内存 (release memory)
虚页内存分配(2) 保留内存
• Virtual Alloc 申请保留内存 • 申请保留内存的方法 • 申请保留内存的参数
区域对象的结构
对象类型 对象属性 区 域
最大尺寸 页保护限制 盘交换区/映射文件 基本/非基本区域 创建区域 打开区域 扩展区域 映射/取消映射视口 查询区域
对象服务
区域对象的使用
• 一个区域对象代表可由两个或多个进程共 享的内存块。 • 一个进程的线程可创建区域对象,为它起 名字,以便其他进程的线程能打开这个区 域对象的句柄。 • 区域对象句柄被打开后,线程就能把这个 区域对象映射到自己或另一个进程的虚地 址空间中。
虚页内存分配(3) 提交/释放内存
•什么是提交内存 •提交内存的方法 •分配内存 • Virtual Free释放内存
2)内存映射文件(1)
Memory-mapped File允许进程分配一段虚地 址空间或某一个盘文件相关联,当把盘文件映 射到该地址空间后,多个进程可以方便地访问。 内存映射文件用于三种场合:
计算机操作系统 第七章 Windows进程和存储管理 示例
实例研究:Windows 2000/XP虚拟存储管理
7.1进程地址空间布局 7.2用户空间内存分配 7.3内存管理的实现
7.1 进程地址空间布局
FFFFFFFFH C0000000H C0000000H
固定页面区
页交换区 系统存储区 操作系统驻留区 (直接映射区)
80000000H
页交换区
用户存储区
统管理应用程序内存有两个数据结构: 虚址描述符和区域对象;三种内存管理方 法: • 虚页内存分配 • 内存映射文件 • 内存堆分配
1 虚址描述符
对每个进程,内存管理器都维护一组VAD ,用来 描述进程地址空间哪些虚拟地址已被保留,而哪些 没有,这个数据结构叫“虚地址描述符”VAD。
3)内存堆分配
• 堆(heap)是保留地址空间中一个或多个页 组成的区域,并由堆管理器按更小块划分和 分配内存的技术。 • 缺省进程堆。 • HeapCreate创建私有堆,Heap Destroy 释放 私有堆。 • GetprocessHeap得到指向堆的句柄, • HeapAlloc和HeapFree从堆中分配和回收内存 块。
区域对象和视窗示意
进程1的虚拟内存
/////
物理内存
进程2的虚拟内存
/////
区域对象
使用AWE函数来分配内存
步1:分配要使用的物理内存 步2:创建一个虚地址空间作为视窗 来映射区域对象 步3:把区域对象映射到视窗
区域对象和视窗 视窗机制作用
• 当基于内存映射文件的区域对象远远大 于虚地址空间时, • 当基于盘交换区(交换文件)的区域对 象远大于交换空间时, • 用于共享时。
零初始化 页链表 请 求 零 页 缺 页 中断
线程0 从外存或 内核配置 读入的页 空闲页链表
分配页 框到进 程工作 集
修改页链表 工作集中删修改页
修改页写回线程
后备页链表 工作集中删一页
工作集 重 置
页框的状态及其转换
4 请求调页
• 内存管理器在分配页框时,按照以下次序 从非空链表中取得页面进行分配: 零页链表->空闲链表-> 后备链表->修改链表。
正在I/O页面的PFN
页框号数据库(3)
PFN可能状态
1、有效(Vaild) 2、过渡(transition) 3、后备(Stand by) 4、修改(Modified) 5、修改不写入(modiqied no write) 6、空闲(free) 7、零初始化(zeroed) 8、坏(bad)
页框号数据库(4)
工作集管理(1)
•工作集:该进程当前在内存中的页面的集合。 •创建一个进程时,系统为其指定最小工作集和最大 工作集, •系统初始化时,计算进程最小和最大工作集值,当 物理内存大于32MB(server大于64MB)时,进程缺 省最小工作集为50页,最大工作集为345页。
工作集管理(2)
• 进程工作集降到最小后,如果发生缺页中断,且内存 并不满,系统会增加该进程的工作集尺寸。 • 进程工作集升到最大后,如果没有足够内存可用,则 该进程每发生一次缺页中断,系统都要从工作集中淘 汰掉一页,再调入此次页中断所请求的页。 • 如果有足够内存可用,系统也允许一个进程的工作集 超过它的最大工作集尺寸。