操作系统 实验二 windows内存管理实验

  • 格式:doc
  • 大小:308.50 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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信息和对应的物理页号与前面观测的相同,证明不同的进程页目录的确指向了相同的系统页表。实验顺利完成