操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx

上传人:b****4 文档编号:7200915 上传时间:2023-05-08 格式:DOCX 页数:26 大小:590.04KB
下载 相关 举报
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第1页
第1页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第2页
第2页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第3页
第3页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第4页
第4页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第5页
第5页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第6页
第6页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第7页
第7页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第8页
第8页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第9页
第9页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第10页
第10页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第11页
第11页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第12页
第12页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第13页
第13页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第14页
第14页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第15页
第15页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第16页
第16页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第17页
第17页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第18页
第18页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第19页
第19页 / 共26页
操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx

《操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx(26页珍藏版)》请在冰点文库上搜索。

操作系统实验第四讲物理存储器与进程逻辑地址空间的管理Word格式.docx

1.实验名称物理存储器与进程逻辑地址空间的管理

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

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

3.实验类型验证+设计

4.实验内容3.1准备实验

3.2阅读控制台命令“pm”相关的源代码,并查看其执行的结果

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

3.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果

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

3.6在应用程序进程中分配虚拟页和释放虚拟页

3.6.1要求

3.6.2测试方法

3.6.3提示

二、实验环境

操作系统windosxp

编译器OSLab

语言c语言

三、实验过程

1.设计思路和流程图

MiAllocateAnyPages函数的流程图

MiFreePages函数的流程图

2.需要解决的问题及解答

(1)在实验指导的P160-4.和5.按F10单步调试MmAllocateVirtualMemory函数的执行过程,要求给出监视窗口BaseAddress和RegionSize个变量前后变化截图界面。

截图见3.5。

在实验指导的P160-1.和2.按F10单步调试MmFreeVirtualMemory函数的执行过程,要求给出监视窗口BaseAddress和RegionSize个变量前后变化截图界面。

(2)按照《实验指导》的P160-3.6在应用程序进程中分配虚拟页和释放虚拟页,编写代码。

要求至少给出源代码及其解释。

程序见3.6.2。

(3)按F10单步调试MiAllocateAnyPages函数的执行过程,尝试回答下面的问题:

①本次分配的物理页的数量是多少?

分配的物理页的页框号是多少?

②物理页是从空闲页链表中分配的?

还是从零页链表中分配的?

③哪一行语句减少了空闲页的数量?

哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?

答:

①本次分配的物理页的数量是1,分配的物理页的页框号是0x409;

②物理页是从空闲页链表中分配的

③第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->

Next;

和第227行MiFreePageCount--;

减少了空闲页的数量,第229行将刚刚分配的物理页由空闲状态修改为忙状态;

(4)按F10单步调试MiFreePages函数的执行过程,尝试回答下面的问题:

①本次释放的物理页的数量是多少?

释放的物理页的页框号是多少?

释放的物理页是之前分配的物理页吗?

②释放的物理页是被放入了空闲页链表中?

还是零页链表中?

③绘制MiFreePages函数的流程图。

①本次释放的物理页的数量是1,释放的物理页的页框号0x409,释放的物理页是之前分配的物理页;

②释放的物理页被放入了空闲页链表中;

③见实验过程开头流程图部分。

(5)按F10单步调试MmAllocateVirtualMemory函数的执行过程,尝试回答下面的问题:

①分配的虚拟页的起始地址是多少?

分配的虚拟页的数量是多少?

它们和参数BaseAddress和RegionSize初始化的值有什么样的关系?

②分配虚拟页的同时有为虚拟页映射实际的物理页吗?

这是由哪个参数决定的?

③分配的虚拟页是在系统地址空间(高2G)还是在用户地址空间(低2G)?

④参考MiReserveAddressRegion函数的定义和注释,说明该函数的功能。

①分配的虚拟页的起始地址是0xa0003000,分配的虚拟页的数量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址区域的起始地址和大小;

②分配虚拟页的同时有为虚拟页映射实际的物理页,这是由第三个参数AllocationType决定的;

③分配的虚拟页是在系统地址空间(高2G),这是由第四个参数SystemVirtual决定的;

④MiReserveAddressRegion函数的功能是保留一段虚拟地址区域。

(6)按F10单步调试MmFreeVirtualMemory函数的执行过程,尝试回答下面的问题:

①本次释放的虚拟地址是多少?

释放的虚拟页是之前分配的虚拟页吗?

②参考MiFindReservedAddressRegion函数、MiFreeAddressRegion函数和MiDecommitPages函数的定义和注释,说明这些函数的功能。

①本次释放的虚拟地址是0xa0003000,是之前分配的虚拟页;

②MiFindReservedAddressRegion函数用于查找已保留地址区域,如果目标区域非已保留区域则返回失败,MiFreeAddressRegion函数用于释放已保留地址区域和MiDecommitPages函数用于释放映射在连续虚拟页框上的物理页框。

(7)在本实验

3.3中,如果分配了物理页后,没有回收,会对EOS操作系统造成什么样的影响?

目前EOS操作系统内核函数MiAllocateAnyPages能处理所有物理页被分配完毕的情况吗?

例如在没有可分配的物理页的情况下调用该内核函数,是否会返回失败?

如果内核函数MiAllocateAnyPages还不能处理这种极端情况,尝试修改代码解决这个问题。

如果分配了物理页后,没有回收,将会使可分配自由页和零页越来越少,最终导致内存溢出,系统无法运行。

目前EOS操作系统内核函数MiAllocateAnyPages不能处理所有物理页被分配完毕的情况,在没有可分配的物理页的情况下,不会分配物理页,但仍然会返回成功,添加以下代码即可:

Else{return 

STATUS_MEMORY_NOT_ALLOCATED;

}

(8)在本实验 

3.3 

中,在分配物理页时是调用的内核函数 

MiAllocateAnyPages,该函数会优先分配空闲页,尝试修改代码,调用内核函数MiAllocateZeroedPages优先分配零页,并调试分配零页的情况。

尝试从性能的角 

度分析内核函数 

MiAllocateAnyPages 

和 

MiAllocateZeroedPages。

尝试从安全性的角度分析分配零页的必要性。

将MiAllocateAnyPages(1, 

PfnArray);

修改为MiAllocateZeroedPages(1, 

即可。

系统启动时,所有空闲物理页都是未初始化的,此时零页链表为空,MiAllocateAnyPages函数可以直接从自由页链表分配,而MiAllocateZeroedPages函数会对从自由页链表中分配的每一页进行零初始化,确保所有分配页都是被零初始化的,再进行分配,因此MiAllocateZeroedPages函数效率较低。

但因为MiAllocateZeroedPages函数对自由页进行了初始化,减小了出错的可能性,从而安全性较高。

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

typedef 

struct 

_MMPFN 

ULONG 

Unused 

:

9;

// 

未用 

PageState 

3;

// 

物理页的状态 

Next 

20;

下一个物理页的页框号 

}MMPFN, 

*PMMPFN;

enum 

_PAGE_STATE 

ZEROED_PAGE, 

零页 

FREE_PAGE, 

自由页 

BUSY_PAGE, 

占用页 

PAGE_STATE;

虚拟地址描述符

_MMVAD{ 

ULONG_PTR 

StartingVpn;

 

被使用区域的开始虚页框号 

EndVpn;

被使用区域的结束虚页框号 

LIST_ENTRY 

VadListEntry;

链表项,用于将描述同一地址空间的所有VAD串//成链表 

}MMVAD, 

*PMMVAD;

虚拟地址表 

_MMVAD_LIST{ 

记录的进程地址空间的开始虚页号 

记录的进程地址空间的结束虚页号 

VadListHead;

VAD链表头 

}MMVAD_LIST, 

*PMMVAD_LIST;

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

3.1准备实验

1.启动OSLab。

2.新建一个EOSKernel项目。

3.2阅读控制台命令“pm”相关的源代码,并查看其执行的结果

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

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

使用pm.c文件中ConsoleCmdPhysicalMemory函数的函数体替换ke/sysproc.c文件中ConsoleCmdPhysicalMemory函数的函数体。

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

分配和释放多个物理页

调用MiAllocateAnyPages函数时分配多个物理页,然后在调用MiFreePages函数时将分配的多个物理页释放。

3.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果

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

按F5启动调试。

待EOS启动完毕,在EOS控制台中输入命令“pt”后按回车。

“pt”命令可以输出当前系统中的进程列表,其中系统进程的ID为1。

在EOS控制台中输入命令“vm1”后按回车得到虚拟地址描述符信息。

执行控制台命令“vm”,查看当创建了一个应用程序进程后,系统进程和应用程

序进程中虚拟地址描述符的信息:

切换到“Console-2”,然后输入命令“pt”后按回车。

输出的信息:

输入命令“vm1”后按回车,可以查看系统进程中虚拟地址描述符的信息

输入命令“vm31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息

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

使用vm.c文件中ConsoleCmdVM函数的函数体替换ke/sysproc.c文件中ConsoleCmdVM函数的函数体。

在EOS控制台中输入命令“vm1”后按回车

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

vm命令开始执行后,会在调用MmAllocateVirtualMemory函数的代码行处中断。

此时要注意参数

BaseAddress和RegionSize初始化的值。

分配虚拟页的调试过程中BaseAddress和RegionSize的值的变化:

进入函数之前BaseAddress和RegionSize的值

退出函数以后BaseAddress和RegionSize的值

释放虚拟页的调试过程中BaseAddress和RegionSize的值的变化:

进入函数前BaseAddress和RegionSize的值

刚退出函数时BaseAddress和RegionSize的值

在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE+1时“输出”窗口中转储的信息:

TotalVpnfrom655360to657407.(0xA0000000-0xA07FFFFF)

1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)

2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)

3#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)

4#VadInclude2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)

5#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)

6#VadInclude2VpnFrom655371to655372.(0xA000B000-0xA000CFFF)

7#VadInclude2VpnFrom655373to655374.(0xA000D000-0xA000EFFF)

8#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)

9#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)

10#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)

11#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)

TotalVpnCount:

2048.

AllocatedVpnCount:

21.

FreeVpnCount:

2027.

ZeroedPhysicalPageCount:

0.

FreePhysicalPageCount:

7126.

NewVM'

sbaseaddress:

0xA0017000.Size:

0x3000.

12#VadInclude3VpnFrom655383to655385.(0xA0017000-0xA0019FFF)

24.

2024.

FreeVM'

在调用MmAllocateVirtualMemory函数时将BaseAddress参数的值设置为已经被占用的虚拟内存,例如0xA0000000,“输出”窗口中转储的信息:

0xA0003000.Size:

0x1000.

3#VadInclude1VpnFrom655363to655363.(0xA0003000-0xA0003FFF)

4#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)

5#VadInclude2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)

6#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)

7#VadInclude2VpnFrom655371to655372.(0xA000B000-0xA000CFFF)

8#VadInclude2VpnFrom655373to655374.(0xA000D000-0xA000EFFF)

9#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)

10#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)

11#VadInclude2VpnFrom655379to655380.(0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2