收藏 分享(赏)

操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc

上传人:精品资料 文档编号:8150907 上传时间:2019-06-11 格式:DOC 页数:21 大小:688.57KB
下载 相关 举报
操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc_第1页
第1页 / 共21页
操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc_第2页
第2页 / 共21页
操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc_第3页
第3页 / 共21页
操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc_第4页
第4页 / 共21页
操作系统实验 第四讲 物理存储器与进程逻辑地址空间的管理.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、操作系统实 验 报 告课程名称 操作系统实验实验项目名称 物理存储器与进程逻辑地址空间的管理学号 班级 20120616姓名 专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师 初妍实验室名称地点 21#428哈尔滨工程大学计算机科学与技术学院1一、实验概述1. 实验名称 物理存储器与进程逻辑地址空间的管理2. 实验目的 通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存, 从而掌握进程逻辑地 址空间的管理方法。3. 实验类型 验证+设计4. 实验内容 3.1 准备实验3.2 阅读控制台命

2、令“pm”相关的源代码,并查看其执行的结果3.3 分配物理页和释放物理页3.4 阅读控制台命令“vm”相关的源代码,并查看其执行的结果3.5 在系统进程中分配虚拟页和释放虚拟页3.6 在应用程序进程中分配虚拟页和释放虚拟页3.6.1 要求3.6.2 测试方法3.6.3 提示二、实验环境操作系统 windos xp编译器 OS Lab语言 c 语言三、实验过程21. 设计思路和流程图MiAllocateAnyPages 函数的流程图MiFreePages 函数的流程图2. 需要解决的问题及解答(1)在实验指导的 P160-4.和 5.按 F10 单步调试 MmAllocateVirtualMem

3、ory 函数的执行过程,要求给出监视窗口 BaseAddress 和 RegionSize 个变量前后变化截图界面。3截图见 3.5。在实验指导的 P160-1.和 2. 按 F10 单步调试 MmFreeVirtualMemory 函数的执行过程,要求给出监视窗口 BaseAddress 和 RegionSize 个变量前后变化截图界面。截图见 3.5。(2)按照实验指导的 P160-3.6 在应用程序进程中分配虚拟页和释放虚拟页,编写代码。要求至少给出源代码及其解释。程序见 3.6.2。 (3)按 F10 单步调试 MiAllocateAnyPages 函数的执行过程,尝试回答下面的问题:

4、本次分配的物理页的数量是多少?分配的物理页的页框号是多少?物理页是从空闲页链表中分配的?还是从零页链表中分配的?哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?答:本次分配的物理页的数量是 1,分配的物理页的页框号是 0x409;物理页是从空闲页链表中分配的第 226 行 MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)-Next;和第227 行 MiFreePageCount-;减少了空闲页的数量,第 229 行将刚刚分配的物理页 由空闲状态修 改为忙状态;(4)按 F10 单步调试 MiFreePages 函数的执

5、行过程,尝试回答下面的问题:本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分配的物理页吗?释放的物理页是被放入了空闲页链表中?还是零页链表中?绘制 MiFreePages 函数的流程图。答:本次释放的物理页的数量是 1,释放的物理页的页框号 0x409,释放的物理页是之前 分配的物理页;释放的物理页被放入了空闲页链表中;见实验过程开头流程图部分。(5)按 F10 单步调试 MmAllocateVirtualMemory 函数的执行过程,尝试回答下面的问题:分配的虚拟页的起始地址是多少?分配的虚拟页的数量是多少?它们和参数4BaseAddress 和 RegionS

6、ize 初始化的值有什么样的关系?分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?分配的虚拟页是在系统地址空间(高 2G)还是在用户地址空间(低 2G)?这是由哪个参数决定的?参考 MiReserveAddressRegion 函数的定义和注释,说明该函数的功能。答:分配的虚拟页的起始地址是 0xa0003000,分配的虚拟页的数量是1,BaseAddress 和 RegionSize 初始化的值是期望保留或者提交的地址区域的起始地址和大小;分配虚拟页的同时有为虚拟页映射实际的物理页,这是由第三个参数AllocationType 决定的;分配的虚拟页是在系统地址空间(高 2

7、G),这是由第四个参数 SystemVirtual决定的;MiReserveAddressRegion 函数的功能是保留一段虚拟地址区域。(6)按 F10 单步调试 MmFreeVirtualMemory 函数的执行过程,尝试回答下面的问题:本次释放的虚拟地址是多少?释放的虚拟页是之前分配的虚拟页吗?参考 MiFindReservedAddressRegion 函数、MiFreeAddressRegion 函数和MiDecommitPages 函数的定义和注释,说明这些函数的功能。答:本次释放的虚拟地址是 0xa0003000,是之前分配的虚拟页;MiFindReservedAddressRe

8、gion 函数用于查找已保留地址区域,如果目标区域非已保留区域则返回失败,MiFreeAddressRegion 函数用于释放已保留地址区域和 MiDecommitPages 函数用于释放映射在连续虚拟页框上的物理页框。(7)在本实验3.3 中,如果分配了物理页后,没有回收,会对 EOS 操作系统造成什么样的影响?目前 EOS 操作系统内核函数 MiAllocateAnyPages 能处理所有物理页被分配完毕的情况吗?例如在没有可分配的物理页的情况下调用该内核函数,是否会返回失败?如果内核函数 MiAllocateAnyPages 还不能处理这种极端情况,尝试修改代码解决这个问题。答:如果分配

9、了物理页后,没有回收,将会使可分配自由页和零页越来越少,5最终导致内存溢出,系统无法运行。目前 EOS 操作系统内核函数MiAllocateAnyPages 不能处理所有物理页被分配完毕的情况,在没有可分配的物理页的情况下,不会分配物理页,但仍然会返回成功,添加以下代码即可:Elsereturn STATUS_MEMORY_NOT_ALLOCATED;(8)在本实验 3.3 中,在分配物理页时是调用的内核函数MiAllocateAnyPages,该函数会优先分配空闲页,尝试修改代码,调用内核函数 MiAllocateZeroedPages 优先分配零页,并调试分配零页的情况。尝试从性能的角 7

10、 度分析内核函数 MiAllocateAnyPages 和 MiAllocateZeroedPages。尝试从安全性的角度分析分配零页的必要性。 答:将 MiAllocateAnyPages(1, PfnArray);修改为MiAllocateZeroedPages(1, PfnArray);即可。系统启动时,所有空闲物理页都是未初始化的,此时零页链表为空,MiAllocateAnyPages 函数可以直接从自由页链表分配,而 MiAllocateZeroedPages 函数会对从自由页链表中分配的每一页进行零初始化,确保所有分配页都是被零初始化的,再进行分配,因此MiAllocateZero

11、edPages 函数效率较低。但因为 MiAllocateZeroedPages 函数对自由页进行了初始化,减小了出错的可能性,从而安全性较高。3.主要数据结构、实现代码及其说明typedef struct _MMPFN ULONG Unused : 9; / 未用 ULONG PageState : 3; / 物理页的状态 ULONG Next : 20; / 下一个物理页的页框号 MMPFN, *PMMPFN; typedef enum _PAGE_STATE ZEROED_PAGE, / 零页 FREE_PAGE, / 自由页 BUSY_PAGE, / 占用页 PAGE_STATE; /

12、 虚拟地址描述符6typedef struct _MMVAD ULONG_PTR StartingVpn; / 被使用区域的开始虚页框号 ULONG_PTR EndVpn; / 被使用区域的结束虚页框号 LIST_ENTRY VadListEntry; / 链表项,用于将描述同一地址空间的所有 VAD串 /成链表 MMVAD, *PMMVAD; / 虚拟地址表 typedef struct _MMVAD_LIST ULONG_PTR StartingVpn; / 记录的进程地址空间的开始虚页号 ULONG_PTR EndVpn; / 记录的进程地址空间的结束虚页号 LIST_ENTRY Vad

13、ListHead; / VAD 链表头 MMVAD_LIST, *PMMVAD_LIST; 4.程序运行时的初值和运行结果3.1 准备实验1. 启动 OS Lab。2. 新建一个 EOS Kernel 项目。3.2 阅读控制台命令“pm”相关的源代码,并查看其执行的结果执行控制台命令“ pm”,查看物理存储器的信息:3.3 分配物理页和释放物理页使用 pm.c 文件中 ConsoleCmdPhysicalMemory 函数的 函数体替换 ke/sysproc.c 文件中 ConsoleCmdPhysicalMemory 函数的函数体。调试并执行控制台命令“ pm”,查看物理存储器的信息:7分配

14、和释放多个物理页调用 MiAllocateAnyPages 函数时分配多个物理页,然后在调用 MiFreePages 函数时将分配的多个物理页释放。83.4 阅读控制台命令“vm”相关的源代码,并查看其执行的结果执行控制台命令“ vm”,查看系统进程的虚拟地址描述符信息:按 F5 启动调试。待 EOS 启动完毕,在 EOS 控制台中输入命令“pt”后按回车。“pt”命令可以输出当前系统中的进程列表,其中系统进程的 ID 为 1。在 EOS 控制台中输入命令“ vm 1”后按回车得到虚拟地址描述符信息。9执行控制台命令“ vm”,查看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描

15、述符的信息:切换到“Console-2”, 然后输入命令“ pt”后按回车。 输出的信息:10输入命令“ vm 1”后按回车,可以查看系统进程中虚拟地址描述符的信息输入命令“ vm 31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息113.5 在系统进程中分配虚拟页和释放虚拟页使用 vm.c 文件中 ConsoleCmdVM 函数的函数体替换 ke/sysproc.c 文件中 ConsoleCmdVM 函数的函数体。在 EOS 控制台中输入命令“vm 1”后按回车12调试分配虚拟页和释放虚拟页的过程:vm 命令开始执行后,会在调用 MmAllocateVirtualMemory 函数的

16、代码行处中断。 此时要注意参数BaseAddress 和 RegionSize 初始化的值。分配虚拟页的调试过程中 BaseAddress 和 RegionSize 的值的变化:进入函数之前 BaseAddress 和 RegionSize 的值退出函数以后 BaseAddress 和 RegionSize 的值释放虚拟页的调试过程中 BaseAddress 和 RegionSize 的值的变化:进入函数前 BaseAddress 和 RegionSize 的值13刚退出函数时 BaseAddress 和 RegionSize 的值在调用 MmAllocateVirtualMemory 函数时

17、将 RegionSize 参数的值设置为 PAGE_SIZE+1 时“输出”窗口中转储的信息:Total Vpn from 655360 to 657407. (0xA0000000 - 0xA07FFFFF)1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 -

18、 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Inclu

19、de 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Total Vpn Count: 2048.Allocated Vp

20、n Count: 21.Free Vpn Count: 2027.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.New VMs base address: 0xA0017000. Size: 0x3000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)143# Vad Include 2 Vp

21、n From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374.

22、 (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016

23、FFF)12# Vad Include 3 Vpn From 655383 to 655385. (0xA0017000 - 0xA0019FFF)Allocated Vpn Count: 24.Free Vpn Count: 2024.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.Free VMs base address: 0xA0017000. Size: 0x3000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2#

24、Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 6

25、55371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA00

26、13000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Allocated Vpn Count: 21.Free Vpn Count: 2027.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.在调用 MmAllocateVirtualMemory 函数时将 BaseAddress 参数的值设置为已经被占用的虚拟内存,例如 0xA0000000, “输出”窗口中转储的信息:15Total Vpn fr

27、om 655360 to 657407. (0xA0000000 - 0xA07FFFFF)1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0x

28、A0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9#

29、 Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Total Vpn Count: 2048.Free Vpn Count: 2027.Zeroed Physical Page Count: 0.Free Physical Page C

30、ount: 7126.New VMs base address: 0xA0003000. Size: 0x1000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 1 Vpn From 655363 to 655363. (0xA0003000 - 0xA0003FFF)4# Vad Include 2 Vpn From 655365 to

31、 655366. (0xA0005000 - 0xA0006FFF)5# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)6# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)7# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)8# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0

32、xA000EFFF)9# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)10# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)11# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)12# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Free Vpn Co

33、unt: 2026.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.Free VMs base address: 0xA0003000. Size: 0x1000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)162# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 65536

34、6. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000E

35、FFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Free Vpn Count: 20

36、27.Free Physical Page Count: 7126.在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为 PAGE_SIZE*2, 将 BaseAddress 参数的值设置为 0xA0017004,“输出”窗口中转储的信息:Total Vpn from 655360 to 657407. (0xA0000000 - 0xA07FFFFF)1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 65

37、5361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B

38、000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Va

39、d Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Total Vpn Count: 2048.Allocated Vpn Count: 21.Free Vpn Count: 2027.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.17New VMs base address: 0xA0017000. Size: 0x3000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0

40、xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include

41、 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 6

42、55380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)12# Vad Include 3 Vpn From 655383 to 655385. (0xA0017000 - 0xA0019FFF)Free Vpn Count: 2024.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.Free VMs base address: 0xA0017000. Size: 0x300

43、0.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF)3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF)4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF)5# Vad Include 2 Vpn F

44、rom 655369 to 655370. (0xA0009000 - 0xA000AFFF)6# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF)7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF)8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF)9# Vad Include 2 Vpn From 655377 to 655378. (0

45、xA0011000 - 0xA0012FFF)10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF)Free Vpn Count: 2027.Zeroed Physical Page Count: 0.3.6 在应用程序进程中分配虚拟页和释放虚拟页3.6.1 要求创建一个 EOS 应用程序,并编写代码完成下列功能:181. 调用 API 函数 VirtualAlloc,分

46、配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间。2. 修改整型变量的值为 0xFFFFFFFF。在修改前输出整型变量的值,在修改后再输出整型变量的值。3. 调用 API 函数 Sleep, 等待 10 秒钟。4. 调用 API 函数 VirtualFree,释放之前分配的整型变量的空间。5. 进入死循环,这样应用程序就不会结束。3.6.2 编写的代码:#include “EOSApp.h“ int main(int argc, char* argv) #ifdef _DEBUG _asm(“int $3n nop“); #endif INT *d; /*调用 API 函数 Vi

47、rtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间。*/ if(d=VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT) printf(“Allocated %d bytes virtual memory of 0x%xnn“,*d); /*修改整型变量的值为 0xFFFFFFFF。在修改前输出整型变量的值,在修改后再输出整型变量的值*/ printf(“virtual memory original value :0x%x nn“,*d); *d=0xFFFFFFFF;printf(“a new virtua

48、l memory value :0x%x nn“,*d); printf(“nWait for 10 secondsn“); Sleep(10000);/* 调用 API 函数 Sleep 等待 10 秒钟。*/if(VirtualFree(d,0,MEM_RELEASE)/*19调用 API 函数 VirtualFree,释放之前分配的整型变量的空间。*/ printf(“nRelease virtual memory sucess!n“); else printf(“release errorn“); printf(“endless loop“); /*进入死循环,这样应用程序就不会结束。

49、*/ for(;); else printf(“errorn“); return -1; printf(“Hello world!n“); return 0; 运行结果:在应用程序进程中分配虚拟页和释放虚拟页分配虚拟页后和释放虚拟页后,应用程序进程的虚拟地址描述符信息20四、实验体会本次实验中,我通过调试 EOS 操作系统对物理存储空间和虚拟存储空间的分配和回收函数,对操作系统的内存管理机制和实现有了更深一步的认识,并通过调用 API 函数自己设计了在应用程序进程中分配虚拟页和释放虚拟页的程序。通过编程,我也捋清了虚拟内存分配和释放时的函数调用关系,并通过阅读函数源码了解了具体的逻辑顺序,也学习到了一些编程的方式。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报