《操作系统 实验二 windows内存管理实验》由会员分享,可在线阅读,更多相关《操作系统 实验二 windows内存管理实验(8页珍藏版)》请在金锄头文库上搜索。
1、实验二 windows 内存管理实验一 问题描述内存管理是操作系统的主要任务之一,地址转换是其中的重要内 容,本实验主要研究 windows 的地址转译过程。通过这次实验了解 windows 内存管理策略及基本的数据结构,理 解 windows 的地址过程。通过任意给出一个虚拟地址,可以从 windbg 观察相关数据并找到其物理地址。二 Windows 地址转译过程原理1. Windows 内存管理器:Windows的内存管理器主要由Windows执行体中的虚存管理程序 负责,并由环境子系统负责与具体API相关的一些用户态特征的实现。 有两个任务:地主转换;变换。2. Windows 内存管理
2、策略:Windows 采用页式虚拟存储管理技术管理内存,页面是硬件级别 上的最小保护单位。根据硬件体系结构的不同,页面尺寸被分为两种大页面:4KB小页面: 4MB通常的 PC 机,一般都为小页面。3、Windows 虚拟地址空间布局Windows 系统的虚拟地址空间布局,默认情况下,32 位的 windows系统中每个用户进程可以占有 2GB 的私有地址空间,操作系统占有另外的2GB。如下:2GB的用户进程地址空间布局如我3.1地址范围大小功能OxO-CxffiMKB拒绝访问区域,帮助程序员避免不 正确的指针引用.试图访问该凶域 的地址將导致访问违规OxlOOOO-X)x7FFEFFFF2GB
3、减去全少192KB进程私有地址空间Ox7FFDEOOQ-Ox7MDhJ-Flr4KB第一个线程的线程环境块(TEB)Ox7bknFOOO-Ox7tFDJ7 Ft4KB进程环境块(PEB)Ox7FJrEOOOO-Ox7FFEOMF4KB共享的用户数据页面Ox7FJ:E 1000 0x7FFEFF_EF60KB拒绝访问区域OxVFriOOOO-OxTTFkMlb60KB拒绝访问区域,阳止线程跨过用户/ 系统边界传送缓冲区4、X86 虚拟地址转译X86 虚拟地址转译是指进程的虚拟地址空间映射到实际物理页面的过程,Windows系统中地址转译过程如下:Figure 7-17 Tran slating
4、a valid virtual address (x86-specific)关键的数据结构如下: 页目录:每个进程都有一个页目录,进程页目录的地址被保存在内核地址块(KPROCESS)中。在windows中,它被映射到虚拟地 址0xC0300000。由cr3可以知道该进程页目录的位置。页目录由页表项构成。页表:进程的页目录指向页表。每个页表只占一个页面,含有 1024个PTE,一个PTE为4字节,包含两个主域:PFN,即为数据所 在的物理页面的页面帧编号。虚拟地址结构: x86 系统上,一个 32 位虚拟地址结构被解释 成三个独立的部分:页目录索引,页表索引和字节索引,如下:31D(ISEPd
5、gie directoryPag-e tableIndexIndexByte Index10 bits10 bitsVirtual page number12 bitsFigure 7-16 匚omponErrk of 日 22-bit wrtuml address oil x86 systems由于页目录项有 1024 个,因此页目录索引为10 位,一个页表中含有1024个PTE,因此页表索引也为10位;字节索引为12位, 正好表示一页内容。三、 地址转译过程观测及分析1、查找页目录首地址启动WinDbg到内核调试模式,以try.exe作为对象运行,中断目标机运行,输入命令: !proces
6、skd ! processPROCESS 813a.9d88 Sessi 口 口1谊:0 Cid: 04dc Feb: 7f f d9Li00 ParentCid: 0428 DirBa.se : USelf U U U Ob jectTa.ble : el4ald5U Hand 1 已匚口unt:7 .Image: try.exeVa.dRo匚比 E!13a.7c5E! Vads 19 Clone U PrivatE 31 . M口dif ied 0 . L口eked U .DeviceMap e13 be 41UTokenElapsedTimeUser-Time ter-nelTiTiLB
7、Quo t aPoo 1Usajje PagedPool Quo t a.Poo 1U sage N onPagedPoo 1 Work i ng Se t S i z es (门口w. m in. jilgh ) P ea.kWo r k i n g E;已 t SizeVirtua1S i z ePeakVirt ua1S i e eP a.geF a.u 11 匚匚i u n tM b til o r y P r i o r i t yBasePr i ori tyCommi tCharge6170403000 : 00:07.13000 : 00:00.00000:00:00.0008
8、008760C182. 50. 345 :i C728KEI. 200KEI. 1380KE:i1825 Mh5 Mb178BACKGROUNDTHREAD 813a.9blEl 匚丄迅 0 4dc. 0 4e0 Teb: 7f fdf 000 UmaSThread: 00000000 RUNNING on processor 039输入命令:dt_kprocess 813a9d88kd tit kprocess S13a?d80nt! KPROCESS+0k000 HeaderDISPATCHER HEADER+0k010 Prof ileListHeadLIST ENTRY OK013a9
9、d98 - OK013a9d98 +OkO10 DirectoryTab1eBase : 2 Oself 000+0k020 LdtDescriptorKGDTENTRY+0k028 Int21Descriptor_KIDTENTRY+0k030 IopmOf fs巳t0x20ac+0k032 Iopl0 1 1+0k033 Unused0 +0k034 ActiveProcessors1+0k03S KernelTime0+0k03c UserTime0+0k040 Ready!istHeadLIST ENTRY 0K813a9dc8 - OK013a9dc8 +0k04S SwapList
10、EntrySINGLE LIST ENTRY+0k04c VdmTrapcHandler7null)+0k050 ThreadListH已aidLIST ENTRY 0K813a9cc0 - Os013a9ccO +0k05S ProcessLock0+0k05c Af f inity1+0k060 AutoAlignmentOyO+0k060 DisableBoostOyO+0k060 Disab1eQuantumOyO+0k060 ReservedFlagsOyOOOOOOOOOOOOOOOOOOOOOOOOOOOOO (0)+0k060 ProcessFlags0+0k064 BaseP
11、riorityS 1 1+0k065 QuantumReset6 1 1+0k066 State0 1 1+0k067 ThreadSeed0 +0k06S PowerState0 1 1+0k069 IdealNode0 1 1+0K06a Visited0 +0k06L FlagsKEXECUTE OPTIONS+0k06b EsecuteOptions0 1 1+0k06c StackCount1+0k070 ProcessListEntryLIST ENTRY 0k0 - 0k0 kd |可以看到KPROCESS其中有一个域 DirectoryTableBase,对应值为 0x9e1f
12、000,这就是try.exe进程页目录的基址(物理地址)。查看cr3寄存器的内容,输入命令:r cr3kd r cr3cr3=09elf000pd|得到的值和上述相同,这是因为CPU切换执行任务时,其内容要更 新为当前进程的页目录基址。2、地址转译过程下面实验的是虚拟地址到物理地址的转译过程。假设给定的虚拟地址为 0x101401。首先将其变换为 32 位的地址结构,如下:页目录索引页表索引页内索引二进制值00100000001010000000001十六进制值0x00x1010x401输入命令: kd !pte 0x101401可以查看给定的虚拟地址的PTE信息:kd !pte 010140
13、1VA 00101401PDE ait C0300000PTE at C0000404containw 0B9EFS67contains 00000000pfn b9ef DAUUEV可以看到: PDE的虚拟地址为C0300000。这是因为每个进程页目录的基址(虚 拟地址)均为C300000,而每个进程页目录项长度为4字节,给 定虚址的页目录索引为0x0,故其对应的PTE为C0300000。 PTE为C0000404。因为进程的页表虚拟地址从C0000000开始。页面大小为4096 (0x1000)字节,每个PTE长度为4字节,由页目 录索引值(0x0)可知虚址处于第1个页表上,页表索引为0x
14、101,故对应的 PTE 为(C0000000+4*0x101二 C0000404)最后一行信息“pfn b9ef -DA-UWEV”表示PDE的具体内容,b9ef 是给定虚址所在页表在内存中对应的物理页号; “ -DA-UWEV” 是标志信息。不知道为什么自己的电脑上无法出现数据页装入内 存的物理页号,如pfn XXXX -A-XXXX,因此无法得到虚址的物理 地址。因此,0x101401的物理地址应该为物理页号XXXX加上页 内索引(0x401),具体数值由于电脑问题没有办法确切得到。3、观察系统页表验证不同的进程目录页会指向相同的系统页表。观察虚址0x80001001,转换为32位地址结构,如下:页目录索引页表索引页内索引二进制值10000000000000000001000000000001十六进制值0x2000x10x1十进制值51211输入命令:kd !processkd!processPROCESS 813a9d88 Session Id: 0 匚 id: 04 deFeb: 7f fd90Ll0 Parent 匚 iM: 0428Dir-Base : 09elf 0 0 0 Ob j ectTable : el4ald5Ll Hand 1 eCount