操作系统实验七.docx
- 文档编号:23067772
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:17
- 大小:677.79KB
操作系统实验七.docx
《操作系统实验七.docx》由会员分享,可在线阅读,更多相关《操作系统实验七.docx(17页珍藏版)》请在冰豆网上搜索。
操作系统实验七
操作系统
实验报告
课程名称
操作系统实验
实验项目名称
物理存储器与进程逻辑地址空间的管理
学号
班级
姓名
专业
学生所在学院
指导教师
实验室名称地点
一、实验概述
1.实验名称
物理存储器与进程逻辑地址空间的管理
2.实验目的
熟悉操作系统集成实验环境OSLab的基本使用方法。
练习编译、调试EOS操作系统内核以及EOS应用程序。
3.实验类型
验证
二、实验环境
OSLab
三、实验过程
3.2执行控制台命令“pm”,查看物理存储器的信息
3.3分配物理页和释放物理页
在1091和1103行插入断点
监视分配物理页
释放物理页
按F10单步调试MiAllocateAnyPages函数的执行过程,尝试回答下面的问题:
(1)本次分配的物理页的数量是1,分配的页框号是0x409
(2)物理页是从空闲页链表中分配的
(3)第226和227行:
MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->Next;MiFreePageCount--;减少了空闲页的数量;第229行将刚刚分配的物理页由空闲状态改为忙状态
(4)MiAllocateAnyPages函数的流程图
按F10单步调试MiFreePages函数的执行过程,尝试回答下面的问题:
(1)本次释放的物理页数为1,释放的物理页的页框号是0x409,释放的物理页是之前分配的物理页码
(2)释放的物理页被放入了空闲链表
(3)MiFreePages函数流程图
将分配和释放的物理页数设为2,调试后运行结果:
3.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果
输入命令pt
输入命令vm1
导入LoopApp.exe,输入命令A:
\LoopApp.exe后
输入pt后
输入vm1后
输入vm31后
3.5在系统进程中分配虚拟页和释放虚拟页
输入vm1命令后
输入vm1命令后在MmAllocateVirtualMemory函数处中断
此时BaseAddress和RegionSize初始值
进入MmAllocateVirtualMemory函数
调试MmAllocateVirtualMemory函数完成后
按F10单步调试MmAllocateVirtualMemory函数的执行过程中,尝试回答下列问题:
(1)分配的虚拟页的起始地址是0xa0003000,分配的虚拟页数量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址区域的起始地址和大小
(2)分配虚拟页的同时有为虚拟页映射实际的物理页,是由第三个参数AllocationType决定的
(3)分配的虚拟页是在系统地址空间(高2G),是由第四个参数SystemVirtual决定的
(4)MiReserveAddressRegion函数的功能是保留一段虚拟地址区域
按F5继续调试,在调用MmFreeVirtualMemory函数的代码行处中断
按F11调试进入MmFreeVirtualMemory函数
调试MmFreeVirtualMemory函数完毕后
按F10单步调试MmFreeVirtualMemory函数的执行过程中,尝试回答下列问题:
(1)本次释放的虚拟地址是0xa0003000,释放的虚拟页是之前分配的虚拟页
(2)MiFindReservedAddressRegion函数用于查找以保留地址区域,如果目标区域不是已保留区域则返回失败;MiFreeAddressRegion函数用于释放已保留地址区域;MiDecommitPages函数用于释放映射在连续虚拟页框上的物理页框
将RegionSize的值设置为PAGE_SIZE+1后
设置为PAGE_SIZE*2+1后
将BaseAddress参数的值设置为已经被占用的虚拟内存0xA0000000
将RegionSize的值设置为PAGE_SIZE*2BaseAddress参数的值设置为0x0017004
3.6在应用程序进程中分配虚拟页和释放虚拟页
代码如下:
#include"EOSApp.h"
intmain(intargc,char*argv[])
{
#ifdef_DEBUG
__asm("int$3\nnop");
#endif
INT*d;
if(d=VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT))
{
printf("Allocated%dbytesvirtualmemoryof0x%x\n\n",sizeof(int),d);
printf("virtualmemoryoriginalvalue:
0x%x\n\n",*d);
*d=0xFFFFFFFF;
printf("virtualmemorynewvalue:
0x%x\n\n",*d);
printf("\nWaitfor10seconds\n");
Sleep(10000);
if(VirtualFree(d,0,MEM_RELEASE))
printf("\nRealeasevirtualmemorysuccess!
\n");
else
{
//若释放不成功,打印输出错误,并返回-1。
printf("VirtualFreeError!
\n");
return-1;
}
printf("\nEndlessloop!
");
//进入死循环
for(;;){;}
return0;}
else
{
//若分配不成功,打印输出错误,并返回-1。
printf("VirtualAllocError!
\n");
return-1;
}
printf("Helloworld!
\n");
return0;
}
按F5调试
此时在控制台2中输入vm31
10秒后
此时在控制台2中输入vm31
四、思考题
五、实验体会
通过本次实验,练习分配和回收物理内存,我掌握了物理存储器的管理方法,通过查看进程逻辑地址空间的使用情况并练习分配和回收虚拟内存,掌握了进程逻辑地址空间的管理方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验