10计科《1》班鞠智明操作系统课程设计_第1页
10计科《1》班鞠智明操作系统课程设计_第2页
10计科《1》班鞠智明操作系统课程设计_第3页
免费预览已结束,剩余56页可下载查看

下载本文档

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

文档简介

1、操作系统课程设计班级10计科1班学号201010510116姓名鞠智明指导汤老师时间2012.12.24 景德镇陶瓷学院实验报告一、进程管理设计 2一、实验目的: 2二、实验内容: 2实验报告二、单处理机系统的进程调度6一、实验目的: 6二、实验内容: 7三、实验实现: 7实验报告三、基本存储器管理 11一、实验目的: 12二、实验内容: 12三、实验实现: 12实验报告四、请求分页存储管理(虚拟存储)17一、实验目的: 17二、实验内容: 18三、实验实现: 18实验报告五、死锁的避免 23一、实验目的: 23二、实验内容: 24实验报告六、磁盘空间的分配与回收28一、实验目的: 28二、实

2、验内容: 28三、实验实现: 29实验报告七、文件管理 31一、实验目的: 31二、实验内容: 32三、实验实现: 32实验报告一、进程管理设计实验者:鞠智明学号:201010510116 班级:计科(1 )班实验时间 2012年12月一、实验目的:1、执行通过进程的创建和控制的设计来达到如下目的:2、加深对进程概念的理解,明确进程和程序的区别;3、进一步认识并发的概念,区别顺序执行和并发执行;4、分析进程争用临界资源的现象,学习解决进程互斥的方法;二、实验内容:(二)在 WINDOWS 环境下模拟实验:1、用C语言编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小

3、、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、同时模拟内 存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通 过终端输出。3、按进程的优 先级的顺序撤消进程,同时通过终端显示 PCB的撤消过程和内存的释放 过程。三、实验实现:#in clude<stdio.h>#in clude<malloc.h>#in clude<stdlib.h>#defi neOKI#defi neEVERFLOW-1#defi nePCBSIZE10#defi neNULLO voidmai n()In itPcb( nullPcb)

4、;/给就绪队列分配空间readyPcbtail=(PCB*)malloc(sizeof(PCB);readyPcb=readyPcbtail; readyPcbtail->id=0; readyPcbtail->priority=0; readyPcbtail->time=0; readyPcbtail-> next=NULL; do/*创建程序控制界面*/printf(”);nt4.printf(”);printf("t1.创建一个 PCB进程nt2.销毁运行 PCB进程nt3.就绪队列打印输出退出系统n");scan f("%d&quo

5、t;,&on);/设置快关按钮switch( on)执行创建PCBcase1:p=Create( nullPcb);l nsertReadyPcb(readyPcb,p);break;进程case2:printf("请输入销毁进程的id值n”);sea nf("%d", &deleteld);Delete(deleteld,readyPcb, nullPcb);break;case3:Pri ntPCB(readyPcb);break;case4:exit(0);default:printf("请输入1-4之间的序号n");wh

6、ile(o n!=4);voidI nitPcb(PCBList&n ullPcb)/初始化空闲队列nullPcb=&pcb0;for(i nti=0;i<PCBSIZE-1;i+)pcbi.id=i;pcbi. next=&pcbi+1;pcbPCBSIZE-1. next=NULL;printf("进程快初始化成功n");PCBListCreate(PCBList&nullPcb)/创建 PCB 进程if(n ullPcb)将空闲队列的第一个赋值给就绪队列,并将它放置在在就绪队列的 队尾pcbP=nullPcb;n ullPcb=n

7、ullPcb-next;printf("请输入创建PCB的序号idn");scan f("%d",&pcbP->id);printf("请输入它创建的名字n");scan f("%s",&pcbP-> name);printf("请输入它的优先级n");scan f("%d",&pcbP->priority);printf("请输入它运行所需的时间n");scan f("%d",&pcb

8、P->time);pcbP-> next=NULL;retur npcbP;intDelete(intid,PCBList&readyPcb,PCBList&nullPcb)/销毁 PCB 进程if(pcbT)while(pcbT)if(pcbT_>id=id)pcbF->n ext=pcbT->n ext;pcbT->n ext =n ullPcb;nu IIPcb=pcbT;printf(” 销毁成功 n");returnOK;pcbT=pcbT->n ext;pcbF=pcbF->n ext;if(!pcbT)pr

9、intf("没有要删除的 PCB进程n");elseprintf("没有要删除的 PCB进程n");returnOK;voidPrintPCB(PCBList&readyPcb)打印 PCB 就绪队列printf("就绪队列中的进程,按照优先级排列的序号:n");printf("tt 序号t名字t优先级t运行时间n");PCBListpcbP=readyPcb-> next;while(pcbP)prin tf("tt%dt%st%dt%dn",pcbP->id,pcbP-&

10、gt; name,pcbP->priority,pcbP->time);pcbP=pcbP->n ext;voidI nsertReadyPcb(PCBList&readyPcb,PCBList&pcb)PCBListpcbF=readyPcb;PCBListpcbT=readyPcb-> next;if(pcbT)while(pcbT)if(pcbT->priority<pcb->priority)pcb->n ext=pcbT;pcbF->n ext=pcb;printf("创建成功并将进程插入到就绪队列中了n

11、");return;pcbT=pcbT->n ext;pcbF=pcbF->n ext;if(!pcbT)pcbF->n ext=pcb;elsepcbF->n ext=pcb;printf("创建成功并将进程插入到就绪队列中了n");实验结果m请埔入进程名CnamE L10 >* 进程丄、*请输入进程时间<int>«*«#输入进程优先级<031 >* 1是否靈坯扁亦石二继续"N?吉耒实验报告二、单处理机系统的进程调度实验者:鞠智明学号: 201010510116班级:计科(1 )

12、班 实验时间 2012年12月一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度。、实验内容:(二)在 WINDOWS 环境下模拟实验:1、先来先服务调度算法2、优先数调度算法;3、时间片轮法调度算法4、多级反馈队列轮转调度算法三、实验实现:#i nclude"stdio.h"#in clude<stdlib.h>#in clude<c oni o.h>#defi negetpch(type)(type*)malloc(sizeo

13、f(type)#defi neNULLOstructpcb/*定char name10;charstate;in tsuper;intn time;in trtime;structpcb*li nk;*ready=NULL,*p; typedefstructpcbPCB; sort()/* 建 立 对 PCB*/进程 进行 优先 级 排列 函数 */PCB*first,*seco nd;in ti nsert=0;if(ready=NULL)|(p_>super)>(ready_>super)/*p->li nk=ready;ready=p;else/* 进程比较优先级

14、,插优先级最大者,插入入适当 的位置队首*/中 */first=ready; sec on d=first->li nk; while(seco nd!=NULL) if(p->super)>(sec on d_>super)/* /* 插 入 p->li nk=sec ond; first->li nk=p; seco nd=NULL; in sert=1; else/* 插入进 first=first->li nk; sec on d=sec on d->li nk; if(i nsert=O)first->li nk=p; in pu

15、t()/* in ti, num; clrscr();/* prin tf("n sca nf("%d",&n um); for(i=0;i< nu m;i+) prin tf("n p=getpch(PCB); prin tf("n sca nf("%s",p->n ame); prin tf("n输sca nf("%d",&p->super); prin tf("n输sca nf("%d",&p-> ntime);

16、 prin tf("n"); p->rtime=0;p->state='w' p->li nk=NULL; sort();/* in tspace() 进程比进前进程优程,*/*/*/立*/*/?");No.%d:n",i);:");:");:");sort*/in tl=O;PCB*pr=ready; while(pr!=NULL)l+;pr=pr->li nk;return(l);disp(PCB*pr)/* 建立进程显示函数,用于显示当前进程*/prin tf("nqn

17、 ametstatetsupert ndtime'tr un timen");prin tf("|%st",pr-> name); prin tf("|%ct",pr->state); prin tf("|%dt",pr->super); prin tf("|%dt",pr-> ntime); prin tf("|%dt",pr->rtime); prin tf("n"); check()/*建立 PCB*pr; prin tf

18、("n* disp(p); pr=ready; printf("n* 当前就绪 while(pr!=NULL)disp(pr); pr=pr->li nk; destroy()/* 建prin tf("n进程free(p);running()/* 建立进程就 (p->rtime)+; if(p->rtime=p-> ntime) destroy();/*调else当 刖正在 运行的 进程是:%s",p->name);/*队列状态为:n”);/*显立进程撤消函数进程运行结%s已完绪函数(进程运行时用destroy看函数*/显示

19、当前运行进程*/ 示就绪队列状态*/束,撤消进程)*/成.n “,p_ >n ame);间到,置就绪状态*/函数*/(p->super)-;sort();/*调用voidmai n()/*主p->state='w:sort*/*/in tle n,h=O;charch;in put();len=space();while(le n!=0) &&(ready!=NULL)ch=getchar();h+;prin tf("nTheexecute nu mber:%dn",h); p=ready;ready=p->li nk;p-&

20、gt;li nk=NULL;p->state='R'check();runnin g();.");.n");prin tf("n按任ch=getchar();prin tf("nn进程ch=getchar();实验结果睛输入要运行的逬程的个数汐第i个进程:输入进程名二进程1 输入进程运行时间汀第2个进程:输入进程名:进程2输入进程运行时间:2当前正在运行的进程是:进程ii* 七 ime0在队列可停留时间2names七atequeue进程iR1nt ime 1当前就绪队列状态为已nftnestatequeuent inert ime在

21、队列可停留时间w1202进程【进程1】已完成按i键添加新进程按其他任意犍继续运行未结東到进程.实验报告三、基本存储器管理实验者:鞠智明 学号:201010510116 班级:计科(1 )班实验时间 2012年12月、实验目的:通过进程的创建和控制的设计来达到如下目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳 定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户 提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策 略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作 业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间 或归还部分主存空

22、间。主存的分配和回收的实现与主存储器的管理方式 有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主 存的分配和回收。二、实验内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本 次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情 况。三、实验实现:#in clude<stdio.h>#in clude<stdlib.h>structli nkkin tsize;in taddr;structli nkk* next;;structjobtabintjn o; in

23、tsize; in taddr;in tflag;;structli nkk*PL,*p,*q,*p1; structjobtabtab20; in tl, m,n ,t,addr,le ngth; voidpri ntl in k() if(PL!=NULL)prin tf("n进程内存大小剩余内存n");printf(”n");q=PL;while(q!=NULL)prin tf("%d%dn",q->addr,q->size); q=q_>n ext;printf("n");return;voidpr

24、i nttab()in ti;i ntflag=0;for(i=0;i<20&&flag=0;i+) if(tabi.flag=1)flag=1;if(flag=0)printf("n无进程!");return;n");prin tf("n进程编号进程起始地址进程内存大小 printf(”n");for(i=0;i<20;i+) if(tabi.flag=1) prin tf("%d%d%dn",i,tabi.addr,tabi.size); printf("n");retur

25、n;voidallocm()prin tf("n输入进程编号:");scan f("%d",&n);prin tf("n输入进程内存大小:");scan f("%d",&l);if(tab n.flag=1)prin tf("n该进程被创建!n");return;elsetab n.flag=1;tab n .size=l; q=PL;p=PL;while(q!=NULL)if(q_>size=l)tab n.addr=q->addr;p1=q; if(p1=PL)P

26、L=q-> next; elsep->n ext=q->n ext;free(p1);return;if(q->size>l)tab n.addr=q->addr; q_>size=q_>size_l;q_>addr=q_>addr+l; return;p=q;q=q_>n ext;tab n .flag=O;prin tf("n没有内存剩余 !n");return;voidfreem()printf("n 输入进程编号:");sca nf("%d",&n);i

27、f(tab n .flag=O)pri ntf("n 不是该进程!");return;addr=tab n .addr;le ngth=tab n .size;tab n .flag=O;q=PL;if(q=NULL)|(addr+le ngth<q->addr)p1=(structli nkk*)malloc(sizeof(structli nkk); p1->size=le ngth;p1->addr=addr;p1- >n ext=q;PL=p1;return;if(addr+le ngth=q->addr)q->addr=a

28、ddr;q->size=q->size+le ngth; return;p=q;q=q_>n ext;while(q!=NULL) if(p->addr+p->size=addr) p->size=p->size+le ngth; if(addr+le ngth=q->addr) p->size=p->size+q->size; p1=q;p->n ext=q _>n ext;free(p1);return;if(addr+le ngth=q->addr)q->addr=addr;q->size=q

29、->size+le ngth; return;if(addr+le ngth<q->addr)p1=(structli nkk*)malloc(sizeof(structli nkk); p1->size=le ngth;p1->addr=addr;p1- >n ext=q;p->n ext=p1;return;p=q;q=q_>n ext;if(p->addr+p->size=addr)p->size=p->size+le ngth;return;p1=(structli nkk*)malloc(sizeof(struc

30、tli nkk); p1->addr=addr;p1->size=le ngth;p1- >n ext=NULL; p1- >n ext=p1;return;main ()PL=(structli nkk*)malloc(sizeof(structli nkk);PL->addr=O;PL->n ext=NULL; prin tf("n 输入内存大小 :”); sca nf("%d",&n );PL->size=n; for(i nti=0;i<20;i+) tabi.j no=i; tabi.flag=O;

31、t=0;doprintf("nn");printf("1-分配内存 2-释放内存n"); printf("3-链接进程号4-输出 _TABn");prin tf("5-Quitn");printf("nn");prin tf("Selectbb");sca nf("%d",&m);switch(m) case1:allocm();break; case2:freem();break;case3:pri ntl in k();break;case4:

32、pri nttab();break; case5:t=1;while(!t);实验结果U "D:Vc6.0201010510116thirdDebugthird.exe'| = | 部輸入内存大小:55QuitSelect El 输入进程编号咱1输入进程内存大小10配内存2释放内存3雜接磋彳呈号4爺岀_TAB5QuitSelect1 输入进程编号:验输入进程内存大小汐丄色配内存2释放内存3誰接磋糧号4侖岀_TAB5QuitSelect41编号进程起始地址进程内存大小10 12 12实验报告四、请求分页存储管理(虚拟存储)实验者:鞠智明学号:201010510116 班级:计科

33、(1 )班 实验时间 2012年12月、实验目的:通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,贝嚅求有请求 调入的功能将其调入。假如此时若内存没有空白物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种。二、实验内容:模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一1、先进先出算法2、最近最久算法3、CLOCK 算法三、实验实现:#in clude<iostream>#in clude<time.h>using

34、n amespacestd;con sti ntMaxNum=320;指令数constin tM=5;内存容量in tPageOrderMaxNum;页面请求in tSimulateMaxNumM;页面访问过程intPageCountM,LackNum;/PageCount用来记录 LRU算法中最久未使用时间LackNum 记录缺页数floatPageRate;/ 命中率in tPageCou nt132;boollsExit( in ti)/FIFO算法中判断新的页面请求是否在内存中boolf=false;for(i ntj=O;j<M;j+)if(Simulatei-1j=PageO

35、rderi)在前一次页面请求过程中寻找是否存在新的页面请求f=true;returnf;in tlsExitLRU(i nti)/LRU算法中判断新的页面请求是否在内存中in tf=-1;for(i ntj=O;j<M;j+)if(Simulatei-1j=PageOrderi)f=j;returnf;in tCompare()/LRU算法找出内存中需要置换出来的页面in tp,q;p=PageCou ntO;q=0;for(i nti=1;i<M;i+)if(p<PageCou nti)p=PageCo un ti;q=i;returnq;voidl nit()初始化页框f

36、or(i ntk=O;k<MaxNum;k+)intn=rand()%320;随机数产生 320次指令PageOrderk=n/10;根据指令产生 320次页面请求for(i nti=0;i<MaxNum;i+)初始化页面访问过程for(i ntj=0;j<M;j+)Simulateij=-1;for(i ntq=0;q<M;q+)初始化最久未使用数组PageCou ntq=0;voidOutPut() 输出in ti,j;cout<<"页面访问序列 :"<<endl;for(j=0;j<MaxNum;j+)cout&l

37、t;<PageOrderj<<""cout<<e ndl;cout<<"页面访问过程 (只显示前 10个):"<<endl;for(i=0;i<10;i+)for(j=0;j<M;j+)if(Simulateij=-1)cout<<""elsecout<<Simulateij<<""cout<<e ndl;cout<<" 缺 页 数 ="<<LackNum&l

38、t;<e ndl;cout<<"命 中 率="<<PageRate<<endl;cout<<""<<e ndl;voidFIFO()/FIFO 算法in tj,x=O,y=O;LackNum=0,Ini t();for(j=0;j<M;j+)/将前五个页面请求直接放入内存中for(i ntk=O;k<=j;k+)if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k;/LackNum+;for(x=M;x<MaxN

39、um;x+)for(i ntt=O;t<M;t+)先将前一次页面访问过程赋值给新的页面访问过程Simulatext=Simulatex-1t;if(!lsExit(x)根据新访问页面是否存在内存中来更新页面访问过程LackNum+;Simulatexy%M=PageOrderx;y+;PageRate=1-(float)LackNum/(float)MaxNum);算出命中率OutPut();voidLRU()/LRU 算法in tj,x=O,y=O;LackNum=0,Ini t();for(j=0;j<M;j+)/将前五个页面请求直接放入内存中for(i ntk=O;k<

40、=j;k+)PageCou ntk+;if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k;LackNum+;for(x=M;x<MaxNum;x+)for(i ntt=O;t<M;t+)先将前一次页面访问过程赋值给新的页面访问过程Simulatext=Simulatex-1t;in tp=lsExitLRU(x);if(p=-1)/根据反回的p值来更新页面访问过程in tk;k=Compare();for(i ntw=0;w<M;w+)if(w!=k)PageCou ntw+;elsePageCou ntk=1;S

41、imulatexk=PageOrderx;LackNum+;elsefor(i ntw=O;w<M;w+)if(w!=p)PageCou ntw+;elsePageCou ntp=1;PageRate=1-(float)LackNum/(float)MaxNum);算出命中率OutPut();最近最不常用调度算法(LFU)voidLFU()voidNUR()voidYourChoice(i ntchoice)switch(choice)case1:cout<<""<<e ndl;cout<<"FIFO算法结果如下:&quo

42、t;<<e ndl;FIFO()break;case2:cout<<""<<e ndl;cout<<"LRU算法结果如下:"<<e ndl;LRU();break;case3:cout<<""<<e ndl;cout<<"LFU算法结果如下:"<<e ndl;/LFU();break;case4:cout<<""<<e ndl;cout<<"N

43、UR 算法结果如下:"<<e ndl;/NUR();break;case5:break;default:cout<<"重新选择算法:1-FIFO2-LRU3-LFU4-NUR5- 退出"<<endl;cin> >choice;YourChoice(choice);voidmai n()in tchoice,i=1;while(i)1-FIFO2-LRU3-LFU4-NUR5-退出"<<endl;cout<<"请选择算法: cin> >choice;if(choi

44、ce=5)i=0;elseYourChoice(choice);实验结果实验报告五、死锁的避免实验者:鞠智明 学号:201010510116 班级:计科(1 )班实验时间 2012年12月一、实验目的:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法 在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中

45、, 所施加的限制条件较弱,有可能获得令人满意的系统性能。二、实验内容:利用银行家算法来避免死锁的发生三、实验实现:#i nclude"stri ng.h"#i nclude"iostream"usingn amespacestd;#defi neFALSEO#defi neTRUE1#defi neW10#defi neR20intM;总进程数intN;资源种类in tALL_RESOURCEW;各种资源的数目总和intMAXWR;M个进程对N类资源最大资源需求量in tAVAILABLER;系统可用资源数intALLOCATIONWR;/M个进程已经得

46、到N类资源的资源量intNEEDWR;/M个进程还需要N类资源的资源量in tRequestR; 请求资源个数voidshowdata()函数showdata,输出资源分配情况in ti,j;cout<<"各种资源的总数量(all):"<<endl;cout<<""for(j=0;j<N;j+)cout<<" 资源"<<j<<":"<<ALL_RESOURCEj; cout<<e ndl<<e ndl;

47、cout<<"系统目前各种资源可用的数为(available):"<<endl;cout<<""for(j=0;j<N;j+)cout<<" 资源"<<j<<":"<<AVAILABLEj; cout<<e ndl<<e ndl;cout<<"各进程还需要的资源量 (need):"<<endl<<endl;cout<<"资源

48、0"<<"资源 1"<<"资源 2"<<endl;for(i=0;i<M;i+)for(i=0;i<M;i+)cout<<"进程 p"<<i<<":"for(j=0;j<N;j+)cout<<NEEDij<<""cout<<e ndl;cout<<e ndl;cout<<"各进程已经得到的资源量(allocation):&quo

49、t;<<endl<<endl;cout<<"资源 0"<<"资源 1"<<"资源 2"<<endl;for(i=0;i<M;i+)cout<<"进程 p"<<i<<":"for(j=0;j<N;j+)cout<<ALLOCATIONij<<""cout<<e ndl;cout<<e ndl;voidchangd

50、ata(intk)函数changdata,改变可用资源和已经拿到资源和还需要的资源的值intj;for(j=0;j<N;j+)AVAILABLEj=AVAILABLEj-Requestj;ALLOCATIONkj=ALLOCATIONkj+Requestj;NEEDkj=NEEDkj-Requestj;voidrstordata(intk)函数rstordata,恢复可用资源和已经拿到资源和还需要的资源的值intj;for(j=0;j<N;j+)AVAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEE

51、Dkj=NEEDkj+Requestj;intchkerr(ints)/函数chkerr,检查是否安全in tWORK,FINISHW;in ti,j,k=0;for(i=0;i<M;i+)FINISHi=FALSE;for(j=0;j<N;j+)WORK=AVAILABLEj;i=s;doif(FINISHi=FALSE&&NEEDij<=WORK)WORK=WORK+ALLOCATIONij;FINISHi=TRUE;i=0;elsei+;while(i<M);for(i=0;i<M;i+)if(FINISHi=FALSE)cout<&l

52、t;e ndl;cout<<"系统不安全!!!本次资源申请不成功!!"<<endl;cout<<e ndl;return1;cout<<e ndl;cout<<"经安全性检查,系统安全,本次分配成功。"<<endl;cout<<e ndl;return。;voidba nk() 银行家算法in ti=0,j=0;charflag='Y'while(flag='Y'|flag='y')i=-1;while(i<O|i&g

53、t;=M)cout<<"请输入需申请资源的进程号(从 P0到P"<<M-1<<",否则重输入!)cout<<"p"ci n> >i;if(i<0|i>=M)cout<<"输入的进程号不存在,重新输入!"<<e ndl;cout<<"请输入进程P"<<i<<"申请的资源数:"<<endl;for(j=0;j<N;j+)cout<<

54、;"资源"<<j<<":"cin> >Requestj;if(Requestj>NEEDij)若请求的资源数大于进程还需要i类资源的资源量jcout<<"进程 P"<<i<<"申请的资源数大于进程P"<<i<<"还需要"<<j<<"类资源的资源量!";cout<<"申请不合理,出错!请重新选择!"<<endl

55、<<endl;flag='N'break;elseif(Requestj>AVAILABLEj)若请求的资源数大于可用资源数cout<<"进程P"<<i<<"申请的资源数大于系统可用"<<j<<"类资源的资源量!";cout<<"申请不合理,出错!请重新选择!"<<endl<<endl;flag='N'break;if(flag='Y'|flag='

56、;y')changdata(i);/调用 changdata(i)函数,改变资源数if(chkerr(i) 若系统安全rstordata(i);/ 调用 rstordata(i)函数,恢复资源数showdata();/输出资源分配情况else/若系统不安全showdata();/输出资源分配情况else/ 若 flag=N|flag=nshowdata();cout<<e ndl;cout<<"是否继续银行家算法演示,按'Y'或V键继续,按'N'或'n'键退出演示:";cin> >f

57、lag;实验结果求 需 大 最1:1蝕 数程: 类进阵P: 口的服 朗矩程阵类余棘 的中源进矩种剩霸 源存药求0M 资内配配*祐P 统时分分盍时娟 系现己已9靠现的 1A1A1A1A1A1A1AAanu Itey to continuit实验报告六、磁盘空间的分配与回收实验者:鞠智明 学号:201010510116 班级:计科(1 )班实验时间 2012年12月、实验目的:磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或已经建立 在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成顺序文件(

58、连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种 是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有 效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分配和收回算法。、实验内容:模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。从下题目中选择一题来实现设备的管理:(1)连续的磁盘存储空间的分配和回收(2)用位示图管理磁盘存储空间。1、( 3)模拟UNIX系统的空闲块组链接法,实现磁盘存储空间的管理。和内存的释 放过程。三、实验实现:#in clude<stdio.h>#i nclude<process.h>voidl ni tbitmap(i ntmap88)in tcyli nder,track,sector;charchoice='Y:printf(”初始化位视图.n");while(choice='y'|choice='Y&

温馨提示

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

评论

0/150

提交评论