操作系统课程设计内存管理Word文件下载.doc
- 文档编号:15453771
- 上传时间:2022-10-31
- 格式:DOC
- 页数:8
- 大小:47.50KB
操作系统课程设计内存管理Word文件下载.doc
《操作系统课程设计内存管理Word文件下载.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计内存管理Word文件下载.doc(8页珍藏版)》请在冰豆网上搜索。
回收是指释放物理内存空间,但在虚拟地址空间仍然保留,它与提交相对应,即可以回收已经提交的内存块。
释放是指将物理存储和虚拟地址空间全部释放,它与保留(reserve)相对应,即可以释放已经保留的内存块。
大小:
块的大小。
访问权限:
共五种,分别为PAGE_READONLY,PAGE_READWRITE,PAGE_EXECUTE,PAGE_EXECUTE_READ和PAGEEXETUTE_READWRITE。
可以将这些权限编号存放于文件中跟踪线程将页面大小、已使用的地址范围、物理内存总量,以及虚拟内存总量等信息显示出来。
三、主要内容
1.设计思路
Windows进程的虚拟地址空间中也有三种状态的页面:
空闲页面、保留页面和提交页面。
空闲(Free)页面:
空闲页面是指那些可以保留或提交的可用页面。
保留(Reserved)页面:
保留页面是逻辑页面已分配但没有分配物理存储的页面。
设置这种状态的效果是可以保留一部分虚拟地址,这样,如果不预先释放这些地址,就不能被其他应用程序(如Malloc,LocalAlloc等)的操作所使用。
试图读或写空闲页面或保留页面将导致页面出错异常。
保留页面可被释放或提交。
提交(Committed)页面:
提交页面是物理存储(在内存中或磁盘上)已被分配的页面。
可对它加以保护,不许访问或允许只读访问,或允许读写访问。
提交也可以被回收以释放存储空间,从而变成保留页面。
在本实验中,首先创建工程makefile生成随机输入文件,其中包含对内存要求作的各种操作;
然后创建工程MemoryAllocation,实现输入文件所要求的各项内存管理操作。
2.主要数据结构
实现内存在管理的主要API函数有:
GetSystemInfo
函数功能:
返回当前系统信息,存放入lpSystemInfo中。
GlobalMemoryStatus
获得计算机系统中当前使用的物理内存和虚拟内存的信息。
使用GlobalMemoryStatus函数
可以判断应用程序能够分配多少与其它应用程序不冲突的内存空间。
但GlobalMemoryStatus函数返回的信息是不稳定的,我们不能保证两次调用该函数都能返回到相同的信息。
VirtualQuery
提供有关调用进程虚拟窨中的页面信息.
VirtualAlloc
在调用进程的虚拟地址中保留或提交页面。
除非设置了MEM_RESET标志,否则被这个函
数分配的内存单元被自动初始化为0。
VirtualAllocEX
使用该函数可以保留、提交或者保留和提交进程虚拟空间的页面的基址,否则返回NULL。
VirtualFree
可以释放或注销调用进程虚拟空间中的页面。
成功则返回一个非零值,否则返回零值。
VirtualFreeEx
该函数可以释放或注销指定进程虚拟空间中的页面。
VirtualFreeEx函数和VirtualFree函数区别是:
VirtualFree函数释放调用进程的地址空间,而VirtualFreeEx函数可以释放任意指定的进程的地址空间。
如果函数调用成功则返回非零值,否则返回零值。
VirtualLock
功能:
该函数可以将进程虚拟空间中的内存加锁。
以确保后面的对该区域的存取操作不会失败。
成功则返回一个非零值,否则返回一个零值。
VirtualUnlock
该函数可以将进程虚拟空间指定范围内的页面解锁,从以系统在必要时可以将这些页面换出
到页面文件中。
函数调用成功则返回一个非零值,否则返回零值。
3.主要代码段
首先,定义两个结构体structoperation和structtrace,分别记录对内存的操作信息和跟踪每一次分配活动,并为之分别定义信号量allo和rac,以实现对内存操作的互斥。
具体实现用函数WaitForSingleObject(trac,INFINITE)和ReleaseSemaphore(allo,1,NULL)来实现。
函数DWORDTracker(LPDWORDlpdwparm)用以跟踪allocator线程的内存行为,并输出必要信息。
函数voidAllocator()用以模拟内存分配活动的线程。
4.主要代码结构
1)makefile.cpp
//文件生成程序
#include<
fstream.h>
stdio.h>
stdlib.h>
time.h>
structoperation
{
inttime;
//起始时间
intblock;
//内存页数
intoper;
//操作
intprotection;
//权限
};
intmain()
FILE*file;
file=fopen("
opfile"
"
wb"
);
//"
为二进制文件用以确定内存操作
operationop;
for(intj=0;
j<
6;
j++)//0--保留,1--提交,2--锁,3--解锁,4--回收,5--释放
for(inti=0;
i<
5;
i++)
//0-PAGE_READONLY;
//1-PAGE_READWRITE;
//2-PAGE_EXECUTE;
//3-PAGE_EXECUTE_READ;
//4-PAGE_EXECUTE_READWRITE;
{
op.time=rand()%1000;
//随机生成等待时间
op.block=rand()%5+1;
//随机生成块大小
op.oper=j;
op.protection=i;
fwrite(&
op,sizeof(operation),1,file);
//将生成的结构写入文件
}
return0;
}
2)memory_op.cpp
//从文件读入每次的操作,并将结果输出到out.txt文件中
windows.h>
iostream.h>
inttime;
//起始时间
//内存页数
//操作
//权限
structtrace//跟踪每一次分配活动的数据结构
LPVOIDstart;
//起始地址
longsize;
//分配的大小
HANDLEallo,trac;
//信号量句柄
DWORDTracker(LPDWORDlpdwparm)//跟踪allocator线程的内存行为,并输出必要信息
{ofstreamoutfile;
//输出文件
outfile.open("
out.txt"
for(inti=0;
=30;
WaitForSingleObject(trac,INFINITE);
//等待allocator一次内存分配活动结束
//打印内存状况和系统状况
outfile<
<
endl;
//以下一段显示系统信息,每次执行操作后系统信息不变
SYSTEM_INFOinfo;
//系统消息
GetSystemInfo(&
info);
outfile<
"
dwActiveProcessorMask"
\t"
info.dwActiveProcessorMask<
dwAllocationGranularity"
info.dwAllocationGranularity<
dwNumberOfProcessors"
info.dwNumberOfProcessors<
dwOemId"
info.dwOemId<
dwPageSize"
info.dwPageSize<
dwProcessorType"
info.dwProcessorType<
lpMaximumApplicationAddress"
info.lpMaximumApplicationAddress<
lpMinimumapplicationAddress"
info.lpMinimumApplicationAddress<
wProcessorArchitecture"
info.wProcessorArchitecture<
wProcessorLevel"
info.wProcessorLevel<
wProcessorRevision"
info.wProcessorRevision<
wReserved"
info.wReserved<
******************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 内存 管理