操作系统的存储管理方式_第1页
操作系统的存储管理方式_第2页
操作系统的存储管理方式_第3页
操作系统的存储管理方式_第4页
操作系统的存储管理方式_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统 实验报告实验名称:操作系统的存储管理方式班级:姓名:学号:类型:实验地点:日期:一、实验目的:1.动态测试WIND0WS2000/XP系统内存二、实验环境:1. PC机一台(VCCVB等编程环境)三、实验内容和要求:1 .了解WINDOWS用户进程地址空间分布、系统地址空间分布、WINDOWS中用户空间内存分配方式(以页为单位的虚拟内存分配方法)、WINDOWS的内存保护机制。四、实验步骤:#in clude #in clude#in clude Sin clude using n ames pace std; const int MM_SIZE=1OO; / 内存块数 const

2、int ROW= 10; 绘制内存行数 const int COL= 10; 绘制内存列数 const int NEME_LEN=10; / 名字长度 const int WAITTIME=2000; / 等待时间int UsedNum=0; 当前已占用的内存块数int FreeNum=MM_SIZE; 当前空闲的内存块数int ProCnt=0; 当 前用户进程数 int NowID=l; /当前分配的进程编号 int MMMM_SIZE; /Mai n Mem ony /0 - /-l - /k - /*进程 class P ROCESS( public: PROCESS o : next

3、 (0) 构造函数重载,用于构造队列队头 P ROCESS (char* Name, i nt p N) : PageNum ( pN), next (0) pN ame=new charNEME LEN;strc py( pN ame, Name);P ageTable=new in tMM_SIZE; for(i nt i=O;iMM_SIZE;i+) 内存块未被使用 内存块在初始化时已被系统占用 内存块已被分配给P1D二k的用户进程 0b j*/ ageTablei=l; plD=NowlD+;)PROCESS。 (delete pN ame;delete P ageTable;PROC

4、ESS* next; 指向下一个进程char* Get pN ame (void) co nst return p Name; / 获取进程名int Get plD(void)co nst return pID; / 获取进程编号int GetPageNum(void)const return PageNum; / 获取进程所需页数 void UnionTable(int i, int j); 关联页号 i 与块号 j(创建页表,void PrintPageTable(void) ; / 打印页表 p rotected:char* p Name; / 进程名int pID; 进程编号int P

5、ageNum; 进程所需页数 int* P ageTable; / 页表;PROCESS* ProLinkHead=new PROCESS; / 申请进程队列队头空间 void P ROCESS: :U nio nTable(i nt i, i nt j) (P ageTablei=j; return;)void P ROCESS: Print? ageTable(void) (cout PAGETABLE (页表)“endl;cout页号 ID 块号 ID#endl;for(i nt i=O;iMM_SIZE;i+)if(P ageTablei!=-1)printf(n %-2d %-2dn

6、”,i, PageTablei);coute ndl;return;)void In itial_MM(void) ; / 初始化void Menu (void) ; / 菜单void CheckMM(void) ; / 查看内存状态void PrintProList (void); 打印当前用户进程列表void CheckPro (void) ; / 查看进程状态void CreatePro(void) ; / 创建新用户进程 void DelPro(void) : / 删除用户进程 /*主函数*/ int main( void) ( sran d(time(0);In itial_W();

7、Men u();return 0;)/*初始化内存状态*/ void In itial_W(void) (memset (MM, 0, sizeof (i nt) *MM_SIZE) ; /缺省所有内存块空闲(0)int USE二rand()M+2; 初始内存占用系数int UsedMM=MM_SIZE/USE; / 初始内存 占用数(占用率=USEMM/MM_SIZE)for(int i=0;i=-l); /检查编号为id的内存块是否已分配给系统MMid=-l;UsedNum+=UsedMM;FreeNum-=UsedMM;return;)/*菜单*/void Menu (void)(int

8、 select;while(true)(system(,zcls,z);coute ndl;coute ndl;cout,, 1.检查内存的状态endl;coute ndl;coutz,2.检查进程的状态endl;coute ndl;cout 3.仓建新进程(endl;coute ndl;cout,, 4.册Ij 除进程endl;coute ndl;cout 5.退出 select;if(select=5)break;switch(select)(case l:CheckMM();break;case 2:Check Pro();break;case 3:Create Pro();break;

9、 case 4:De IPro ();break; default: cout出现错误,请重新输入! endl;Slee p(WAITTIME/2); break;)return;)/*查看内存状态*/void CheckNM(void) system(cls); coute ndl;cout主内存(块号)ID#二6ROW(*iR+jCendl;cout OC IC 2C 3C 4C 5C 6C 7C 8C 9Ce ndl;for(i nt i=O;iROW;i+) (prin tf (%dR ”, i);for(i nt j=0;jCOL;j+)prin tfC%2d , MMROW*i+j

10、);coute ndl;)cout T :系统使用的内存endl;cout,z 0 :释放内存endl;cout,z n : PROCESS.n 使用 内存“endl;coute ndl;cout Key;if (Key二二YKey二二,y,) break;cout”请输入,Y,”endl;cout你现在只能返回菜单e ndl;)return;)/*创建新用户进程*/void Create Pro(void) ( system(cls); coute ndl;cout(创建新的进程 endl;/*输入新进程参数*/char name NEME LEN ; / 新进程名字int pN; 新进程所

11、需占用的页数coutn ame;coutpN;if(pNFreeNum) 检查空闲块数是否足够分配给新进程 (coute ndl;couty内存不足!无法创建该进程,请清理内存再重试endl;cout自动返回菜单n ext =ProLin kHead-n ext;ProL in kHead-n ext=t mp; /*为进程分配内存水/ int j=0;for(i nt i=0;i pN;i+)枚举进程页号,为其分配内存块 (for(; jGet plD();tmp-Union Table(i,j); break;) ) coute ndl;cout创建进程name成功!endl;cout自动

12、返回菜单endl;Slee p(WAITTIME);return;)/*打印当前用户进程列表*/void Print? roList(void) (coute ndl;cout进程状态n ext) ( p=p-n ext;printf( %10s %2d %4dn”, p-Get pN ame(), p-Get plD(), p-Get PageNum(); return;/*查看进程状态*/void Check Pro(void) ( system(cls); Print? roList ();if (ProCn t=0)cout 当前不存在任何用户进程,ze ndl;cout自动返回菜单e

13、ndl;Slee p(WAITTIME);return; coutpid;bool flag二false; 标记是否找至编号为 pid的进程 P ROCESS* p=ProLin kHead- next;while( p) ( if (p-Get plD() !二pid) p=p-n ext;else flag=true; break;) ) if(!flag) cout输入错误!不存在的进程!Get pN ame ()_Get plD() e ndl; cout,z PAGENUM (页数):“GetPageum() PrintPageTableO; 打 印 pid 进程的页表 coutBa

14、ck to Me nu? (Y/N),e ndl; while(true)(char Key;cin Key;if(Key=Y II Key=, y )break;cout”请输入Y endl;cout你现在只能返回菜单e ndl; return; /*删除用户进程*/void Del Pro(void) ( systemCcls,z);PrintProList (); 先打印用户进程歹U表 int select;cout册lj除指定进程.endl;cout(2)册lj除所有进程. select)(if(select=l select=2) break;cout错误! endl;coute n

15、dl;if(select=l) 删除指定用户进程(int p id;coutpid;bool flag二false; 标记是否找至lj编号为pid的进程 P ROCESS* p 仁 P roLi nkHead;P ROCESS* p 2=ProLi nkHead-) next;while( p2)(if (p 2-Get plD() !=pid)(pl=pl-n ext;p2=p2-n ext;else flag=true;pl-n ext =p2-n ext;delete p2; 释放pid进程对象占用的空间break; if(flag)(ProCn t;for(int i=O;iMM_SI

16、ZE;i+) 释放被 pid 进程占用的内存块 if (MMi=pid)UsedNum;FreeNum+;cout删除成功! z,endl;)elsecout删除失败!编号为PID的进程不存在! next;while( p)(P ROCESS* tmp=p;p=p-n ext;delete tmp;)ProL in kHead-n ext=0;for(i nt i=O;iMM_SIZE;i+) 释放所有被用户进程占用的内存块(MMi=O;UsedNum;FreeNum+;coutV所有进程删除成功! e ndl;cout自动返回菜单endl;Slee p(WAITTIME);return;分别输入下列序号得到以下结果:士内存H总号MDRMiR*其HH9c IC 2C 3

温馨提示

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

评论

0/150

提交评论