操作系统 实验二 windows内存管理实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二windows内存管理实验
一.问题描述
内存管理是操作系统的主要任务之一,地址转换是其中的重要内容,本实验主要研究windows的地址转译过程。
通过这次实验了解windows内存管理策略及基本的数据结构,理解windows的地址过程。通过任意给出一个虚拟地址,可以从windbg 观察相关数据并找到其物理地址。
二.Windows地址转译过程原理
1.Windows内存管理器:
Windows的内存管理器主要由Windows执行体中的虚存管理程序负责,并由环境子系统负责与具体API相关的一些用户态特征的实现。
有两个任务:地主转换;变换。
2.Windows内存管理策略:
Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上的最小保护单位。
根据硬件体系结构的不同,页面尺寸被分为两种
大页面:4KB
小页面:4MB
通常的PC机,一般都为小页面。
3、Windows虚拟地址空间布局
Windows系统的虚拟地址空间布局,默认情况下,32位的windows 系统中每个用户进程可以占有2GB的私有地址空间,操作系统占有
另外的2GB。如下:
4、X86虚拟地址转译
X86虚拟地址转译是指进程的虚拟地址空间映射到实际物理页面的过程,Windows系统中地址转译过程如下:
关键的数据结构如下:
页目录:每个进程都有一个页目录,进程页目录的地址被保存在内核地址块(KPROCESS)中。在windows中,它被映射到虚拟地址0xC0300000。由cr3可以知道该进程页目录的位置。
页目录由页表项构成。
页表:进程的页目录指向页表。每个页表只占一个页面,含有1024个PTE,一个PTE为4字节,包含两个主域:PFN,即为数据所在的物理页面的页面帧编号。
虚拟地址结构:x86系统上,一个32位虚拟地址结构被解释
成三个独立的部分:页目录索引,页表索引和字节索引,如下:
由于页目录项有1024个,因此页目录索引为10位,一个页表中含有1024个PTE,因此页表索引也为10位;字节索引为12位,正好表示一页内容。
三、地址转译过程观测及分析
1、查找页目录首地址
启动WinDbg到内核调试模式,以try.exe作为对象运行,中断目标机运行,输入命令:!process
输入命令:dt_kprocess 813a9d88
可以看到KPROCESS其中有一个域DirectoryTableBase,对应值为0x9e1f000,这就是try.exe进程页目录的基址(物理地址)。
查看cr3寄存器的内容,输入命令:r cr3
得到的值和上述相同,这是因为CPU切换执行任务时,其内容要更新为当前进程的页目录基址。
2、地址转译过程
下面实验的是虚拟地址到物理地址的转译过程。
假设给定的虚拟地址为0x101401。
首先将其变换为32位的地址结构,如下:
输入命令:kd> !pte 0x101401
可以查看给定的虚拟地址的PTE信息:
可以看到:
●PDE的虚拟地址为C0300000。这是因为每个进程页目录的基址(虚
拟地址)均为C300000,而每个进程页目录项长度为4字节,给定虚址的页目录索引为0x0,故其对应的PTE为C0300000。
●PTE为C0000404。因为进程的页表虚拟地址从C0000000开始。页
面大小为4096(0x1000)字节,每个PTE长度为4字节,由页目录索引值(0x0)可知虚址处于第1个页表上,页表索引为0x101,故对应的PTE为(C0000000+4*0x101= C0000404)
最后一行信息“pfn b9ef ---DA--UWEV”表示PDE的具体内容,b9ef 是给定虚址所在页表在内存中对应的物理页号;“---DA--UWEV”
是标志信息。不知道为什么自己的电脑上无法出现数据页装入内存的物理页号,如pfn XXXX ---A---XXXX,因此无法得到虚址的物理
地址。因此,0x101401的物理地址应该为物理页号XXXX加上页内索引(0x401),具体数值由于电脑问题没有办法确切得到。3、观察系统页表
验证不同的进程目录页会指向相同的系统页表。
观察虚址0x80001001,转换为32位地址结构,如下:
输入命令:kd> !process
当前正在执行:try.exe。
输入命令:kd> !pte 0x80001001
得到PDE为C0300800,其对应的物理页号为3b。
继续让目标机运行,启动另一个的程序dog.exe,然后中断目标机运行。
输入命令:kd> !process
当前执行的进程为svchost.exe。
输入命令:kd> !pte 0x80001001
发现PDE信息和对应的物理页号与前面观测的相同,证明不同的进程页目录的确指向了相同的系统页表。实验顺利完成