付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机操作系统(课程设计)年级专业05级计算机2班学生姓名XXX学 号时间:2008-5-231课程设计意义 32课程设计内容 33课程设计目的 34设计详细要求 45课程设计说明 46课程设计源代码 107运行结果及分析198设计总结和体会20209参考文献一 课程设计的意义:通过模拟操作系统的实现, 加深对操作系统工作原理理解, 提高综合运用所学知识的能力; 进一步了解操作系统的实现方法; 培养我们自主查阅参考资料的习惯, 增强独立思考和解决问题的能力; 并可练习提高自己程序设计能力并可通 过课程设计,培养严谨的科学态度。通过本课程设计,使学生对操作系统的核心概念和算法有一个透彻的理解,并
2、对系统运行的机制有一个全面的掌握, 从而充分理解系统调用与程序设计之间 的关系。二 课程设计内容:1. 课程设计题目:模拟内存管理2. 内容要求: 自定义内存管理策略对应的数据结构; 随机产生一组申请和收回进程及要求分配和收回内存的大小,实现内存分配和收回算法(可以采用多种分配算法),计算内存利用率; 显示内存分区管理的分配和收回过程。三 课程设计目的1. 从不同侧面了解Windows XP 对用户进程的虚拟内存空间的管理、 分配方法。2. 了解跟踪程序的编写方法(与被跟踪程序保持同步,使用 Windows提供 的信号量) 。 对 Windows 分配虚拟内存、 改变内存状态, 以及对物理内存
3、( physicalmemory)和页面文件(page file)状态查询的API函数的功能、参数限制、使用 规则要进一步了解。3. 默认情况下, 32 位 Windows XP 上每个用户进程可以占有2GB 的私有地址空间, 操作系统占有剩下的 2GB。 Windows XP 在 X86 体系结构上利用二级页表结构来实现虚拟地址向物理地址的变换。一个32 位的虚拟地址被解释为三个独立的分量 页目录索引, 页表索引和字节索引 它们用于找出描述页面映射结构的索引。页面大小及页表项的宽度决定了页目录和页表索引的宽度。4. Windows进程的虚拟地址空间中也有三种状态的页面:空闲页面、保留页 面和
4、提交页面。(1)空闲(Free)页面:空闲页面是指那些可以保留或提交的可用页面。(2)保留(Reserve。页面:保留页面是逻辑页面已分配但没有分配物理存储的页面。 设置这种状态的效果是可以保留一部分虚拟地址, 这样, 如果不预先释放这些地址, 就不能被其他应用程序 (如 Malloc , LocalAlloc 等) 的操作所使用。试图读或写空闲页面或保留页面将导致页面出错异常。保留页面可被释放后提 交。(3)提交(Committed)页面:提交页面是物理存储(在内存中或磁盘上) 已被分配的页面。 可对它加以保护, 不许访问或允许只读访问, 或允许读写访问。提交也可以被回收以释放存储空间,从而
5、变成保留页面。四 设计详细要求使用 windows 2000/XP 的 API 函数,编写一个包含两个线程的进程,一个线程用于模拟内存分配活动, 一个线程用于跟踪第一个线程的内存行为, 而且要 求两个线程之间通过信号量实现同步。 模拟内存活动的线程可以从一个文件中读出要进行的内存操作,每个内存操作包括以下内容: 时间:操作等待时间。 块数:分配内存的粒度。 操作:包括保留(reserve一个区域,提交(commit)一个区域,释放(release 一个区域,回收(decommit) 一个区域和加锁(lock)与解锁(unlock) 一个区 域,可以将这些操作编号存放于文件。 保留时之保留进程的
6、虚拟地址空间,而不分配物理存储空间。 提交在内存中分配物理存储空间。 回收是指释放物理内存空间,但在虚拟地址空间仍然保留,它与提交相对 应,即可以回收已经提交的内存块。 释放是指将物理存储和虚拟地址空间全部释放,它与保留相对应,即可以释放已经保留的内存块。 大小:块的大小。 访问权限:共五种。分别为 PAGE_READONLY,PAGE_READWRITE,PAGE_EXECUTE, AGE_EXECUTE_READ 和 PAGE_EXETUTE_READWRITE 。可以将这些权限编号存放于文件中跟踪线程 将页面大小、已使用的地址范围、物理内存总量,以及虚拟内存总量等信息显 示出来。五 课程
7、设计说明5-1 模块组成 :本程序 主 要 由 文 件 建 立和 文件 写 入 模 块 makefile 和 内 存 操作模块 -memory-op 两大模块组成。5-2 模块的主要功能及结构:(1) 文件建立和文件写入模块makefile 模块的主要功能及结构如下:作用 : 本程序主要实现将操作写入文件结构:本程序采用了 C语言的fwrite函数直接以结构(struct)为单位写入文件。用了两层循环,外层循环控制对内存的操作(保留、提交、锁、解锁、回收、释放),内层循环控制对内存操作的权限(PAGE_READON、LYPAGE_READWR、ITEPAGE_EXECU TEPAGE_EXEC
8、UTE_READGE_EXECUTE_READWRITE)l 数生成等待执行的时间和分配的粒度。(2)内存操作模块memory-op模块的主要功能及结构如下:1.2.1 主函数a、创建两个线程,并将返回的句柄存入数据中。b、创建两个信号量(allo , trac )分别用语通知跟踪线程和记录线程。c 、用函数WaitForMultipleObjects 来等待两个线程的结束。1.2.2 Tracker 线程(记录内存的状况)a、打开文件,准备输出。b、等待现成Allocator的一次内存操作完毕(即等待信号量trac的释放)。c 、 用函数 GetSystemInfo 得到系统信息 (该信息不
9、随内存分配的变化而变化) 。d、用函数GlobalMemorySatus得到内存信息(随内存的分配各项信息会有所变化)。用函数VirtualQuery 得到虚拟内存基本信息(该信息不随内存分配的变化而变化)。e、释放信号量,通知Allocator线程可以进行下一次内存分配活动。1.2.3 Allocator 线程(模拟内存分配活动)a、打开文件(的输出结果),准备读入。b、等待Tracker输出的结束(即等待信号量allo的释放)。c、读文件(的输出结果)。d、根据文件内容(protection )确定对内存操作时的权限。e、根据文件内容(oper)确定对内存的具体操作。f 、释放信号量( t
10、rac )通知线程可以进行一次输出。g、如果文件中所有的分配信息已经完成,线程退出,否则转到bo5-3 程序流程图及分析:makefile 函数 :先创建一个文件“ opfile ”,用以确定内存操作信息,随后用两层循环实现对文件写入内存操作的具体信息和结构。memory_op!S 数:主 函 数 main 主 要 是 生 成 两 个 线 程 和 两 个 信号 量 , 最 后 用 函 数WaitForMultipleObjects 来等待两个线程的结束,退出程序。用信号量 trac 个 allo 实现线程 Tracker 和 Allocator 的同步。Tracker 线程主要用于跟踪内存分配
11、情况并打印信息到文档中, 所以 Tracker 中 首先要创建一个输出文件,然后输出系统消息、内存状态等。Allocator 线程用于内存分配及操作等。 首先要从 opfile 文件中逐个读取信息, 其次根据内容确定操作权限,用 switch语句实现:0代表只读,1代表可读写, 2代表可执行,3代表可执行可读,4代表可执行可读写。然后确定内存具体操 作,用switch实现:0代表保留一个区域,用函数 VirutalAlloc 实现;1代表 提交一个区域,用函数 VirtualA110c 实现;2代表锁一个区域,用函数 VirtualLock 实现;3代表解锁一个区域,用函数 VirtualUn
12、lock 实现;4代表 回收一个区域,用函数 VirtualFree 实现;5代表释放一个区域,用函数 VirtualFree 实现。makefile 函数和memory_o值函数:memory_op:接下页:makefile函数:makefile 函数:Y T . 结束tracker 函数:如下页:tracker 函数:allocator 函数:如下页allocator 函数:六 课程设计主要源代码1 makefile 函数程序的代码及注释如下:程序体:#include#include#include#includestruct operation inttime;/起始时间intblock
13、;/ 内存页数intoper;/操作int protection; /权限;int main() FILE *file;file=fopen(opfile,wb); /opfile 为二进制用以确定内存操作operation op;for(int j=0;j6;j+)/0-保留; 1-提交; 2-锁; 3-解锁; 4-回收;5-释放for(int i=0;i5;i+) op.time=rand()%1000; /随机生成等待时间op.block=rand()%5+1;/随机生成块大小op.oper=j;tection=i;fwrite(&op,sizeof(operation),1
14、,file); /将生成的结构写入文件return 0;2 memeroy_op 函数程序的代码及注释如下:#include#include#include#include#includestruct operationinttime;/起始时间intblock;/ 内存页数intoper;/操作int protection; /权限;struct trace/跟踪每一次分配活动的数据结构LPVOID start;/起始地址long size;/分配的大小;HANDLE allo,trac;/信号量句柄DWORD Tracker(LPDWORD lpdwparm)ofstream oufile
15、;/输出文件();for(int i=0;i=30;i+)WaitForSingleObject(trac,INFINITE);/ 等待 allocator 一次内存分配活 动结束/打印所有内存状况和系统状况outfileiendl;/以下一段显示系统消息,每次执行操作后系统消息不变/如果要才查看系统消息,可以取消注释/* SYSTEM_INFO info;/ 系统消息GetSystemInfo(&info);outfiledwActiveProcessorMasktiveProcessorMaskendl;outfiledwAllocationGranularitytinfo. dwAllo
16、cationGranularity endl;outfiledwNumberOfProcessorstinfo.dwNumberOfProcessors endl;outfiledwOemIdtIdendl;outfiledwPageSizeteSizeendl;outfiledwProcessorTypetcessorTypeendl;outfilelpMaximumApplicationAddresstinfo. lpMaximumApplicationAddressendl;outfilelpMinimumApplicationAddresstinfo. lpMinimumApplica
17、tionAddressendl;outfilewProcessorArchitecturetessorArchitectureendl;outfilewProcessorLeveltessorLevelendl;outfilewProcessorRevisiontessorRevisionendl;outfilewReserved:trvedendl;outfile”*”endl;*/内存状况MEMORYSTATUS status;内存状态GlobalMemoryStatus(&status);outfiledwAvailPageFiletilPageFileendl;outfiledwAva
18、ilPhystilPhysendl;outfiledwAvailVirtualtilVirtualendl;outfiledwLengthtgthendl;outfiledwMemoryLoadtoryLoadendl;outfiledwTotalPageFiletalPageFileendl;outfiledwTotalPhytalPhysendl;outfiledwTotalVirtualtalVirtualendl;ou情le& &endl;/以下一段显示内存基本信息,每次操作内存基本信息不变 /如果要查看内存基本信息,可以取消注释/*MEMORY_BASIC_INFORMATION m
19、en;VirtualQuery( imumApplicationAddress,&men,sizeof(MEMORY_BASIC_INFO RMATION) );outfileAllocationBasetationBaseendl;outfileAllocationProtecttationProtectendl;outfileBaseAddresstddressendl;outfileProtecttctendl;outfileRegionSizetnSizeendl;outfileStatetendl;outfileTypetendl;endl;outfile*/释放信号量通知alloc
20、ator可以进行下一次内存分配活动ReleaseSemaphore(allo,1,NULL);return(0);void Allocator()/模拟内存分配活动的线程trace traceArray5;int index=0;FILE *file;file=fopen(opfile,rb); 读入文件operation op;SYSTEM_INFO info;DWORD temp;GetSystemInfo(&info);for(int i=0;i30;i+)WaitForSingleObject(allo,INFINITE);/等彳f tracker打印结束的信号e单couti:;fre
21、ad(&op,sizeof(operation),1,file);Sleep(op.time);/执行时间, 如果想在指定时间执行可以取消注释GetSystemInfo(&info);switch(tection)/根据文件内容确定权限case 0:index=0;temp=PAGE_READONLY;break;case 1:temp=PAGE_READWRITE;break;case 2:temp=PAGE_EXECUTE;break;case 3:temp=PAGE_EXECUTE_READ;break;case 4:temp=PAGE_EXECUTE_READWRITE;b
22、reak;default:temp=PAGE_READONLY;switch(op.oper)case 0: /保留一个区域coutreserve nowendl;traceArrayindex.start=VirtualAlloc(NULL,op.block*eSize,MEM_RESERVE,P AGE_NOACCESS);traceArrayindex+.size=op.block*eSize;coutstartingaddress:traceArrayindex-1.start/tsize:traceArrayindex-1.sizeendl ;break;case 1: /提交一个区
23、域coutcommit nowendl;traceArrayindex.start=VirtualAlloc(traceArrayindex.start,traceArrayindex.si ze,MEM_COMMIT,temp);index+;coutstartingaddress:traceArrayindex-1.start/tsize:traceArrayindex-1.sizeendl ;break;case 2: / 锁一个区域coutlock now endl;coutstartingaddress:traceArrayindex.starttsize:traceArrayind
24、ex.sizeendl;if(!VirtualLock(traceArrayindex.start,traceArrayindex+.size)coutGetLastError()endl;GetLastError()函数返回错 误号break;case 3:/解锁一个区域/coutunlock nowendl;coutstartingaddress:traceArrayindex.starttsize:traceArrayindex.sizeendl;if(!VirtualUnlock(traceArrayindex.start,traceArrayindex+.size)coutGetLa
25、stError()endl;break;case 4:/回收一个区域coutdecommit nowendl;coutstartingaddress:traceArrayindex.starttsize:traceArrayindex.sizeendl;if(!VirtualFree(traceArrayindex.start,traceArrayindex+.size,MEM_DECOM MIT)coutGetLastError()endl;break;case 5: /释放一个区域coutrelease nowendl;coutstartingaddress:traceArrayindex
26、.starttsize:traceArrayindex.sizeendl;if(!VirtualFree(traceArrayindex+.start,0,MEM_RELEASE)coutGetLastError()endl;break;default:couterrorendl;ReleaseSemaphore(trac,1,NULL); 释放信号量通知 tracker可以打印 信息int main() DWORD dwThread;HANDLE handle2;/生成两个线程handle0=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Tracke
27、 r,NULL,0,&dwThread);handle1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Allocat or,NULL,0,&dwThread);/生成两个信号量allo=CreateSemaphore(NULL,0,1,allo);trac=CreateSemaphore(NULL,1,1,trac);/等待线程执行结束后,再退出WaitForMultipleObjects(2,handle,TRUE,INFINITE);return 0;七 运行结果及分析结果归纳:1) 保留一块区域的操作减少了 dwAvailVirtual (在用户状态下虚拟地址空间中的未保留与未提交的存储空间) 。2)提交一块区域的操作只减少了dwAvailPageFile (页面文件中可用的字节数) 。3)锁一块区域的操作只减少了dwAvailPhys (物理存储空间中可用的字节数) 。4)解锁一块区域的操作有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年盐池县事业单位高层次人才综合素质测试试卷 招录 22 人
- 2026 年宜章县事业单位高层次人才引进综合能力试卷 招录 29 人
- 重庆AI培训人机协同速学本
- 福建省泉州七中学2027届八上数学期末复习检测模拟试题含解析
- 停车场特许经营项目实施方案
- 热敏打印黑度校准手册
- 屋面卷材防水施工方案
- 制药车间图纸审查方案
- 生物质气化炉运行手册
- 施工迹地整治方案
- 2025年派出所民警个人年度工作小结(全文)
- 海康威视iVMS-8700智能建筑综合管理平台 软件技术白皮书
- 首届全国行业职业技能竞赛(电力交易员)大赛考试题(附答案)
- 水上桩施工安全教育培训课件
- 影像科院感知识培训课件
- 2025年国家基本公共卫生服务项目培训试题(附答案)
- 医务人员仪容仪表及行为规范
- 2025年贵州茅台酒股份限公司和义兴酒业分公司维修工招聘10人高频重点提升(共500题)附带答案详解
- 高中常用成语积累800个
- 《常见药物不良反应》课件
- 公司与个人合作协议范本新
评论
0/150
提交评论