物理存储器与进程逻辑地址空间的管理实验报告_第1页
物理存储器与进程逻辑地址空间的管理实验报告_第2页
物理存储器与进程逻辑地址空间的管理实验报告_第3页
物理存储器与进程逻辑地址空间的管理实验报告_第4页
物理存储器与进程逻辑地址空间的管理实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实 验 报 告课程名称操作系统实验课程编号0906553实验项目名称物理存储器与进程逻辑地址空间的管理学号年级姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师实验室名称地点 哈尔滨工程大学计算机科学与技术学院物理存储器与进程逻辑地址空间的管理一 实验概述:1.实验名称:物理存储器与进程逻辑地址空间的管理2.实验目的:1)通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法;2)通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的 管理方法。 3.实验类型:验证、设计4.实验内容: 1)准备实验,创建一个

2、EOS Kernel项目; 2)阅读控制台命令“pm”相关的源代码,并查看其执行的结果; 3)分配物理页和释放物理页; 4)阅读控制台命令“vm”相关的源代码,并查看执行的结果; 5)在系统进程中分配虚拟页和释放虚拟页; 6)在应用程序进程中分配虚拟页和释放虚拟页。二实验环境操作系统:windows XP编译器:Tevalaton OS Lab语言:C三实验过程1.设计思路和流程图:MiAllocateAny函数流程图:MiFreePages函数流程图:2.实验过程:1)新建一个 EOS Kernel 项目;2)阅读 ke/sysproc.c 文件中的 ConsoleCmdPhysicalMe

3、mory 函数,学习“pm”命令是如何统计并输出物理存储器信息的。在阅读的过程中应注意:在统计输出物理存储器信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程 中有其它线程分配或者释放物理页;全局变量 MiTotalPageFrameCount 保存了物理页的总数。每个物理页的大小是 4KB,由宏 PAGE_SIZE 定义;全局变量 MiZeroedPageCount 和 MiFreePageCount 分别保存了零页和空闲页的数量;计算已用物理页数量的方法是:物理页总数减去零页数量,再减去空闲页数量。3)生成所创建的项目,启动调试,待EOS启动完毕,在EOS控制台中输入命令“p

4、m”后回车,观察命令执行的结果。4)将修改后的ConsoleCmdPhysicalMemory 函数进行替换,主要是在原有代码的后面添加了分配物理页和释放物理页的代码,生成修改后的EOS Kernel项目,启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车;5)结束调试,在调用 MiAllocateAnyPages 函数的代码行添加一个断点,在调用 MiFreePages 函数的代码行添加一个断点;6)启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车,pm 命令开始执行后,会在调用 MiAllocateAnyPages 函数的代码行处中断,

5、按 F11(逐语句)调试进入 MiAllocateAnyPages 函数;按 F10(逐过程)单步调试 MiAllocateAnyPages 函数的执行过程:7)继续执行,会在调用 MiFreePages 函数的代码行处中断,按F11(逐语句)调试进入 MiFreePages 函数;按 F10(逐过程)单步调试 MiFreePages 函数的执行过程: 8)阅读控制台命令“vm”相关的代码,并查看执行结果。 阅读 ke/sysproc.c 文件中的 ConsoleCmdVM 函数,学习“vm”命令是如何统计并输出进程的 虚拟地址描述符信息的,注意一下几点: 与“pm” ”命令输出的是整个系统的

6、物理存储器的使用情况不同,“vm”命令输出的是某个进程的 虚拟地址描述符信息,所以“vm”命令使用了一个参数进程 ID,用来指定一个进程。这个进 程既可以是系统进程,也可以是用户进程; 在统计输出指定进程的虚拟地址描述符信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程中有其它线程分配或者释放虚拟页; EOS 操作系统的进程有 4G 的虚拟地址空间,但并不是所有的虚拟地址空间都使用虚拟地址描述符 来管理,有一些地址空间是静态的,还有一些地址空间由其他的动态方式来管理(例如系统内存 池); 进程 4G 虚拟地址空间中由虚拟地址描述符所管理空间的低地址和高地址是固定的,在这段地址空间

7、中,如果有虚拟页被占用,就会使用虚拟地址描述符来标识,并放入链表中管理;9)启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“pt”后按回车。“pt”命令可以输出当前系统中的 进程列表,其中系统进程的 ID 为 1;在 EOS 控制台中输入命令“vm 1”后按回车,观察命令执行的结果:系统进程中由虚拟地址描述符所管理的虚拟页只会分配给进程的句柄表(句柄表占用一个虚拟页)和 线程的堆栈(堆栈占用两个虚拟页)。结合之前“pt”命令输出的进程和线程信息可知,当前系统中只有 1 个系统进程以及 10 个系统线程,所以在上图中,1 号描述符所包含的一个虚拟页即为系统进程的句柄表,而2到11号

8、这10个描述符所分别包含的两个虚拟页即为 10 个系统线程的堆栈。10)将LoopApp.exe文件添加到软盘镜像的根目录中,并保存,启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“A:LoopApp.exe”后按回车。此时就使用 EOS 应用 程序文件 LoopApp.exe 创建了一个应用程序进程,由于此进程执行了一个死循环,所以此进程不 会结束执行,除非关闭虚拟机;11)切换到“Console-2”,然后输入命令“pt”后按回车。输出的信息如图所示。其中 ID 为 31 的进程就是应用程序进程,ID 为 33 的线程就是应用程序进程的主线程;12)输入命令“vm 1”后按回

9、车,可以查看系统进程中虚拟地址描述符的信息。输出的信息如图所示。与第9步图比较可知,3 号描述符所包含的一个虚拟页即为应用程序进程的句柄表,13号描述符所包含的两个虚拟页即为应用程序进程主线程的堆栈;13)输入命令“vm 31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息;在进程的 4G 逻辑地址空间中,应用程序进程可以自行管理低 2G 的用户空间。从图 15-6 中的信息可以得知,低 2G 的用户空间又被分为了三部分: 0x00000000-0x0000FFFF 由 16 个虚拟页构成的 64KB 静态空间,用于捕捉对空指针的非法访问; 0x00010000-0x7FFEFFFF 由

10、虚拟地址描述符管理的动态空间,用于存储应用程序进程的代码和数 据。上图显示应用程序进程的代码和数据占用了此空间中的 5 个虚拟页,并且是用从应用程 序的基址 0x00400000 起始的; 0x7FFF0000-0x7FFFFFFF 由 16 个虚拟页构成的 64KB 静态空间,用于捕捉对空指针的非法访问。14)在系统进程中分配虚拟页和释放虚拟页,使用修改后的ConsoleCmdVM 函数的函数体替换 ke/sysproc.c 文件中 ConsoleCmdVM 函数的函数体,生成修改后的EOS Kernel项目,启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“vm 1”后按回车;

11、15)在 ke/sysproc.c 文件的ConsoleCmdVM 函数中,在调用MmAllocateVirtualMemory 函数的代码行添加一个断点,在调用 MmFreeVirtualMemory 函数的代码行添加一 个断点;16)启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“vm 1”后按回车,vm 命令开始执行后,会在调用 MmAllocateVirtualMemory 函数的代码行处中断。此时要注意参数 BaseAddress 和 RegionSize 初始化的值。按 F11(逐过程)调试进入 MmAllocateVirtualMemory 函数;17)按 F10(

12、逐过程)单步调试 MmAllocateVirtualMemory 函数的执行过程,继续执行,会在调用 MmFreeVirtualMemory 函数的代码行处中断。此时要注意参数 BaseAddress 和 RegionSize 初始化的值。按 F11 调试进入 MmFreeVirtualMemory 函数;18)尝试在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为 PAGE_SIZE+1 或者 PAGE_SIZE*2+1。观察“输出”窗口中转储的信息,并说明申请虚拟内存的大小与实际分配的大 小之间的关系,以及分配的虚拟内存大小会对分配的虚拟

13、地址产生什么样的影响。将“输出”窗 口中转储的信息保存在文本文件中;19)尝试在调用 MmAllocateVirtualMemory 函数时将 BaseAddress 参数的值设置为已经被占用的虚拟 内存,例如 0xA0000000,观察“输出”窗口中转储的信息。将“输出”窗口中转储的信息保存在 文本文件中;20)尝试在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为 PAGE_SIZE*2,将 BaseAddress 参数的值设置为 0xA0017004,观察“输出”窗口中转储的信息,并说明申请虚拟内 存的大小与实际分配的大小之间的关系,以

14、及申请的虚拟地址会对分配的虚拟内存大小产生什么 样的影响。将“输出”窗口中转储的信息保存在文本文件中;21)创建一个EOS应用程序,调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间。修改整型变量的值为 0xFFFFFFFF。在修改前输出整型变量的值,在修改后再输出整型变量的值。调用 API 函数 Sleep,等待 10 秒钟,调用 API 函数 VirtualFree,释放之前分配的整型变量的空间,进入死循环,这样应用程序就不会结束。#include “EOSApp.h”int main(int argc,char* argv)/启动调试

15、EOS应用程序前要特别注意下面的问题:/ 1、如果要在调试应用程序时能够调试进入内核显示对应的源码,必须使用EOS核心项目编译生成完全版本的SDK 文件夹,然后使用此文件夹覆盖应用程序项目中的SDK 文件夹,并且EOS核心项目在磁盘上的位置不能改变。 2、在启动调试应用程序之前必须首先删除禁用所有的断点,在断点中断(int 3) 被命中后才能重新添加启用断点,否则启动调试会失败。 #ifdef_DEBUG_asm(“int$3n nop”); #endif INT* p;/调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间 If(p=Vir

16、tualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT) printf(“Allocated %d bytes virtual memory of 0x%xnn”,sizeof(int),d); /输出原始整型变量的值 printf(virtual memory original value:0x%xnn,p); /修改整型变量的值为0xFFFFFFFF *p=0xFFFFFFFF; /输出修改后的整型变量的值 printf(virtual memory new value:0x%xnn,*p); printf(nWait for 10 secondsn)

17、; / 调用API函数Sleep,等待10秒钟 Sleep(10000); / 调用API函数VirtualFree,释放之前分配的整型变量的空间 if(VirtualFree(p,0,MEM_RELEASE) printf(nRealease virtual memory success!n); else /若释放不成功,打印输出错误,并返回-1。 printf(VirtualFree Error!n); return -1; return 0;22)代码修改完毕后,生成EOS应用程序项目,启动调试,输出结果如图所示。在应用程序分配虚拟页后,利用10秒后才释放虚拟页的间隙,可以在控制台2中执

18、行命令“vm 31”, 查看此时应用程序进程的虚拟地址描述符信息,在应用程序释放虚拟页后,可以在控制台 2 中再 次执行命令“vm 31”,查看此时应用程序进程的虚拟地址描述符信息。提示:API 函数 VirtualAlloc 定义在 api/eosapi.c 文件,此 API 函数主要调用了 EOS 内核函 数 MmAllocateVirtualMemory,在 EOS 应用程序中调用函数 VirtualAlloc 时,除了使用 MEM_RESERVE 标志外,还必须使用 MEM_COMMIT 标志;API 函数 VirtualFree 定义在 api/eosapi.c 文件,此 API 函数主要调用了 EOS 内核函 数 MmFreeVirtualMemory,在 EOS 应用程序中调用函数 VirtualFree 时,要使用 MEM_RELEASE 标志。3. 主要数据结构、实现代码及其说明 typedef struct _MMPFN ULONG Unused : 9; / 未用 ULONG PageState : 3; / 物理页的状态 ULONG Next : 20; / 下一个物理页的页框号 MMPFN, *PMMPFN; typedef enum _PAG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论