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

下载本文档

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

文档简介

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

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

3、2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程。三、实验实现:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineOKI#defineEVERFLOW-1#definePCBSIZE10#defineNULLOvoidmain()InitPcb(nullPcb);/给就绪队列分配空间readyPcbtail=(PCB*)malloc(sizeof(PCB);readyP

4、cb=readyPcbtail;readyPcbtail->id=0;readyPcbtail->priority=0;readyPcbtail->time=0;readyPcbtail->next=NULL;do/*创建程序控制界面*/printf(”printf(”);nt4.printf(”);printf("t1.创建一个PCB进程nt2.销毁运行PCB进程nt3.就绪队列打印输出退出系统n");scanf("%d",&on);/设置快关按钮switch(on)执行创建PCBcase1:p=Create(nullP

5、cb);lnsertReadyPcb(readyPcb,p);break;进程case2:printf("请输入销毁进程的id值n”);seanf("%d",&deleteld);Delete(deleteld,readyPcb,nullPcb);break;case3:PrintPCB(readyPcb);break;case4:exit(0);default:printf("请输入1-4之间的序号n");while(on!=4);voidInitPcb(PCBList&nullPcb)/初始化空闲队列nullPcb=&

6、;pcb0;for(inti=0;i<PCBSIZE-1;i+)pcbi.id=i;pcbi.next=&pcbi+1;pcbPCBSIZE-1.next=NULL;printf("进程快初始化成功n");PCBListCreate(PCBList&nullPcb)/创建PCB进程if(nullPcb)将空闲队列的第一个赋值给就绪队列,并将它放置在在就绪队列的队尾pcbP=nullPcb;nullPcb=nullPcb-next;printf("请输入创建PCB的序号idn");scanf("%d",&p

7、cbP->id);printf("请输入它创建的名字n");scanf("%s",&pcbP->name);printf("请输入它的优先级n");scanf("%d",&pcbP->priority);printf("请输入它运行所需的时间n");scanf("%d",&pcbP->time);pcbP->next=NULL;returnpcbP;intDelete(intid,PCBList&readyPcb,

8、PCBList&nullPcb)/销毁PCB进程if(pcbT)while(pcbT)if(pcbT_>id=id)pcbF->next=pcbT->next;pcbT->next=nullPcb;nuIIPcb=pcbT;printf(”销毁成功n");returnOK;pcbT=pcbT->next;pcbF=pcbF->next;if(!pcbT)printf("没有要删除的PCB进程n");elseprintf("没有要删除的PCB进程n");returnOK;voidPrintPCB(PCB

9、List&readyPcb)打印PCB就绪队列printf("就绪队列中的进程,按照优先级排列的序号:n");printf("tt序号t名字t优先级t运行时间n");PCBListpcbP=readyPcb->next;while(pcbP)printf("tt%dt%st%dt%dn",pcbP->id,pcbP->name,pcbP->priority,pcbP->time);pcbP=pcbP->next;voidInsertReadyPcb(PCBList&readyPcb,

10、PCBList&pcb)PCBListpcbF=readyPcb;PCBListpcbT=readyPcb->next;if(pcbT)while(pcbT)if(pcbT->priority<pcb->priority)pcb->next=pcbT;pcbF->next=pcb;printf("创建成功并将进程插入到就绪队列中了n");return;pcbT=pcbT->next;pcbF=pcbF->next;if(!pcbT)pcbF->next=pcb;elsepcbF->next=pcb;prin

11、tf("创建成功并将进程插入到就绪队列中了n");实验结果m请埔入进程名CnamEL10>*进程丄、*请输入进程时间<int>«*«#输入进程优先级<031>*1是否靈坯扁亦石二继续"N?吉耒实验报告二、单处理机系统的进程调度实验者:鞠智明学号:201010510116班级:计科(1)班实验时间2012年12月一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度。、实验内容:(二)在WINDOWS

12、环境下模拟实验:1、先来先服务调度算法2、优先数调度算法;3、时间片轮法调度算法4、多级反馈队列轮转调度算法三、实验实现:#include"stdio.h"#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type)#defineNULLOstructpcb/*定charname10;charstate;intsuper;intntime;intrtime;structpcb*link;*ready=NULL,*p;typedefstructpcbPC

13、B;sort()/*建立对PCB*/进程进行优先级排列函数*/PCB*first,*second;intinsert=0;if(ready=NULL)|(p_>super)>(ready_>super)/*p->link=ready;ready=p;else/*进程比较优先级,插优先级最大者,插入入适当的位置队首*/中*/first=ready;second=first->link;while(second!=NULL)if(p->super)>(second_>super)/*/*插入p->link=second;first->li

14、nk=p;second=NULL;insert=1;else/*插入进first=first->link;second=second->link;if(insert=O)first->link=p;input()/*inti,num;clrscr();/*printf("nscanf("%d",&num);for(i=0;i<num;i+)printf("np=getpch(PCB);printf("nscanf("%s",p->name);printf("n输scanf(&q

15、uot;%d",&p->super);printf("n输scanf("%d",&p->ntime);printf("n");p->rtime=0;p->state='w'p->link=NULL;sort();/*intspace()进程比进前进程优程,*/*/*/立*/*/?");No.%d:n",i);:");:");:");sort*/intl=O;PCB*pr=ready;while(pr!=NULL)l+;pr=

16、pr->link;return(l);disp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/printf("nqnametstatetsupertndtime'truntimen");printf("|%st",pr->name);printf("|%ct",pr->state);printf("|%dt",pr->super);printf("|%dt",pr->ntime);printf("|%dt",pr->rti

17、me);printf("n");check()/*建立PCB*pr;printf("n*disp(p);pr=ready;printf("n*当前就绪while(pr!=NULL)disp(pr);pr=pr->link;destroy()/*建printf("n进程free(p);running()/*建立进程就(p->rtime)+;if(p->rtime=p->ntime)destroy();/*调else当刖正在运行的进程是:%s",p->name);/*队列状态为:n”);/*显立进程撤消函数进

18、程运行结%s已完绪函数(进程运行时用destroy看函数*/显示当前运行进程*/示就绪队列状态*/束,撤消进程)*/成.n“,p_>name);间到,置就绪状态*/函数*/(p->super)-;sort();/*调用voidmain()/*主p->state='w:sort*/*/intlen,h=O;charch;input();len=space();while(len!=0)&&(ready!=NULL)ch=getchar();h+;printf("nTheexecutenumber:%dn",h);p=ready;rea

19、dy=p->link;p->link=NULL;p->state='R'check();running();.");.n");.");.n");printf("n按任ch=getchar();printf("nn进程ch=getchar();实验结果睛输入要运行的逬程的个数汐第i个进程:输入进程名二进程1输入进程运行时间汀第2个进程:输入进程名:进程2输入进程运行时间:2当前正在运行的进程是:进程ii*七ime0在队列可停留时间2names七atequeue进程iR1ntime1当前就绪队列状态为已n

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

21、业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。二、实验内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。三、实验实现:#include<stdio.h>#include<stdlib.h>structlinkkintsize;intaddr;structlinkk*next;;structjobtabintjno;

22、intsize;intaddr;intflag;;structlinkk*PL,*p,*q,*p1;structjobtabtab20;intl,m,n,t,addr,length;voidprintlink()if(PL!=NULL)printf("n进程内存大小剩余内存n");printf(”n");q=PL;while(q!=NULL)printf("%d%dn",q->addr,q->size);q=q_>next;printf("n");return;voidprinttab()inti;intf

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

24、tf("n输入进程编号:");scanf("%d",&n);printf("n输入进程内存大小:");scanf("%d",&l);if(tabn.flag=1)printf("n该进程被创建!n");return;elsetabn.flag=1;tabn.size=l;q=PL;p=PL;while(q!=NULL)if(q_>size=l)tabn.addr=q->addr;p1=q;if(p1=PL)PL=q->next;elsep->next=q-

25、>next;free(p1);return;if(q->size>l)tabn.addr=q->addr;q_>size=q_>size_l;q_>addr=q_>addr+l;return;p=q;q=q_>next;tabn.flag=O;printf("n没有内存剩余!n");return;voidfreem()printf("n输入进程编号:");scanf("%d",&n);if(tabn.flag=O)printf("n不是该进程!");re

26、turn;addr=tabn.addr;length=tabn.size;tabn.flag=O;q=PL;if(q=NULL)|(addr+length<q->addr)p1=(structlinkk*)malloc(sizeof(structlinkk);p1->size=length;p1->addr=addr;p1->next=q;PL=p1;return;if(addr+length=q->addr)q->addr=addr;q->size=q->size+length;return;p=q;q=q_>next;while(

27、q!=NULL)if(p->addr+p->size=addr)p->size=p->size+length;if(addr+length=q->addr)p->size=p->size+q->size;p1=q;p->next=q_>next;free(p1);return;if(addr+length=q->addr)q->addr=addr;q->size=q->size+length;return;if(addr+length<q->addr)p1=(structlinkk*)malloc(

28、sizeof(structlinkk);p1->size=length;p1->addr=addr;p1->next=q;p->next=p1;return;p=q;q=q_>next;if(p->addr+p->size=addr)p->size=p->size+length;return;p1=(structlinkk*)malloc(sizeof(structlinkk);p1->addr=addr;p1->size=length;p1->next=NULL;p1->next=p1;return;main()P

29、L=(structlinkk*)malloc(sizeof(structlinkk);PL->addr=O;PL->next=NULL;printf("n输入内存大小:”);scanf("%d",&n);PL->size=n;for(inti=0;i<20;i+)tabi.jno=i;tabi.flag=O;t=0;doprintf("nn");printf("1-分配内存2-释放内存n");printf("3-链接进程号4-输出_TABn");printf("5

30、-Quitn");printf("nn");printf("Selectbb");scanf("%d",&m);switch(m)case1:allocm();break;case2:freem();break;case3:printlink();break;case4:printtab();break;case5:t=1;while(!t);实验结果U"D:Vc6.0201010510116thirdDebugthird.exe'|=|部輸入内存大小:55QuitSelectEl输入进程编号咱1输

31、入进程内存大小10配内存2释放内存3雜接磋彳呈号4爺岀_TAB5QuitSelect1输入进程编号:验输入进程内存大小汐丄色配内存2释放内存3誰接磋糧号4侖岀_TAB5QuitSelect41编号进程起始地址进程内存大小101212实验报告四、请求分页存储管理(虚拟存储)实验者:鞠智明学号:201010510116班级:计科(1)班实验时间2012年12月、实验目的:通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,贝嚅求有请求调入的功能将其调入。假如此时若内存没有空白

32、物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种。二、实验内容:模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一1、先进先出算法2、最近最久算法3、CLOCK算法三、实验实现:#include<iostream>#include<time.h>usingnamespacestd;constintMaxNum=320;指令数constintM=5;内存容量intPageOrderMaxNum;页面请求intSimulateMaxNumM;页面访问过程intPageCountM,LackNum;/PageCount用来记录LRU算法中最久未

33、使用时间LackNum记录缺页数floatPageRate;/命中率intPageCount132;boollsExit(inti)/FIFO算法中判断新的页面请求是否在内存中boolf=false;for(intj=O;j<M;j+)if(Simulatei-1j=PageOrderi)在前一次页面请求过程中寻找是否存在新的页面请求f=true;returnf;intlsExitLRU(inti)/LRU算法中判断新的页面请求是否在内存中intf=-1;for(intj=O;j<M;j+)if(Simulatei-1j=PageOrderi)f=j;returnf;intComp

34、are()/LRU算法找出内存中需要置换出来的页面intp,q;p=PageCountO;q=0;for(inti=1;i<M;i+)if(p<PageCounti)p=PageCounti;q=i;returnq;voidlnit()初始化页框for(intk=O;k<MaxNum;k+)intn=rand()%320;随机数产生320次指令PageOrderk=n/10;根据指令产生320次页面请求for(inti=0;i<MaxNum;i+)初始化页面访问过程for(intj=0;j<M;j+)Simulateij=-1;for(intq=0;q<M;

35、q+)初始化最久未使用数组PageCountq=0;voidOutPut()输出inti,j;cout<<"页面访问序列:"<<endl;for(j=0;j<MaxNum;j+)cout<<PageOrderj<<""cout<<endl;cout<<"页面访问过程(只显示前10个):"<<endl;for(i=0;i<10;i+)for(j=0;j<M;j+)if(Simulateij=-1)cout<<"&q

36、uot;elsecout<<Simulateij<<""cout<<endl;cout<<"缺页数="<<LackNum<<endl;cout<<"命中率="<<PageRate<<endl;cout<<""<<endl;voidFIFO()/FIFO算法intj,x=O,y=O;LackNum=0,Init();for(j=0;j<M;j+)/将前五个页面请求直接放入内存中fo

37、r(intk=O;k<=j;k+)if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k;/LackNum+;for(x=M;x<MaxNum;x+)for(intt=O;t<M;t+)先将前一次页面访问过程赋值给新的页面访问过程Simulatext=Simulatex-1t;if(!lsExit(x)根据新访问页面是否存在内存中来更新页面访问过程LackNum+;Simulatexy%M=PageOrderx;y+;PageRate=1-(float)LackNum/(float)MaxNum);算出命中率OutPu

38、t();voidLRU()/LRU算法intj,x=O,y=O;LackNum=0,Init();for(j=0;j<M;j+)/将前五个页面请求直接放入内存中for(intk=O;k<=j;k+)PageCountk+;if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k;LackNum+;for(x=M;x<MaxNum;x+)for(intt=O;t<M;t+)先将前一次页面访问过程赋值给新的页面访问过程Simulatext=Simulatex-1t;intp=lsExitLRU(x);if(p=-1)/

39、根据反回的p值来更新页面访问过程intk;k=Compare();for(intw=0;w<M;w+)if(w!=k)PageCountw+;elsePageCountk=1;Simulatexk=PageOrderx;LackNum+;elsefor(intw=O;w<M;w+)if(w!=p)PageCountw+;elsePageCountp=1;PageRate=1-(float)LackNum/(float)MaxNum);算出命中率OutPut();最近最不常用调度算法(LFU)voidLFU()voidNUR()voidYourChoice(intchoice)swi

40、tch(choice)case1:cout<<""<<endl;cout<<"FIFO算法结果如下:"<<endl;FIFO()break;case2:cout<<""<<endl;cout<<"LRU算法结果如下:"<<endl;LRU();break;case3:cout<<""<<endl;cout<<"LFU算法结果如下:"<<

41、;endl;/LFU();break;case4:cout<<""<<endl;cout<<"NUR算法结果如下:"<<endl;/NUR();break;case5:break;default:cout<<"重新选择算法:1-FIFO2-LRU3-LFU4-NUR5-退出"<<endl;cin>>choice;YourChoice(choice);voidmain()intchoice,i=1;while(i)1-FIFO2-LRU3-LFU4-NU

42、R5-1-FIFO2-LRU3-LFU4-NUR5-退出"<<endl;cout<<"请选择算法:cin>>choice;if(choice=5)i=0;elseYourChoice(choice);实验结果实验报告五、死锁的避免实验者:鞠智明学号:201010510116班级:计科(1)班实验时间2012年12月一、实验目的:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当

43、进程处于这种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、实验内容:利用银行家算法来避免死锁的发生三、实验实现:#include"string.h"#include"iostream"usingnamespacestd;#defineFALSEO#defineTRUE1#defineW10#defineR20intM;总进程数intN;资源种类intALL_RESOURCEW

44、;各种资源的数目总和intMAXWR;M个进程对N类资源最大资源需求量intAVAILABLER;系统可用资源数intALLOCATIONWR;/M个进程已经得到N类资源的资源量intNEEDWR;/M个进程还需要N类资源的资源量intRequestR;请求资源个数voidshowdata()函数showdata,输出资源分配情况inti,j;cout<<"各种资源的总数量(all):"<<endl;cout<<""for(j=0;j<N;j+)cout<<"资源"<<

45、j<<":"<<ALL_RESOURCEj;cout<<endl<<endl;cout<<"系统目前各种资源可用的数为(available):"<<endl;cout<<""for(j=0;j<N;j+)cout<<"资源"<<j<<":"<<AVAILABLEj;cout<<endl<<endl;cout<<"各

46、进程还需要的资源量(need):"<<endl<<endl;cout<<"资源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<<endl;c

47、out<<endl;cout<<"各进程已经得到的资源量(allocation):"<<endl<<endl;cout<<"资源0"<<"资源1"<<"资源2"<<endl;for(i=0;i<M;i+)cout<<"进程p"<<i<<":"for(j=0;j<N;j+)cout<<ALLOCATIONij<<

48、""cout<<endl;cout<<endl;voidchangdata(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=AV

49、AILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEEDkj=NEEDkj+Requestj;intchkerr(ints)/函数chkerr,检查是否安全intWORK,FINISHW;inti,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

50、(i<M);for(i=0;i<M;i+)if(FINISHi=FALSE)cout<<endl;cout<<"系统不安全!!!本次资源申请不成功!!"<<endl;cout<<endl;return1;cout<<endl;cout<<"经安全性检查,系统安全,本次分配成功。"<<endl;cout<<endl;return。;voidbank()银行家算法inti=0,j=0;charflag='Y'while(flag=

51、9;Y'|flag='y')i=-1;while(i<O|i>=M)cout<<"请输入需申请资源的进程号(从P0到P"<<M-1<<",否则重输入!)cout<<"p"cin>>i;if(i<0|i>=M)cout<<"输入的进程号不存在,重新输入!"<<endl;cout<<"请输入进程P"<<i<<"申请的资源数:"

52、;<<endl;for(j=0;j<N;j+)cout<<"资源"<<j<<":"cin>>Requestj;if(Requestj>NEEDij)若请求的资源数大于进程还需要i类资源的资源量jcout<<"进程P"<<i<<"申请的资源数大于进程P"<<i<<"还需要"<<j<<"类资源的资源量!";cout<&l

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

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

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

56、上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分配和收回算法。、实验内容:模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。从下题目中选择一题来实现设备的管理:(1)连续的磁盘存储空间的分配和回收(2)用位示图管理磁盘存储空间。1、(3)模拟UNIX系统的空闲块组链接法,实现磁盘存储空间的管理。和内存的释放过程。三、实验实现:#include<stdio.h>#

57、include<process.h>voidlnitbitmap(intmap88)intcylinder,track,sector;charchoice='Y:printf(”初始化位视图.n");while(choice='y'|choice='Y')printf("柱面号:”);scanf("%d",&cylinder);printf("磁道号:");scanf("%d",&track);printf("物理记录号:”);scanf

58、("%d",&sector);mapcylinder4*track+sector=1;printf("contiune?");getchar();scanf("%c",&choice);voidallocate(intmap88)inti,j;intflag=0;intcylinder,track,sector;for(i=0;i<8;i+)for(j=0;j<8;j+)if(mapij=0)mapij=1;flag=1;break;if(flag=1)break;if(flag=1)cylinder=i;

59、track=j/4;sector=j%4;printf(”分配到的柱面号、磁道号、物理记录数”);printf("%dt%dt%d",cylinder,track,sector);printf("n");elseprintf(”空间不足,分配失败r);voidreclaim(intmap88)intcylinder,track,sector;printf("柱面号:”);scanf("%d",&cylinder);printf("磁道号:");scanf("%d",&t

60、rack);printf("物理记录号:");scanf("%d",&sector);if(mapcylinder4*track+sector=0)printf("此块为未分配块!回收出错!”);getchar();elsemapcylinder4*track+sector=0;printf("回收块对应的字节号:%4dt位数:%4dn",cylinder,4*track+sector);voidmain()intbitmap88;inti,j;intchoice;for(i=0;i<8;i+)for(j=0;

61、j<8;j+)bitmapij=0;Initbitmap(bitmap);while(1)printf("n请输入选择:”);printf("1-分配,2-回收,3-显示位示图,0-退出n");scanf("%d",&choice);switch(choice)case1:allocate(bitmap);break;case2:reclaim(bitmap);break;case3:for(i=0;i<8;i+)for(j=0;j<8;j+)printf("%8d",bitmapij);printf("n");break;caseO:exit(O);default:printf(

温馨提示

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

评论

0/150

提交评论