您好,欢迎来到华拓网。
搜索
您的当前位置:首页物理存储器与进程逻辑地址空间的管理

物理存储器与进程逻辑地址空间的管理

来源:华拓网


操作系统 实 验 报 告

课程名称 实验项目名称 学号 操作系统实验 物理存储器与进程逻辑地址空间的管理 班级 090614 计算机科学姓名 计算机科学与技学生所在学院 术学院 实验室名称地点 计算机软件第一实验室

专业 与技术 指导教师 哈尔滨工程大学 计算机科学与技术学院

一、实验概述

1. 实验名称

物理存储器与进程逻辑地址空间的管理。

2. 实验目的

通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。

通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。

3. 实验类型

验证,设计。

4. 实验内容 准备实验:

启动OS Lab。 新建一个EOS Kernel项目。

执行控制台命令“pm”,查看物理存储器的信息:

按F7生成在本实验3.1中创建的EOS Kernel项目。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。

修改pm命令的源代码:

使用OS Lab打开本实验文件夹中的pm.c文件(将文件拖动到OS Lab窗口中释放即可打开)。此文件中有一个修改后的ConsoleCmdPhysicalMemory函数,主要是在原有代码的后面增加了分配物理页和释放物理页的代码。 使用pm.c文件中ConsoleCmdPhysicalMemory函数的函数体替换ke/sysproc.c文件中ConsoleCmdPhysicalMemory函数的函数体。 按F7生成修改后的EOS Kernel项目。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。

分配物理页和释放物理页:

结束之前的调试。在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函数中,在调用MiAllocateAnyPages函数的代码行(第1103行)添加一个断点,在调用MiFreePages函数的代码行(第1115行)添加一个断点。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。 pm命令开始执行后,会在调用MiAllocateAnyPages函数的代码行处中断,按F11调试进入MiAllocateAnyPages函数。按F10单步调试MiAllocateAnyPages函数的执行过程。按F5继续执行,会在调用MiFreePages函数的代码行处中断,按F11调试进入MiFreePages函数。按F10单步调试MiFreePages函数的执行过程。

执行控制台命令“vm”,查看系统进程的虚拟地址描述符信息:

1

按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“pt”后按回车。“pt”命令可以输出当前系统中的进程列表,其中系统进程的ID为1。在EOS控制台中输入命令“vm 1”后按回车。观察命令执行的结果。

执行控制台命令“vm”,查看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描述符的信息:

在“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开

此软盘镜像。将本实验文件夹中的LoopApp.exe文件添加到软盘镜像的根目录中(将LoopApp.exe文件拖动到FloppyImageEditor窗口中释放即可)。EOS应用程序LoopApp.exe的源代码可以参考本实验文件夹中的LoopApp.c文件。点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“A:\\LoopApp.exe”后按回车。此时按Ctrl+F2切换到“Console-2”,然后输入命令“pt”后按回车。输入命令“vm 1”后按回车,可以查看系统进程中虚拟地址描述符的信息。 输入命令“vm 31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息。

在系统进程中分配虚拟页和释放虚拟页:

使用OS Lab打开本实验文件夹中的vm.c文件(将文件拖动到OS Lab窗口中释放即可打开)。此文件中有一个修改后的ConsoleCmdVM函数。使用vm.c文件中ConsoleCmdVM函数的函数体替换ke/sysproc.c文件中ConsoleCmdVM函数的函数体。按F7生成修改后的EOS Kernel项目。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“vm 1”后按回车。

调试分配虚拟页和释放虚拟页的过程:

在ke/sysproc.c文件的ConsoleCmdVM函数中,在调用MmAllocateVirtualMemory

函数的代码行(第1082行)添加一个断点,在调用MmFreeVirtualMemory函数的代码行(第1147行)添加一个断点。按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“vm 1”后按回车。vm命令开始执行后,会在调用MmAllocateVirtualMemory函数的代码行处中断。此时要注意参数BaseAddress和RegionSize初始化的值。按F11调试进入MmAllocateVirtualMemory函数。按F10单步调试MmAllocateVirtualMemory函数的执行过程,观察命令执行的结果。

调试释放虚拟页的过程:

按F5继续执行,会在调用MmFreeVirtualMemory函数的代码行处中断。

此时要注意参数BaseAddress和RegionSize初始化的值。按F11调试进入MmFreeVirtualMemory函数。按F10单步调试MmFreeVirtualMemory函数的执行过程。

创建一个EOS应用程序,并编写代码完成下列功能:

2

调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的

指针指向这个空间。修改整型变量的值为0xFFFFFFFF。在修改前输出整型变量的值,在修改后再输出整型变量的值。调用API函数Sleep,等待10秒钟。调用API函数VirtualFree,释放之前分配的整型变量的空间。进入死循环,这样应用程序就不会结束。

测试方法:

代码修改完毕后,按F7生成EOS应用程序项目。按F5启动调试。在应用程序分

配虚拟页后,利用10秒后才释放虚拟页的间隙,可以在控制台2中执行命令“vm 31”,查看此时应用程序进程的虚拟地址描述符信息;在应用程序释放虚拟页后,可以在控制台2中再次执行命令“vm 31”,查看此时应用程序进程的虚拟地址描述符信息。

二、实验环境

操作系统集成实验环境:OS Lab 语言:C语言 三、实验过程

设计思路和流程图:分页管理物理存储器:

4. 主要数据结构、实现代码及其说明:

INT *d;

if(d = VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT)){// 调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间

3

printf(\"Allocated %d bytes virtual memory of 0x%x\\n\\n\ printf(\"virtual memory original value:0x%x\\n\\n\ *d = 0xFFFFFFFF;// 修改整型变量的值为0xFFFFFFFF

printf(\"virtual memory new value:0x%x\\n\\n\ printf(\"\\nWait for 10 seconds\\n\");

Sleep(10000);// 调用API函数Sleep,等待10秒钟。

if(VirtualFree(d,0,MEM_RELEASE))// 调用API函数VirtualFree,释放之前分配的整型变量的空间

printf(\"\\nRealease virtual memory success!\\n\"); else

printf(\"realease error\\n\"); printf(\"\\nEndless loop!\"); for(;;); } else {

printf(\"error\\n\");

return -1;//若不能成功分配,打印出error ,返回-1. }

printf(\"Hello world!\\n\"); return 0;

6. 程序运行时的初值和运行结果:

4

5

四、实验体会

通过本次试验,我们练习了分配和回收物理内存,懂得物理存储器的管理方法,并且通过

6

查看进程逻辑地址空间的使用情况来练习分配和回收虚拟内存,从而更好地掌握进程逻辑地址空间的管理方法。而且每次当自己成功的被检查通过时,心里的高兴可以持续好久。所以实验不仅给我们知识上的满足还给我们心里的满足。

7

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务