操作系统 实 验 报 告
课程名称 实验项目名称 学号 操作系统实验 课程编号 0906553 物理存储器与进程逻辑地址空间的管理 年级 计算机科学姓名 计算机科学与技专业 与技术 学生所在学院 术学院 实验室名称地点
指导教师
哈尔滨工程大学 计算机科学与技术学院
物理存储器与进程逻辑地址空间的管理
一. 实验概述:
1.实验名称:物理存储器与进程逻辑地址空间的管理 2.实验目的:
1)通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法;
2)通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的 管理方法。 3.实验类型:验证、设计 4.实验内容:
1)准备实验,创建一个EOS Kernel项目;
2)阅读控制台命令“pm”相关的源代码,并查看其执行的结果; 3)分配物理页和释放物理页;
4)阅读控制台命令“vm”相关的源代码,并查看执行的结果; 5)在系统进程中分配虚拟页和释放虚拟页; 6)在应用程序进程中分配虚拟页和释放虚拟页。 二.实验环境
操作系统:windows XP 编译器:Tevalaton OS Lab 语言:C 三.实验过程
1.设计思路和流程图:
MiAllocateAny函数流程图:
1
MiFreePages函数流程图:
2.实验过程:
1)新建一个 EOS Kernel 项目;
2)阅读 ke/sysproc.c 文件中的 ConsoleCmdPhysicalMemory 函数,学习“pm”命令是如何统计并输出物理存储器信息的。在阅读的过程中应注意:
①在统计输出物理存储器信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程 中有其它线程分配或者释放物理页;
②全局变量 MiTotalPageFrameCount 保存了物理页的总数。每个物理页的大小是 4KB,由宏 PAGE_SIZE 定义;
③全局变量 MiZeroedPageCount 和 MiFreePageCount 分别保存了零页和空闲页的数量;
④计算已用物理页数量的方法是:物理页总数减去零页数量,再减去空闲页数量。 3)生成所创建的项目,启动调试,待EOS启动完毕,在EOS控制台中输入命令“pm”后回车,观察命令执行的结果。
2
4)将修改后的ConsoleCmdPhysicalMemory 函数进行替换,主要是在原有代码的后面添加了分配物理页和释放物理页的代码,生成修改后的EOS Kernel项目,启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车;
5)结束调试,在调用 MiAllocateAnyPages 函数的代码行添加一个断点,在调用 MiFreePages 函数的代码行添加一个断点;
6)启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车,pm 命令开始执行后,会在调用 MiAllocateAnyPages 函数的代码行处中断,按 F11(逐语句)调试进入 MiAllocateAnyPages 函数;
3
按 F10(逐过程)单步调试 MiAllocateAnyPages 函数的执行过程:
7)继续执行,,会在调用 MiFreePages 函数的代码行处中断,按F11(逐语句)调试进入 MiFreePages 函数;
按 F10(逐过程)单步调试 MiFreePages 函数的执行过程:
4