北科大操作系统实验报告 联系客服

发布时间 : 星期四 文章北科大操作系统实验报告更新完毕开始阅读8494fe40aa00b52acfc7cae6

}

KeEnableInterrupts(IntState); // 开中断

2.2 EOS进程逻辑地址空间分配和回收的练习以及源代码分析

(练习虚拟内存的分配和回收;分析相关源代码,简要说明EOS中进程逻辑地址空间的管理方法;在应用进程中分配虚拟页和释放虚拟页的源代码、测试和结果等;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) INT*d; 的值 的值 }

printf(\

Sleep(10000);// 调用API函数Sleep,等待10秒钟。系统以毫秒为单位 } else { }

//printf(\return 0;

printf(\

return -1;//若不能成功,打印error,并返回-1。 if(VirtualFree(d,0,MEM_RELEASE))// 调用API函数 else

printf(\

printf(\for(;;){}

//进入死循环,这样应用程序就不会结束

printf(\

*d=0xFFFFFFFF;//修改整型变量的值为0xFFFFFFFF

printf(\输出修改后的整型变量

if(d=VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT))

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

printf(\printf(\输出原始整型变量

变量的指针指向这个空间。

VirtualFree,释放之前分配的整型变量的空间

12

3 其他需要说明的问题

//内核文件中关于函数变量的不同值会对地址空间进行不同方式的分配 STATUS

13

MiReserveAddressRegion( {

PLIST_ENTRY ListEntry; PMMVAD PointerVad; ULONG_PTR StartingVpn; ULONG_PTR EndVpn; ULONG_PTR Size;

ASSERT(RegionSize != 0 && BaseAddress + RegionSize - 1 >= if (NULL != BaseAddress) {

StartingVpn = MI_VA_TO_VPN(BaseAddress);

EndVpn = MI_VA_TO_VPN(BaseAddress + RegionSize - 1); if (StartingVpn < VadList->StartingVpn || EndVpn > VadList- }

// 找到目标区域前的已保留区域P。

for (ListEntry = VadList->VadListHead.Prev; }

// 如果P之后的已保留区域和目标区域重叠则返回失败。 ListEntry = ListEntry->Next;

if(ListEntry != &VadList->VadListHead) { }

14

IN PMMVAD_LIST VadList, IN PVOID BaseAddress, IN SIZE_T RegionSize, OUT PMMVAD *Vad )

BaseAddress);

>EndVpn) {

return STATUS_INVALID_ADDRESS;

ListEntry != &VadList->VadListHead; ListEntry = ListEntry->Prev) {

PointerVad = CONTAINING_RECORD(ListEntry, MMVAD, if(PointerVad->EndVpn < StartingVpn) { }

break;

VadListEntry);

PointerVad = CONTAINING_RECORD(ListEntry, MMVAD, if (PointerVad->StartingVpn <= EndVpn) { }

return STATUS_INVALID_ADDRESS;

VadListEntry);

} else { }

// 从地址空间的起始端向后查找第一个满足申请大小的未保留区域。 Size = (RegionSize + PAGE_SIZE - 1) >> PAGE_SHIFT; StartingVpn = VadList->StartingVpn; EndVpn = StartingVpn + Size - 1; if (EndVpn > VadList->EndVpn) { }

for (ListEntry = VadList->VadListHead.Next; }

ListEntry != &VadList->VadListHead; ListEntry = ListEntry->Next) {

PointerVad = CONTAINING_RECORD(ListEntry, MMVAD, if (EndVpn < PointerVad->StartingVpn) { }

// 跳过已保留区域向后移动。

StartingVpn = PointerVad->EndVpn + 1; EndVpn = StartingVpn + Size - 1; //

// 如果地址范围溢出或者超出空间范围则失败! //

if (EndVpn > VadList->EndVpn) { }

return STATUS_NO_MEMORY; break;

return STATUS_NO_MEMORY;

VadListEntry);

实验五 读文件和写文件(2分)

1 实验目的和要求

目的:掌握简单文件系统的实现方法,理解磁盘存储器管理的基本原理。 要求:

(1)通过调用EOS AI读取文件数据,跟踪调试FAT12文件系统的读文件功能,分析EOS中FAT12文件系统的相关源代码;

(2)修改EOS的源代码,为FAT12文件系统添加写文件功能。

15