【操作系统原理 实验报告5】物理存储器与进程逻辑地址管理

【操作系统原理 实验报告5】物理存储器与进程逻辑地址管理 上一篇【操作系统原理 实验报告4】时间片轮转调度目录一、实验目的和要求二、实验预习内容三、实验项目摘要四、实验结果与分析实验心得一、实验目的和要求1.通过查看物理存储器的使用情况并练习分配和回收物理内存从而掌握物理存储器的管理方法。2.通过查看进程逻辑地址空间的使用情况并练习分配和回收虚拟内存从而掌握进程逻辑地址空间的管理方法。二、实验预习内容了解物理存储器的管理方式和进程逻辑地址空间的管理方式。对基本的存储器管理方式有基本的了解明白物理地址与逻辑地址之间执行时的差别三、实验项目摘要1查看现存系统中的物理内存观察pm指令执行结果与物理内存一至分配一个物理内存的前后地址变化使用修改后的函数来观察物理内存分布使用vm指令来观察虚拟地址的分布Pid 1Pid 24修改代码后显示 vm 18.刚开始时 baseaddress 0x0,regionsize 0x1执行一次分配后 baseaddress 0xa0003000 regionsize 0x1000释放虚拟页开始时 baseaddress 0xa0003000 regionsize 0x0结束时 baseaddress 0xa0003000 regionsize 0x1000将regionsize 改为 page_size1 执行前:执行后Baseaddress 0xa0003000 regionsize 0x2000四、实验结果与分析1完成“3.3分配物理页和释放物理页”中对MiAllocateAnyPages和MiFreePages函数的单步调试过程并回答问题。按F10单步调试MiAllocateAnyPages函数的执行过程中尝试回答下面的问题本次分配的物理页的数量是多少?分配的物理页的页框号是多少?本次分配的物理页数量为1操作系统的已使用页数量加1分配物理页的页框号为0x409物理页是从空闲页链表中分配的?还是从零页链表中分配的?本次分配是从空闲页链表中分配的哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?MiFreePageCount--;这行代码减少了空闲页数量MiPgetpfnDatabaseEntry(pfn)-PageState BUSY_PAGE;将物理页由空闲状态改为忙状态绘制 MiAllocateAnyPages 函数的流程图。按F10单步调试MiFreePages函数的执行过程回答下面的问题:(1) 本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分 配的物理页吗?本次释放的物理页数量为1页框号为0x409;是之前分配的物理页(2) 释放的物理页是被放入了空闲页链表中?还是零页链表中?被放入了空闲页链表绘制 MiFreePages 函数的流程图。修改 pm 命令的源代码尝试在调用 MiAllocateAnyPages 函数时分配多个物理页 然后在调用 MiFreePages 函数时将分配的多个物理页释放给出修改后代码和运行结果截图。2在本实验 3.3中在分配物理页时是调用的内核函数 MiAllocateAnyPages该函数会优先分配空闲页尝试修改代码调用内核函数 MiAllocateZeroedPages优先分配零页并调试分配零页的情况。尝试从性能的角度分析内核函数 MiAllocateAnyPages和 MiAllocateZeroedPages。尝试从安全性的角度分析分配零页的必要性。3完成“3.5在系统进程中分配虚拟页和释放虚拟页”中对MmAllocateVirtualMemory和MmFreeVirtualMemory的调试过程并回答问题。按F10单步调试MmAllocateVirtualMemory函数的执行过程尝试回答下面的问题:(1) 分配的虚拟页的起始地址是多少?分配的虚拟页的数量是多少?它们和参数BaseAddress和 RegionSize 初始化的值有什么样的关系?起始地址为0x0,分配虚拟页数量为1 分配虚拟页的起始地址与baseaddress相同regionsize大小与虚拟额大小相同(2) 分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?有由AllocationType决定的(3) 分配的虚拟页是在系统地址空间(高 2G)还是在用户地址空间(低 2G)?这是由哪个参数决定的?分配的虚拟页在系统地址空间由第四个参数SystemVirtual决定的。(4) 参考 MiReserveAddressRegion 函数的定义和注释说明该函数的功能。MiReserveAddressRegion函数的功能是保留一段虚拟地址区域。按F10单步调试MmFreeVirtualMemory函数的执行过程尝试回答下面的问题:(1) 本次释放的虚拟地址是多少?释放的虚拟页是之前分配的虚拟页吗?本次释放的虚拟地址是0xa0003000是之前分配的虚拟页(2) 参考 MiFindReservedAddressRegion 函数、MiFreeAddressRegion 函数和 MiDecommitPages函数的定义和注释说明这些函数的功能。MiFindReservedAddressRegion函数查找已保留地址区域如果目标区域非已保留区域则返回失败。② MiFreeAddressRegion函数释放已保留地址区域。③ MiDecommitPages函数释放映射在连续虚拟页框上的物理页框。按照下列要求修改 ConsoleCmdVM 函数的源代码加深对虚拟页分配和释放过程的理解。选做其一仅保留选做题目、运行结果和对应分析尝试在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE1或者 PAGE_SIZE*21。观察“输出”窗口中转储的信息并说明申请虚拟内存的大小与实际分配的大 小之间的关系以及分配的虚拟内存大小会对分配的虚拟地址产生什么样的影响。将“输出”窗 口中转储的信息保存在文本文件中。尝试在调用MmAllocateVirtualMemory函数时将BaseAddress参数的值设置为已经被占用的虚拟 内存例如 0xA0000000观察“输出”窗口中转储的信息。将“输出”窗口中转储的信息保存在 图像文件中。尝试在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE*2将 BaseAddress 参数的值设置为 0xA0017004观察“输出”窗口中转储的信息并说明申请虚拟内 存的大小与实际分配的大小之间的关系以及申请的虚拟地址会对分配的虚拟内存大小产生什么 样的影响。将“输出”窗口中转储的信息保存在图像文件中。结束时baseaddress0xa0017000,regionsize 0x3000实验心得本次存储器管理实验围绕物理内存与虚拟内存的分配、回收及监控展开通过实操指令调试、代码修改和结果分析我不仅深入理解了操作系统存储器管理的底层逻辑也切实体会到理论知识与实践操作结合的重要性现将实验中的收获与思考总结如下。在物理内存管理模块的实操中我通过单步调试MiAllocateAnyPages和MiFreePages函数清晰看到了物理页分配与释放的完整流程。调试时我发现分配物理页时系统会优先从空闲页链表中选取页框本次分配的 1 个物理页页框号为 0x409执行MiFreePageCount--语句时空闲页数量减少而MiPgetpfnDatabaseEntry(pfn)-PageState BUSY_PAGE则将页状态标记为忙释放物理页时页框会被重新归回空闲页链表页状态也随之恢复。这一过程让我直观理解了物理内存管理中 “空闲 - 分配 - 释放” 的核心逻辑也意识到页状态标记、空闲页计数这些细节对物理内存高效利用的重要性。此外当我修改代码调用MiAllocateZeroedPages函数分配零页时对比发现该函数虽能保证内存初始化为 0提升数据安全性但分配效率略低于MiAllocateAnyPages—— 前者需要额外的清零操作后者则直接复用空闲页。这让我认识到操作系统在内存分配策略上需平衡性能与安全性零页分配虽牺牲少量效率却能避免未清零内存导致的敏感数据泄露在实际应用中具有不可替代的价值。虚拟内存管理的实验环节让我对逻辑地址与物理地址的映射关系有了更深刻的认知。调试MmAllocateVirtualMemory函数时我发现虚拟页分配的起始地址、数量与BaseAddress和RegionSize参数密切相关初始时BaseAddress为 0x0、RegionSize为 0x1分配后地址变为 0xa0003000、大小为 0x1000这是因为虚拟内存分配以页为单位系统会自动将申请的大小对齐到整页。当我将RegionSize改为PAGE_SIZE1时实际分配的大小变为 0x2000进一步验证了虚拟内存 “按页分配、向上取整” 的规则而当尝试将BaseAddress设置为已占用的 0xA0000000 时系统会提示地址冲突说明虚拟地址空间需保证唯一性避免地址重叠导致的访问错误。释放虚拟页时MmFreeVirtualMemory函数会先通过MiFindReservedAddressRegion查找目标区域再调用MiFreeAddressRegion释放保留的地址空间最后通过MiDecommitPages解除虚拟页与物理页的映射这一系列操作让我明白虚拟内存管理不仅是地址空间的分配更是地址映射关系的动态维护且系统地址空间高 2G与用户地址空间低 2G的划分也体现了操作系统对内存访问权限的严格管控。实验中最具挑战性的部分是修改代码并观察参数变化带来的影响例如将RegionSize设为PAGE_SIZE*21、BaseAddress设为 0xA0017004 时实际分配的虚拟内存大小变为 0x3000起始地址对齐到 0xA0017000。这让我意识到虚拟内存分配不仅受申请大小影响还受起始地址的对齐要求约束系统会优先保证地址的页对齐再满足大小需求。这些细节让我跳出了课本中对虚拟内存的抽象认知真正理解了 “虚拟地址是物理地址的抽象分配过程需兼顾硬件特性与系统规则” 的含义。回顾整个实验过程我不仅掌握了pm、vm等指令的使用方法更关键的是理解了存储器管理的核心目标 —— 通过合理分配、回收内存资源平衡系统性能、安全性与资源利用率。同时我也认识到自己在底层代码调试方面的不足例如初期对函数调用链的梳理不够清晰导致调试时难以快速定位关键语句。后续我会加强对内核函数逻辑的学习提升代码分析能力。此次实验让我深刻体会到操作系统的存储器管理是一个精密的系统工程每一个参数设置、每一条函数调用都关乎系统的稳定与高效。从物理页的状态管理到虚拟地址的映射机制从分配策略的性能权衡到地址空间的权限管控都体现了操作系统设计的严谨性。这次实验不仅巩固了我对存储器管理理论的理解更培养了我从底层视角分析问题、解决问题的能力为后续深入学习操作系统核心原理奠定了坚实的基础。