操作系统:06第六章_存储管理(左加1)_第1页
操作系统:06第六章_存储管理(左加1)_第2页
操作系统:06第六章_存储管理(左加1)_第3页
操作系统:06第六章_存储管理(左加1)_第4页
操作系统:06第六章_存储管理(左加1)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、6.7Windows 2003虚拟存储管理 6.7.1进程地址空间布局6.7.2用户空间存储分配 6.7.3存储管理的实现 6.7.1进程地址空间布局 固定页面区 页交换区操作系统驻留区(直接映射区) 页交换区系统存储区用户存储区C0000000H80000000H00000000HC0800000HFFFFFFFFH一维线性地址空间一维线性地址空间(可能有空洞)(可能有空洞)占用占用占用占用进程虚拟地址进程虚拟地址空间空间(2G-3G)(2G-3G):大而稀疏:管理方式:虚拟页式占用 dir page offset 31 22 21 12 11 0逻辑地址:一维逻辑地址:一维页目录号页目录号

2、页号页号页内位移页内位移6.7.2用户空间存储分配 内外存储管理数据结构: 虚址描述符; 区域对象; 页文件; 三种存储管理:虚页存储分配; 主存映射文件;虚存堆分配;1. 虚址描述符 对每个进程,主存管理器都维护一组VAD , 用来描述进程地址空间哪些虚拟地址已被保留(提交),而哪些没有,这个数据结构叫“虚地址描述符”。 进程的所有VAD组织成平衡二叉树,以方便检索。 1. 虚址描述符VAD范围:范围:200000002000FFF保护:读保护:读/写写提交:是提交:是范围:范围:000020000000FFF保护:只读保护:只读提交:否提交:否范围:范围:4E0000004F000000保

3、护:写复制保护:写复制提交:是提交:是范围:范围:3200000033000000保护:只读保护:只读提交:是提交:是范围:范围:7AAA00007AAA00FF保护:读保护:读/写写提交:否提交:否VAD的使用 保留(reserve):检查地址冲突,建立VAD; 提交(commit):确认,分配交换区页面,建立并填写页表项; 访问:检查是否在VAD范围之内且已经被提交: 在VAD之外:产生一次访问违规; 在VAD之内,但未提交,隐式提交; 在VAD之内,已提交,不在内存,分配页框。2. 区域对象及作用 “区域对象”(Section object)在Win32子系统中被称为“文件映射对象”,表

4、示可被两个或多个进程所共享的主存块。其作用有: 系统利用区域对象将可执行映象装入主存; 使用区域对象将文件映射到进程地址空间,可像访问主存中数组一样访问这个文件(可以是很大的文件,通过视口移动访问所需部分)。 区 域最大尺寸页保护限制盘交换区映射文件基本非基本区域创建区域打开区域扩展区域映射取消映射视口查询区域对象类型对象属性对象服务区域对象的结构 区域对象的使用 一个区域对象代表可由两个或多个进程共享的主存块。 一个进程的线程可创建区域对象,为它起名字,以便其他进程的线程能打开这个区域对象的句柄。 区域对象句柄被打开后,线程就能把这个区域对象映射到自己或另一个进程的虚地址空间中。区域对象视口

5、(view)(共享内存)P1的虚的虚拟空间拟空间:P2的虚的虚拟空间拟空间:区域区域viewview1view2物理内存物理内存区域对象视口(view)(访问大对象) 虚存虚存4GB区域对象区域对象264B视口视口滑动窗口,分段映射滑动窗口,分段映射进程空间进程空间页文件(page file) 保存交换到磁盘上的页面; 共16个页文件页地址页地址(文件内位移文件内位移) r p 保护保护 文件号文件号 v31 12 11 10 9 5 4 1 0 不在内存页面的页表项3. 应用程序虚存管理方法1)虚页主存分配进程中使用虚拟主存,分三个阶段:保留虚存(reserve memory)线程指定一段虚

6、拟地址,使其它线程不能使用这段虚地址.提交虚存(commit memory)为已保留的虚地址空间请求分配交换空间.执行时,发生缺页分配物理页框. 释放虚存 (release memory)释放物理主存和交换空间.2)主存堆分配 堆(heap)是保留地址空间中一个或多个页组成的区域,由堆管理器管理。 进程堆:每个进程一个(默认1M,可扩)。 线程可建立私用堆: HeapCreate:创建私有堆; Heap Destroy: 释放私有堆; 堆使用: GetprocessHeap:得到指向堆的句柄; HeapAlloc:从堆中申请主存块; HeapFree:向堆中释放主存块。3)主存映射文件(1)

7、Memory-mapped File把盘文件映射到进程的一段虚地址空间。 单个进程使用主存映射文件,以访问内存方式访问文件,随机访问效率高,提高文件访问速度; 多个进程使用主存映射文件可以共享主存中的数据和代码。主存映射文件(例子)#include windows.h#include stdio.h int main() /文件对象 TCHAR STR = hello world!; HANDLE hFile = CreateFile(E:test.txt, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_N

8、ORMAL, NULL); /映射对象 HANDLE hFileMapping= CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); /建立视口 TCHAR *pbFile1 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0); TCHAR *pbFile2 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0); /输出字符串的内容,可以看到的是,把整个文件当作字符串输出了。 /

9、当然,如果文件中含有0的字符,你看不到全部文件内容的输出。 主存映射文件(例子) /两个输出的结果是一样的 printf(%sn, pbFile1); printf(%sn, pbFile2); /下面的操作是往这个pbFile1指向的地址写入点自定义的内容, /然后比较pbFile2指向地址的值是否相应改变了。 memcpy(pbFile1, STR, strlen(STR); printf(%sn, pbFile1); printf(%sn, pbFile2); /取消视窗,关闭映射,关闭文件 UnmapViewOfFile(pbFile1); UnmapViewOfFile(pbFile

10、2); CloseHandle(hFileMapping); CloseHandle(hFile); return 0;6.7.3 存储管理的实现 1.进程页表与地址映射 在x86硬件平台上采用二级页表结构来实现进程的逻辑地址到物理地址的转换。 32位逻辑地址解释成三个分量,页目录索引(10位)、页表页索引(10位)和页内位移(12位),页面大小为4KB。2.页框号数据库(1)所有主存物理页框组成了页框数据库(Page Frame Database)每个页框占一项,每项称为一个PFN结构(Page Frame Number)。 工作集索引工作集索引页表项页表项地址地址共享计数共享计数标识标识

11、类型类型 访问计数访问计数初始页表项的内容初始页表项的内容页表项的页框页表项的页框号号工作集中页面的PFN前向链接前向链接页表项页表项地址地址后向链接后向链接标识标识 类型类型 访问计数访问计数初始页表项的内容初始页表项的内容页表项的页框页表项的页框号号后备或修改链表中页面的PFN事件地址事件地址 页表项地址(页表项地址(PTEPTE地址)地址)共享计数共享计数标识标识 类型类型 访问计数访问计数初始页表项的内容初始页表项的内容页表项的页框页表项的页框号号正在I/O页面的PFN前向链接前向链接 页表项页表项地址地址后向链接后向链接标识标识 类型类型 访问计数访问计数初始页表项的内容初始页表项的

12、内容页表项的页框页表项的页框号号零或空闲链表中页面的PFN页框号数据库(2)页框号数据库(3) PFN可能状态有效(有效(ValidValid): :属于进程工作集,有一个进程页表项指向它;属于进程工作集,有一个进程页表项指向它;过渡(过渡(transitiontransition):不属于工作集,但内容未破坏,或正进:不属于工作集,但内容未破坏,或正进行行IOIO传输;传输;后备(后备(Stand byStand by):曾被进程使用,内容未修改,但已从进:曾被进程使用,内容未修改,但已从进程工作集中删除,页表项仍指向它,但标记程工作集中删除,页表项仍指向它,但标记“无效无效”和处和处于于“

13、过渡过渡”状态;状态;修改(修改(ModifiedModified):和:和“后备后备”状态相同,但页已被修改,状态相同,但页已被修改,且未写回磁盘;且未写回磁盘;修改不写入(修改不写入(modimodif fied no writeied no write):同同“修改修改”状态,但已状态,但已标记不写回磁盘;标记不写回磁盘; 空闲(空闲(freefree) :该页空闲,不属于任何进程,未清零:该页空闲,不属于任何进程,未清零零初始化(零初始化(zeroedzeroed):空闲,且已清零;:空闲,且已清零;坏(坏(badbad):发生校验错的页框;:发生校验错的页框; 页框号数据库(4)请求

14、零页面 请求非0空闲页缩小工作集软缺页处理进程工作集修改页写回线程修改页框链表备用页框链表零页页框链表空闲页框链表零初始化线程页框的状态转换有效后备有效有效零页修改空闲有效:页框号无效:磁盘地址无效(迁移):页框号有效:页框号无效:磁盘地址有效:页框号有效:页框号无效(迁移):页框号无效:磁盘地址原型页表项原型页表项P1页表:P2页表:P3页表:页框号数据库页框号数据库3. 页访问处理(1)(1) 访问一个未知页,其页表项为零,或者页表不存在,线程首次访问一个地址,系统在该进程虚拟地址描述符树中查找包含该地址的VAD, 创建页表项。如地址没落在VAD所覆盖地址域中,访问违约。(2) 所访问的页

15、没有驻留在主存,而是在磁盘的某个页文件或映像文件中,系统分配一个物理页框,将所需的页从磁盘读出,放入工作集中。(3) 所访问的页在“后备链表”或“更改链表”中,将此页移到进程工作集。(4) 访问一个请求零页,给进程工作集添加一个由零初始化的页。3.页访问处理(2)(5) 对一个只读页执行写操作,访问违约。(6) 从用户态访问一个只能在核心态下访问的页,访问违约。(7) 对一个写保护页执行写操作,写违约。(8) 对一个写时复制的页执行写操作,为进程进行页复制。4. 原型页表项与页共享(1)当两个进程共享一个物理页框时,主存管理器在进程页表与页框之间插入一个称作“原型页表项”prototype P

16、TE的数据结构来间接映射共享的页面。 原型页表项(2)PFN进程1页目录表私用:PFN=i共享:指向原型PTE页表有效:PFN=k无效:在页文件PFNiPFNkPFN=kPTE地址共享计数=2原型页表主存页框数据库PFN进程2页目录表私用:PFN=j共享:指向原型PTE页表5. 页框和工作集管理(1) 请页式和页簇化调页技术; 簇大小取决于物理主存大小,当主存大于19MB时,代码页簇为8页、数据页簇为4页、其他页簇为8页; 页簇化策略能减少缺页中断次数,相当于预调。 采用局部FIFO页面置换算法。 采用局部淘汰可防止客户进程损失太多主存; 采用FIFO算法可让被淘汰的页在淘汰后在物理主存中停留

17、一段时间,如果马上又用到该页的话,就可很快将该页回收,而无需从磁盘读出。页框和工作集管理(2)页框和工作集管理(3) 工作集:进程当前在主存中的页面的集合。 创建一个进程时,系统为其指定最小工作集和最大工作集, 系统初始化时,计算进程最小和最大工作集值,当物理主存大于32MB(server大于64MB)时,进程缺省最小工作集为50页,最大工作集为345页。5. 页框和工作集管理(4) 主存管理器在分配页框时,按照以下次序从非空链表中取得页面进行分配: 零页链表 空闲链表 后备链表 修改链表。 页框和工作集管理(5) 零页链表,空闲链表和后备链表的页框数低于允许的最小值时,将修改链表中的页面写回磁盘,然后,这些页框可放入后备链表。 当修改链表太大时,把修改链表中的页面写回页文件中。 把修改页写回磁盘后,系统的可用页框还太少,把进程的工作集调整到最小规模,新淘汰的页被放到修改链表或后备链表中。页框和工作集管理(6) 进程工作集降到最小后,如果发生缺页中断,且主存并不满,系统会增加该进程的工作集尺寸。 进程工作集升到最大后,如果没有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论