




已阅读5页,还剩65页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计班级 10计科班 学号 201010510116 姓名 鞠智明 指导 汤老师 时间 2012.12.242012.01.06 景德镇陶瓷学院实验报告一、进程管理设计2一、实验目的:2二、实验内容:3实验报告二、单处理机系统的进程调度7一、实验目的:7二、实验内容:7三、实验实现:7实验报告三、基本存储器管理11一、实验目的:12二、实验内容:12三、实验实现:12实验报告四、请求分页存储管理(虚拟存储)17一、实验目的:17二、实验内容:18三、实验实现:18实验报告五、死锁的避免23一、实验目的:23二、实验内容:24实验报告六、磁盘空间的分配与回收28一、实验目的:28二、实验内容:29三、实验实现:29实验报告七、文件管理31一、实验目的:32二、实验内容:32三、实验实现:32 实验报告一、进程管理设计实验者:鞠智明学号:201010510116 班级:计科(1)班实验时间2012年12月1、 实验目的:1、执行通过进程的创建和控制的设计来达到如下目的:2、加深对进程概念的理解,明确进程和程序的区别;3、进一步认识并发的概念,区别顺序执行和并发执行;4、分析进程争用临界资源的现象,学习解决进程互斥的方法;二、实验内容:(二)在WINDOWS环境下模拟实验:1、 用C语言编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、 同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、 按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程。三、实验实现:#include#include#include#define OK 1#define EVERFLOW -1#define PCBSIZE 10#define NULL 0void main()InitPcb(nullPcb);/给就绪队列分配空间 readyPcbtail=(PCB*)malloc(sizeof(PCB);readyPcb=readyPcbtail;readyPcbtail-id=0;readyPcbtail-priority=0;readyPcbtail-time=0;readyPcbtail-next=NULL;do/*创建程序控制界面*/printf(*n); printf(t1.创建一个PCB进程nt2.销毁运行PCB进程nt3.就绪队列打印输出nt4.退出系统n);printf(*n);scanf(%d,&on);/设置快关按钮switch(on)case 1: p=Create(nullPcb); InsertReadyPcb(readyPcb,p);break; /执行创建PCB进程case2:printf(请输入销毁进程的id值n);scanf(%d,&deleteId);Delete(deleteId,readyPcb,nullPcb);break;case 3: PrintPCB(readyPcb);break;case 4: exit(0);default:printf(请输入1-4之间的序号n);while(on!=4);void InitPcb(PCBList &nullPcb)/初始化空闲队列nullPcb=&pcb0;for(int i=0;inext;printf(请输入创建PCB的序号idn);scanf(%d,&pcbP-id);printf(请输入它创建的名字n);scanf(%s,&pcbP-name);printf(请输入它的优先级n);scanf(%d,&pcbP-priority);printf(请输入它运行所需的时间n);scanf(%d,&pcbP-time); pcbP-next=NULL;return pcbP;int Delete(int id,PCBList &readyPcb,PCBList &nullPcb)/销毁PCB进程 if(pcbT) while(pcbT) if(pcbT-id=id) pcbF-next=pcbT-next; pcbT-next=nullPcb; nullPcb=pcbT; printf(销毁成功n); return OK; pcbT=pcbT-next; pcbF=pcbF-next; if(!pcbT) printf(没有要删除的PCB进程n); else printf(没有要删除的PCB进程n); return OK;void PrintPCB(PCBList &readyPcb)/打印PCB就绪队列 printf(就绪队列中的进程,按照优先级排列的序号:n); printf(tt序号t名字t优先级t运行时间n); PCBList pcbP=readyPcb-next; while(pcbP) printf(tt%dt%st%dt%dn,pcbP-id,pcbP-name,pcbP-priority,pcbP-time); pcbP=pcbP-next; void InsertReadyPcb(PCBList &readyPcb,PCBList &pcb) PCBList pcbF=readyPcb; PCBList pcbT=readyPcb-next; if(pcbT) while(pcbT) if(pcbT-prioritypriority) pcb-next=pcbT; pcbF-next=pcb; printf(创建成功并将进程插入到就绪队列中了n); return; pcbT=pcbT-next; pcbF=pcbF-next; if(!pcbT) pcbF-next=pcb; else pcbF-next=pcb; printf(创建成功并将进程插入到就绪队列中了n); 实验结果实验报告二、单处理机系统的进程调度实验者:鞠智明 学号:201010510116 班级:计科(1)班 实验时间2012年12月一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度。二、实验内容:(二)在WINDOWS环境下模拟实验:1、先来先服务调度算法2、优先数调度算法;3、时间片轮法调度算法4、多级反馈队列轮转调度算法三、实验实现:#include stdio.h#include #include #define getpch(type) (type*)malloc(sizeof(type)#define NULL 0struct pcb /* 定义进程控制块PCB */char name10;char state;int super;int ntime;int rtime;struct pcb* link;*ready=NULL,*p;typedef struct pcb PCB;sort() /* 建立对进程进行优先级排列函数*/PCB *first, *second;int insert=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-link=p;second=NULL;insert=1;else /* 插入进程优先数最低,则插入到队尾*/first=first-link;second=second-link;if(insert=0) first-link=p;input() /* 建立进程控制块函数*/int i,num;clrscr(); /*清屏*/printf(n 请输入进程号?);scanf(%d,&num);for(i=0;iname);printf(n 输入进程优先数:);scanf(%d,&p-super);printf(n 输入进程运行时间:);scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /* 调用sort函数*/int space()int l=0; PCB* pr=ready;while(pr!=NULL)l+;pr=pr-link;return(l);disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/printf(n qname t state t super t ndtime t runtime n);printf(|%st,pr-name);printf(|%ct,pr-state);printf(|%dt,pr-super);printf(|%dt,pr-ntime);printf(|%dt,pr-rtime);printf(n);check() /* 建立进程查看函数 */PCB* pr;printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/disp(p);pr=ready;printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr=pr-link;destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/printf(n 进程 %s 已完成.n,p-name);free(p);running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/(p-rtime)+;if(p-rtime=p-ntime)destroy(); /* 调用destroy函数*/else(p-super)-;p-state=w;sort(); /*调用sort函数*/void main() /*主函数*/int len,h=0;char ch;input();len=space();while(len!=0)&(ready!=NULL)ch=getchar();h+;printf(n The execute number:%d n,h);p=ready;ready=p-link;p-link=NULL;p-state=R;check();running();printf(n 按任一键继续.);ch=getchar();printf(nn 进程已经完成.n);ch=getchar();实验结果实验报告三、基本存储器管理实验者:鞠智明学号:201010510116 班级:计科(1)班实验时间2012年12月一、实验目的:通过进程的创建和控制的设计来达到如下目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。二、实验内容: 从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。三、实验实现:#include#includestruct linkkint size;int addr;struct linkk *next;struct jobtabint jno;int size;int addr;int flag;struct linkk *PL,*p,*q,*p1;struct jobtab tab20;int l,m,n,t,addr,length;void printlink()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;void printtab()int i; int flag=0;for (i=0;i20&flag=0;i+)if (tabi.flag=1)flag=1;if (flag=0)printf(n 无进程!);return;printf(n 进程编号 进程起始地址 进程内存大小n);printf(-n);for (i=0;isize=l)tabn.addr=q-addr;p1=q;if (p1=PL) PL=q-next;else p-next=q-next;free(p1);return;if (q-sizel)tabn.addr=q-addr;q-size=q-size-l; q-addr=q-addr+l;return;p=q; q=q-next;tabn.flag=0;printf(n 没有内存剩余!n);return;void freem()printf(n 输入进程编号:); scanf(%d,&n);if(tabn.flag=0)printf(n 不是该进程!);return;addr=tabn.addr; length=tabn.size;tabn.flag=0;q=PL;if (q=NULL)|(addr+lengthaddr)p1=(struct linkk *)malloc(sizeof(struct linkk);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 (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+lengthaddr)p1=(struct linkk *)malloc(sizeof(struct linkk);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=(struct linkk *)malloc(sizeof(struct linkk);p1-addr=addr; p1-size=length; p1-next=NULL;p1-next=p1;return;main()PL=(struct linkk *)malloc(sizeof(struct linkk);PL-addr=0; PL-next=NULL;printf(n输入内存大小:);scanf(%d,&n); PL-size=n;for(int i=0;i20;i+)tabi.jno=i;tabi.flag=0;t=0;doprintf(n-n);printf( 1-分配内存 2-释放内存n);printf( 3-链接进程号 4-输出_TAB n);printf( 5-Quitn);printf(n-n);printf( Select bb);scanf(%d,&m);switch(m)case 1: allocm();break;case 2: freem();break;case 3: printlink();break;case 4: printtab();break;case 5: t=1;while (!t);实验结果实验报告四、请求分页存储管理(虚拟存储)实验者:鞠智明 学号:201010510116 班级:计科(1)班 实验时间2012年12月一、实验目的:通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,则需求有请求调入的功能将其调入。假如此时若内存没有空白物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种。二、实验内容:模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一1、先进先出算法2、最近最久算法3、CLOCK算法三、实验实现:#include #include using namespace std; const int MaxNum=320;/指令数 const int M=5;/内存容量 int PageOrderMaxNum;/页面请求 int SimulateMaxNumM;/页面访问过程 int PageCountM,LackNum;/PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数 float PageRate;/命中率 int PageCount132; bool IsExit(int i)/FIFO算法中判断新的页面请求是否在内存中 bool f=false; for(int j=0;jM;j+) if(Simulatei-1j=PageOrderi)/在前一次页面请求过程中寻找是否存在新的页面请求 f=true; return f; int IsExitLRU(int i)/LRU算法中判断新的页面请求是否在内存中 int f=-1; for(int j=0;jM;j+) if(Simulatei-1j=PageOrderi) f=j; return f; int Compare()/LRU算法找出内存中需要置换出来的页面 int p,q; p=PageCount0; q=0; for(int i=1;iM;i+) if(pPageCounti) p=PageCounti; q=i; return q; void Init() /初始化页框 for(int k=0;kMaxNum;k+) int n=rand()%320;/随机数产生320次指令 PageOrderk=n/10;/根据指令产生320次页面请求 for(int i=0;iMaxNum;i+)/初始化页面访问过程 for(int j=0;jM;j+) Simulateij=-1; for(int q=0;qM;q+)/初始化最久未使用数组 PageCountq=0; void OutPut()/输出 int i,j; cout页面访问序列:endl; for(j=0;jMaxNum;j+) coutPageOrderj ; coutendl; cout页面访问过程(只显示前10个):endl; for(i=0;i10;i+) for(j=0;jM;j+) if(Simulateij=-1) cout ; else coutSimulateij ; coutendl; cout缺页数= LackNumendl; cout命中率= PageRateendl; cout-endl; void FIFO()/FIFO算法 int j,x=0,y=0; LackNum=0, Init(); for(j=0;jM;j+)/将前五个页面请求直接放入内存中 for(int k=0;k=j;k+) if(j=k) Simulatejk=PageOrderj; else Simulatejk=Simulatej-1k; /LackNum+; for(x=M;xMaxNum;x+) for(int t=0;tM;t+)/先将前一次页面访问过程赋值给新的页面访问过程 Simulatext=Simulatex-1t; if(!IsExit(x)/根据新访问页面是否存在内存中来更新页面访问过程 LackNum+; Simulatexy%M=PageOrderx; y+; PageRate=1-(float)LackNum/(float)MaxNum);/算出命中率 OutPut(); void LRU()/LRU算法 int j,x=0,y=0; LackNum=0, Init(); for(j=0;jM;j+)/将前五个页面请求直接放入内存中 for(int k=0;k=j;k+) PageCountk+; if(j=k) Simulatejk=PageOrderj; else Simulatejk=Simulatej-1k; LackNum+; for(x=M;xMaxNum;x+) for(int t=0;tM;t+)/先将前一次页面访问过程赋值给新的页面访问过程 Simulatext=Simulatex-1t; int p=IsExitLRU(x); if(p=-1)/根据反回的p值来更新页面访问过程 int k; k=Compare(); for(int w=0;wM;w+) if(w!=k) PageCountw+; else PageCountk=1; Simulatexk=PageOrderx; LackNum+; else for(int w=0;wM;w+) if(w!=p) PageCountw+; else PageCountp=1; PageRate=1-(float)LackNum/(float)MaxNum);/算出命中率 OutPut(); /最近最不常用调度算法(LFU) void LFU() void NUR() void YourChoice(int choice) switch(choice) case 1: cout-endl; coutFIFO算法结果如下:endl; FIFO() break; case 2: cout-endl; coutLRU算法结果如下:endl; LRU(); break; case 3: cout-endl; coutLFU算法结果如下:endl; /LFU(); break;case 4: cout-endl; coutNUR算法结果如下:endl; /NUR(); break; case 5: break; default: cout重新选择算法:1-FIFO 2-LRU 3-LFU 4-NUR 5-退出 choice; YourChoice(choice); void main() int choice,i=1; while(i) cout请选择算法:1-FIFO 2-LRU 3-LFU 4-NUR 5-退出 choice; if(choice=5) i=0; else YourChoice(choice); 实验结果实验报告五、死锁的避免实验者:鞠智明学号:201010510116 班级:计科(1)班 实验时间2012年12月一、实验目的:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、实验内容:利用银行家算法来避免死锁的发生三、实验实现:#include string.h #include iostream using namespace std; #define FALSE 0 #define TRUE 1 #define W 10 #define R 20 int M ; /总进程数 int N ; /资源种类 int ALL_RESOURCEW;/各种资源的数目总和 int MAXWR; /M个进程对N类资源最大资源需求量 int AVAILABLER; /系统可用资源数 int ALLOCATIONWR; /M个进程已经得到N类资源的资源量 int NEEDWR; /M个进程还需要N类资源的资源量 int RequestR; /请求资源个数 void showdata() /函数showdata,输出资源分配情况 int i,j; cout各种资源的总数量(all):endl; cout ; for (j=0;jN;j+)cout资源j: ALL_RESOURCEj; coutendlendl; cout系统目前各种资源可用的数为(available):endl; cout ; for (j=0;jN;j+)cout资源j: AVAILABLEj; coutendlendl; cout各进程还需要的资源量(need):endlendl; cout资源0资源1资源2endl; for (i=0;iM;i+) for (i=0;iM;i+) cout进程pi: ; for (j=0;jN;j+)coutNEEDij ; coutendl; coutendl; cout 各进程已经得到的资源量(allocation): endlendl; cout资源0资源1资源2endl; for (i=0;iM;i+) cout进程pi: ; for (j=0;jN;j+)coutALLOCATIONij ; coutendl; coutendl; void changdata(int k) /函数changdata,改变可用资源和已经拿到资源和还需要的资源的值 int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj; void rstordata(int k) /函数rstordata,恢复可用资源和已经拿到资源和还需要的资源的值 int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj; int chkerr(int s) /函数chkerr,检查是否安全 int WORK,FINISHW; int i,j,k=0; for(i=0;iM;i+)FINISHi=FALSE; for(j=0;jN;j+) WORK=AVAILABLEj; i=s; do if(FINISHi=FALSE&NEEDij=WORK) WORK=WORK+ALLOCATIONij; FINISHi=TRUE; i=0; else i+; while(iM); for(i=0;iM;i+) if(FINISHi=FALSE) coutendl; cout系统不安全! 本次资源申请不成功!endl; coutendl; return 1; coutendl; cout 经安全性检查,系统安全,本次分配成功。endl; coutendl; return 0; void bank() /银行家算法 int i=0,j=0; char flag=Y; while(flag=Y|flag=y) i=-1; while(i=M) cout 请输入需申请资源的进程号(从P0到PM-1,否则重输入!):; couti; if(i=M)cout 输入的进程号不存在,重新输入!endl; cout 请输入进程Pi申请的资源数:endl; for (j=0;jN;j+) cout 资源jRequestj; if(RequestjNEEDij) /若请求的资源数大于进程还需要i类资源的资源量j cout 进程Pi申请的资源数大于进程Pi还需要j类资源的资源量!; cout申请不合理,出错!请重新选择!endlAVAILABLEj) /若请求的资源数大于可用资源数 cout 进程Pi申请的资源数大于系统可用j类资源的资源量!; cout申请不合理,出错!请重新选择!endlendl; flag=N; break; if(flag=Y|flag=y) changdata(i); /调用changdata(i)函数,改变资源数 if(chkerr(i) /若系统安全 rstordata(i); /调用rstordata(i)函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 寄卖行汽车转让合同范本
- 大巴车安全协议合同范本
- 垃圾池施工协议合同范本
- 山地租赁村委合同协议书
- 历史文化名城苏州迈向旅游国际化的发展路径与策略探析
- 2025吉林辽源市东丰县卫生系统事业单位招聘(含专项招聘普通高校毕业生)30人备考试题及答案解析
- 2025广东广州中山大学附属口腔医院工勤人员招聘笔试备考题库及答案解析
- 2025福建福州市闽江之心江北运营管理有限公司招聘2人笔试模拟试题及答案解析
- 2025福建南平市数字产业发展有限公司正式员工招聘6人考试备考试题及答案解析
- 2025甘肃省公路交通建设集团G312线傅家窑至苦水公路收费运营人员招聘71人笔试模拟试题及答案解析
- 初中数学问题解决策略 特殊化教案2024-2025学年北师大版(2024)七年级数学下册
- 进度计划跟踪管理制度
- 医用物品洗涤消毒供应中心项目可行性研究报告写作模板-备案审批
- 2025年初中语文名著阅读《林海雪原》阅读题及答案
- DB36T-莲鳖种养结合技术规程
- 汽车维护与保养冷却液的检测与更换课件
- 成人肠内营养支持护理
- 2024秋新北师大版数学七年级上册教学课件 ☆ 问题解决策略:直观分析
- 8. 选择健康的生活方式(导学案)(解析版)
- DB61T 5113-2024 建筑施工全钢附着式升降脚手架安全技术规程
- 小学生育儿心得课件
评论
0/150
提交评论