




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计实验WRK内存管理试验姓名:莫金博班级:08级计算机1班学号:20086789一.实验内容描述1.目的(1)了解Windows内存管理器(2)理解Windows的地址过程2.内容 任意给出一个虚拟地址,通过WinDbg观察相关数据并找到其物理地址二.理论分析Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上的最小保护单位1.Windows内存管理器Windows的内存管理主要由Windows执行体中的虚存管理程序负责,并由环境子系统负责,并由环境子系统负责与具体API相关的一些用户态特性的实现。虚存管理程序是Windows中负责内存管理的那些子程序和数据结构的集合
2、内存管理器的主要任务是:地址变换:将一个进程的虚拟地址空间转译为物理内存地址交换:当内存不足时,将内存中的有些内容转移到磁盘上,并且以后还要再次将这些内容读回2.Windows内存管理策略Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上最小的保护单位。根据硬件的体系结构不同,页面尺寸被分为两种,大页面和小页面。X86系统下小页面为4KB,大页面为4MB。大页面的优点是:当引用同一页面内其他数据时,地址转移的速度会很快。不过使用大页面通常要较大的内存空间,而且必须用一个单独的保护项来映射,因此可能会造成出现错误而不引发内存访问违例的情况。通常PC机都为小页面3.Windows虚拟
3、地址空间布局x86结构下的布局方式:默认情况下,32位Windows系统中每个用户进程可以占有2GB的私有地址空间。操作系统占有另外的2GB2GB用户的进程地址空间布局如表:2GB的系统地址空间布局如同:3.虚拟地址转译地址转译是指将进程的虚拟地址空间映射到实际物理页面的过程。x86系统中地址转译过程如图:关键数据结构如下:页目录:每个进程都有一个页目录,它是内存管理器为了映射进程中所有的页表位置而创建的一个页面。进程也目录的地址被保存在内核进程快KPROCESS中,在x86系统上,它被映射到虚拟地址0xC0300000,当一个进程正在执行时,CPU可以通过寄存器CR3知道该进程页目录的位置。
4、页目录由目录项(PDE)构成,每个PDE长4字节,描述了该进程中所有可能的页表的状态和位置。其格式和PTE类似。x86系统上,要描述完整的4GB虚拟地址空间,需要1024个页表。因此映射这些页表的进程页目录需包含1024个PDE,恰好占用一个页面。页表:进程的页目录项指向页表。每个页表占用一个页面,由1024项PTE组成。一个有效的PTE大小为4字节,包含两个主域:数据所在的物理页面的页面帧编号(PNF)或者内存中一个页面的物理地址的PFN;一些描述该页面状态和保护属性的标志。虚拟地质结构:x86系统上,一个32位虚拟地址被解释为三个单独的部分,页目录索引、页表索引和字节索引。由于页目录项有1
5、024个,因此页目录索引为10位;一个也表中含有1024个PTE。因此页表索引也为10位,字节索引为12位,正好表示一页(4KB)内容三.实验步骤及结果1.查找页目录首地址以程序WG.exe作为观测对象。启动WinDbg到内核调试模式,运行程序WG.exe。终断目标机运行,输入命令:kd>!process发现WG.exe进程正处于运行状态输入命令:在KPROCESS中名为DirectoryTableBase的域,对应值为0x9fa6000,即WG.exe进程页目录的物理地址查看CR3寄存其中的内容,输入命令:CR3寄存其中的值和KPROCESS中记录的页目录基址相同。这是因为在CPU切换
6、执行任务时,其内容要更新为当前进程的页目录基址。2.地址转译过程假设给定的虚拟地址为0x401001输入命令:可以看到:PDE的虚拟地址为C0300004.PTE的虚拟地址为C0001004最后一行信息“pfn 9e4a-DA-UWEV”表示PDE中的具体内容,9e4a是给定虚拟地址所在页表在内存中对应的物理页号,“-DAUWEV”是标志信息,“pfn a173 -A-UREV”表示PTE中的具体内容,a173是数据页装入内存的物理页号。将数据页对应的物理页号a173加上业内索引(0x1)即可得到虚拟地址0x401001的物理地址3.观察系统页表给定观测虚拟地址为0x80001001输入命令:
7、当前正在执行的进程是:WG.exe输入命令:得到PDE为C0300800,其对应的物理页号为3b继续让目标机运行,启动A.exe,然后中断目标机运行。输入命令:当前正在执行的进程为A.exe输入命令:PDE信息和对应的物理页号与前面观测到的相同四.结论1.数据页对应的物理页号加上相应业内索引即可得到虚拟地址的物理地址2.不同的进程页目录都指向了相同的系统表页五.心得体会在这次上机实验,通过对WinDbg和VPc的调试运用,我熟悉了Windows内存管理器的结构,也认知到Windows如何进行地址转译和转换。对相关的知识也进行了温习,更牢的掌握了相关知识。当然这些还远远不够,我以后还要继续不断努
8、力,去学习了解掌握操作系统的各方面知识。附录:1.A.exe代码#include<windows.h>#include<stdio.h>#define N 1HANDLE mutexSemaphore;HANDLE synchSemaphore_1;HANDLE synchSemaphore_2;HANDLE mutexDisplay;void Display(char*str,int delayTime) if(WaitForSingleObject(mutexDisplay,INFINITE)=WAIT_OBJECT_0) printf("%snn&quo
9、t;,str); ReleaseMutex(mutexDisplay); Sleep(delayTime); void useTime(double limit) for(double i=0;i<=limit;i+=0.001); void CreateProduct() Display("Creating a production.",0); useTime(200000); Display("Creating finished.",100); void PutProduct() Display("Putting a producti
10、on.",0); useTime(150000); Display("Putting finished",100); void GetProduct() Display("Getting a production.",0); useTime(100000); Display("Getting finished.",100); void ConsumeProduct() Display("Cosuming a production.",0); useTime(100000); Display("C
11、osuming finished.",100); void Producer() while(true) CreateProduct(); if(WaitForSingleObject(synchSemaphore_1,INFINITE)=WAIT_OBJECT_0) if(WaitForSingleObject(mutexSemaphore,INFINITE)=WAIT_OBJECT_0) PutProduct(); ReleaseSemaphore(mutexSemaphore,1,NULL); ReleaseSemaphore(synchSemaphore_2,1,NULL);
12、 void Consumer() while(true) if(WaitForSingleObject(synchSemaphore_2,INFINITE)=WAIT_OBJECT_0) if(WaitForSingleObject(mutexSemaphore,INFINITE)=WAIT_OBJECT_0) GetProduct(); ReleaseSemaphore(mutexSemaphore,1,NULL); ReleaseSemaphore(synchSemaphore_1,1,NULL); ConsumeProduct(); int main() HANDLE thread2;
13、DWORD threadID2; synchSemaphore_1=CreateSemaphore(NULL,N,N,NULL); synchSemaphore_2=CreateSemaphore(NULL,0,N,NULL); mutexSemaphore=CreateSemaphore(NULL,1,1,NULL); mutexDisplay=CreateMutex(NULL,FALSE,NULL); printf("Program start.Please use WinDbg to observe main thread.nPress any key to continue.
14、n"); getchar(); thread0=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Producer),NULL,CREATE_SUSPENDED,&threadID0); printf("A producer was created.Please use WinDbg to observe producer thread.nPress any key to continue.n"); getchar(); thread1=CreateThread(NULL,0,(LPTHREAD_START_ROUT
15、INE)(Consumer),NULL,CREATE_SUSPENDED,&threadID1); printf("A Consumer was created.Please use WinDbg to observe Consumer thread.nPress any key to continue.n"); getchar(); printf("Please select:n1Make producer thread runn2Make Consumer thread runn"); bool flag=true; bool flag_1=true,flag_2=true; int count=0; while(flag) if(getchar()='1'&&flag_1) ResumeThread(thread0); count+; flag_1=false; else if(getchar()='2'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台汽车工程职业学院《水处理原理与技术》2023-2024学年第二学期期末试卷
- 天津轻工职业技术学院《小学语文教学与研究理论教学》2023-2024学年第二学期期末试卷
- 山西财经大学华商学院《游戏引擎应用》2023-2024学年第二学期期末试卷
- 玉溪农业职业技术学院《建筑工程CAD》2023-2024学年第二学期期末试卷
- 镇江市高等专科学校《通信工程设计实施与网络规划优化实践》2023-2024学年第二学期期末试卷
- 新疆维吾尔医学专科学校《水运工程经济》2023-2024学年第二学期期末试卷
- 辽宁轻工职业学院《沉积盆地分析》2023-2024学年第二学期期末试卷
- 浙江长征职业技术学院《比较教育学》2023-2024学年第二学期期末试卷
- 广东药科大学《交通运输信息技术》2023-2024学年第二学期期末试卷
- 德宏师范高等专科学校《纪录片创作后期剪辑》2023-2024学年第二学期期末试卷
- XX公司事故隐患内部报告奖励制度1
- 附件6工贸高风险企业高危领域较大以上安全风险管控清单
- 国际贸易公司后勤管理岗位职责
- 中国矿业大学专职辅导员招聘真题2024
- 骨科手术切口感染的预防与控制
- 2025年角膜接触镜考试题及答案
- 透析营养不良相关知识
- 西部计划面试试题及答案
- 2025 ACC-AHA急性冠脉综合征患者管理指南解读课件
- 江苏开放大学2025年春大学英语B【2】
- 绿化工程施工专项施工方案
评论
0/150
提交评论