




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告时间:2013年11月19日2013年12月11日地点:科技楼423室班级:计科班学号:姓名: 电话:上交时间:2013年12月11日注意:所有程序都应有一定的注释说明,用VC实现,附上实验结果。实验1:进程管理要求:编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;撤销某个进程。提示:1、进程状态简单处理为:0为不在内存,1为在内存,2为阻塞,3为挂起。2、撤销进程指将进程的状态从运行变为阻塞。3、程序的结构可以处理为在主函数中用switch语句调用各种表示进程管理功能的函数。#include iostream.h#include windows.h/#define N 3typedef structint ID;int PRIORITY;int CPUTIME;int ALLTIME;int STARTBLOCK;int BLOCKTIME;int STATE;/0-运行 1-阻塞 2-就绪 3-结束 4-未到达int REACH;int TIME;PROCESS;void textcolor (int color) SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color );void main()int i,time,max,l,l1,time1,flag=0,total=0,N,server10,sum=0;PROCESS pro10;textcolor(13);cout注意:本程序中状态代表如下endl0-运行 1-阻塞 2-就绪 3-结束 4-未到达endlendl;textcolor(15);coutN;couttime;cout请输入各进程初始状态:endl;coutID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIMEendl;for(i=0;iproi.IDproi.PRIORITYproi.REACH;cinproi.ALLTIMEproi.STARTBLOCKproi.BLOCKTIME;serveri=proi.ALLTIME;if(proi.REACH=0) proi.STATE=0;else proi.STATE=4;docoutendl当前时刻为:total;textcolor(12);coutendl=各进程状态为=endl;textcolor(15);coutID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEendl;for(i=0;iN;i+)coutproi.ID proi.PRIORITY proi.CPUTIME ;coutproi.ALLTIME proi.STARTBLOCK proi.BLOCKTIME proi.STATE;coutendl;total+=time;for(i=0;iN;i+)if(proi.STATE=4&proi.REACHtotal)proi.STATE=1;for(i=0;iN;i+)time1=proi.ALLTIME;if(proi.STATE=0)if(proi.ALLTIME=time)/proi.CPUTIME+=time1;proi.ALLTIME=0;proi.STATE=3;proi.TIME=total-time+time1;else/proi.CPUTIME+=time;proi.ALLTIME-=time;proi.STARTBLOCK-;if(proi.STARTBLOCK=0)proi.STATE=1;proi.BLOCKTIME=time1;proi.STARTBLOCK=time1;proi.PRIORITY-=3;proi.TIME=total;if(proi.STATE=1)proi.BLOCKTIME-;if(proi.BLOCKTIME=0) proi.STATE=2;proi.TIME=total;if(proi.STATE=2)/proi.CPUTIME+=time;proi.PRIORITY+;proi.TIME=total;max=-100;l1=-1;l=-1;for(i=0;imax&(proi.STATE=0|proi.STATE=2)l=i;max=proi.PRIORITY;if(proi.STATE=0) l1=i;if(l!=-1&l!=l1) prol.STATE=0;if(l1!=-1) prol1.STATE=2;flag=0;for(i=0;iN;i+)if(proi.STATE!=3)flag=1;break;if(flag=0) break;while(1);coutendl当前时刻:total;textcolor(12);coutendl=各进程状态为=endl;textcolor(15);coutID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEendl;for(i=0;iN;i+)coutproi.ID proi.PRIORITY proi.CPUTIME ;coutproi.ALLTIME proi.STARTBLOCK proi.BLOCKTIME proi.STATE;coutendl;coutendl各进程运行结束!endl;cout进程号 到达时间 结束时间 周转时间 带权周转时间endl;textcolor(10);for(i=0;iN;i+)cout proi.ID proi.REACH proi.TIME proi.TIME-proi.REACH (float)(proi.TIME-proi.REACH)/serveriendl;sum+=proi.TIME-proi.REACH;cout平均周转时间为:(float)sum/Nendl;textcolor(15);实验2:进程调度要求:1、 设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。2、 建立进程就绪队列。3、 编制两种进程调度算法:优先权调度(实现动态优先级)和时间片轮转调度。提示:1、 假设利用两种算法对五个进程进行调度,每个进程有运行、就绪、阻塞三种状态,初始状态为就绪态。2、 为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初值由用户给定。3、 在优先权调度算法中,优先数可以先取50,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在时间片轮转调度算法中,采用固定时间片,即每执行一次进程,该进程的执行时间片数为已执行了2个单位,这时CPU时间片数加2,进程还需要的时间片数减2,并将该进程排列到就绪队列的队尾。4、 对于优先数一致的情况,采用FIFO策略解决。#include#includeusing namespace std;class Processpublic: string ProcessName; / 进程名字 int Time; / 进程需要时间 int leval; / 进程优先级 int LeftTime; / 进程运行一段时间后还需要的时间;/void Copy ( Process proc1, Process proc2); / 把proc2赋值给proc1void Sort( Process pr, int size) ; / 此排序后按优先级从大到小排列void sort1(Process pr, int size) ; / 此排序后按需要的cpu时间从小到大排列void Fcfs( Process pr, int num, int Timepice); / 先来先服务算法void TimeTurn( Process process, int num, int Timepice); / 时间片轮转算法void Priority( Process process, int num, int Timepice); / 优先级算法/void main() int TimePice; int num; cout *创建进程*nendl; coutnum; const int Size =30; Process processSize ; for( int i=0; i num; i+) string name; int CpuTime; int Leval; coutn 输入第 i+1 个进程的名字、 运行时间和优先级 : name; cin CpuTime Leval; processi.ProcessName =name; processi.Time =CpuTime; processi.leval =Leval; coutendl; int a; coutendl; coutTimePice; coutn *选择调度算法:*nendl; cout*endl; cout* 1: FCFS 2: 时间片轮换 3: 优先级调度 4: 最短作业优先 *endl; cout* a; for ( int k=0;knum;k+) processk.LeftTime=processk.Time ;/对进程剩余时间初始化 cout / 说明: 在本程序所列进程信息中, 优先级一项是指进程运行后的优先级 ! ; coutendl; coutendl; if(a=1) Fcfs(process,num,TimePice); else if(a=2) TimeTurn( process, num, TimePice);else if(a=3) Sort( process, num); Priority( process , num, TimePice); else / 最短作业算法,先按时间从小到到排序,再调用Fcfs算法即可 sort1(process,num); Fcfs(process,num,TimePice); void Copy ( Process proc1, Process proc2) proc1.leval =proc2.leval ; proc1.ProcessName =proc2.ProcessName ; proc1.Time =proc2.Time ;void Sort( Process pr, int size) /以进程优先级高低排序 for( int i=1;i0 & temp.levalsize/2;d-) Process temp; temp=pr d; pr d = pr size-d-1; pr size-d-1=temp; void sort1 ( Process pr, int size) / 以进程时间从低到高排序/ 直接插入排序 for( int i=1;i0 & temp.Time prj-1.Time ) prj = prj-1; j-; prj = temp; / 先来先服务算法的实现void Fcfs( Process process, int num, int Timepice) while(true) if(num=0) cout 所有进程都已经执行完毕 !nendl; exit(1); if(process0.LeftTime=0) process0.LeftTime=0; cout 进程 process0.ProcessName 已经执行完毕 !nendl; for (int i=0;inum;i+) processi=processi+1; num-; else if(processnum-1.LeftTime=0) processnum-1.LeftTime=0; cout 进程 processnum-1.ProcessName 已经执行完毕 !nendl; num-; else coutendl; process0.LeftTime=process0.LeftTime- Timepice; if(process0.LeftTime=0) process0.LeftTime=0; process0.leval =process0.leval-1; cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout process0.ProcessName process0.Time ; coutprocess0.LeftTime process0.leval 运行endl; for(int s=1;snum;s+) if(processs.LeftTime=0) processs.LeftTime=0;cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout processs.ProcessName processs.Time ; coutprocesss.LeftTime processs.leval 等待 endl; ; coutendl; system( pause); coutendl; / 时间片轮转调度算法实现void TimeTurn( Process process, int num, int Timepice) while(true) if(num=0) cout 所有进程都已经执行完毕 !nendl; exit(1); if(process0.LeftTime=0) process0.LeftTime=0; cout 进程 process0.ProcessName 已经执行完毕 !nendl; for (int i=0;inum;i+) processi=processi+1; num-; if( processnum-1.LeftTime =0 ) processnum-1.LeftTime=0; cout 进程 processnum-1.ProcessName 已经执行完毕! n 0) coutendl; /输出正在运行的进程 process0.LeftTime=process0.LeftTime- Timepice; if(process0.LeftTime0) process0.LeftTime=0; process0.leval =process0.leval-1; cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout process0.ProcessName process0.Time ; coutprocess0.LeftTime process0.leval 运行endl; for(int s=1;snum;s+) if(processs.LeftTime0) processs.LeftTime=0;cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout processs.ProcessName processs.Time ; coutprocesss.LeftTime processs.leval; if(s=1) cout 就绪 endl; else cout 等待 endl; Process temp; temp = process0; for( int j=0;jnum;j+) processj = processj+1; processnum-1 = temp; else system( pause); coutendl; system( pause); coutendl; / 优先级调度算法的实现void Priority( Process process, int num, int Timepice) while( true) if(num=0) cout 所有进程都已经执行完毕!nendl; exit(1); if(process0.LeftTime=0) process0.LeftTime=0; cout 进程 process0.ProcessName 已经执行完毕! nendl; for( int m=0;mnum;m+) processm = processm+1; /一个进程执行完毕后从数组中删除 num-; / 此时进程数目减少一个 if( num!=1 & processnum-1.LeftTime =0 ) processnum-1.LeftTime=0; cout 进程 processnum-1.ProcessName 已经执行完毕! n 0) coutendl; /输出正在运行的进程 process0.LeftTime=process0.LeftTime- Timepice; if(process0.LeftTime0)process0.LeftTime=0; process0.leval =process0.leval-1;cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout process0.ProcessName process0.Time ; coutprocess0.LeftTime process0.leval 运行endl; / 输出其他进程 for(int s=1;snum;s+) if(processs.LeftTime0)processs.LeftTime=0;cout进程名字 共需占用CPU时间 还需要占用时间 优先级 状态 endl; cout processs.ProcessName processs.Time ; coutprocesss.LeftTime processs.leval ; if(s=1) cout 就绪 endl; else cout 等待 endl; / else Sort(process, num); coutendl; system( pause); coutendl; / while实验3:银行家算法要求:编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。某系统有A、B、C、D4类资源共5个进程(P0、P1、P2、P3、P4)共享,各进程对资源的需求和分配情况如下表所示:进程已占资源最大需求数ABCDABCDP000000012P110001750P213542356P306320652P400140656现在系统中A、B、C、D4类资源分别还剩1、5、2、0个,请按银行家算法回答下列问题:1)现在系统是否处于安全状态?2)如果现在进程P1提出需要(0、4、2、0)个资源的请求,系统能否满足它的请求?提示:1、 假设进程P提出请求Requesti,则银行家算法按如下步骤进行判断。Step1:如果Requesti=Needi,则转向Step2;否则,出错。Step2:如果Requesti=Availablei,则转向Step3;否则,出错。Step3:系统试探分配相关资源,修改相关数据: Availablei= Availablei-Requesti, Allocationi=Allocationi+Requesti, Needi=Needi-RequestiStep4:系统执行安全性检查,如安全,则分配成立;否则试探性分配资源作废,系统恢复原状,进程进入等待状态。2、 利用安全性检查算法检查根据银行家算法进行资源分配后系统状态是否处于安全状态。具体算法如下:Step1:设置两个工作向量work=Available,finish=false;Step2:从进程集合中找到一个满足下述条件的进程; finish=false, Need=work若能找到该进程,则执行Step3,否则,执行Step4。Step3:假设上述找到的进程获得资源,可顺利执行,直至完成,从而释放资源,做如下修改。 work=work+Allocation, finish=true, goto Step2;Step4:如果所有进程的finish=true,则表示该系统安全;否则系统不安全。#include#include#include#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资源的最大数为100void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ;/输出分配资源 coutendl; cout Max Allocation Needendl; cout进程名 ; for(j=0;j3;j+) for(i=0;iN;i+) coutnamei ; cout ; coutendl; for(i=0;iM;i+) cout i ; for(j=0;jN;j+) coutMaxij ; cout ; for(j=0;jN;j+) coutAllocationij ; cout ; for(j=0;jN;j+) coutNeedij ; coutendl; int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;iM;i+) apply=0; for(j=0;jN;j+) if (Finishi=False&Needij=Workj) apply+; if(apply=N) for(m=0;mN;m+) Workm=Workm+Allocationim;/变分配数 Finishi=True; tempk=i; i=-1; k+; flag+; for(i=0;iM;i+) if(Finishi=False) cout系统不安全endl;/不成功系统不安全 return -1; cout系统是安全的!endl;/如果安全,输出成功 cout分配的序列:;for(i=0;iM;i+)/输出运行进程数组 couttempi; if(iM-1) cout; coutendl; return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程 i 申请的资源:endl;for(j=0;jN;j+) coutnamejRequestj;/输入需要申请的资源 for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 cout进程 i申请的资源大于它需要的资源; cout 分配不合理,不予分配!Avaliablej)/判断申请是否大于当前资源,若大于则 /出错 cout进程i申请的资源大于系统现在可利用的资源; cout 分配出错,不予分配!endl; ch=n; break; if(ch=y) changdata(i);/根据进程需求量变换资源 showdata();/根据进程需求量显示变换后的资源 safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+) coutnameflag; coutAvaliableflag+;showdata();safe();void delresources()/删除资源char ming;int i,flag=1;coutming;for(i=0;iN;i+) if(ming=namei) flag=0; break; if(i=N) cout该资源名称不存在,请重新输入:;while(flag);for(int j=i;jN-1;j+) namej=namej+1; Avaliablej=Avaliablej+1; N=N-1;showdata();safe();void changeresources()/修改资源函数cout系统目前可用的资源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl;cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2;cout经修改后的系统可用资源为endl;for (int k=0;kN;k+) coutnamek:Avaliablekendl;showdata();safe();void addprocess()/添加作业 int flag=M;M=M+1;cout请输入该作业的最打需求量Maxendl;for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函数 int i,j,number,choice,m,n,flag;char ming;cout*资源管理系统的设计与实现*endl;coutn;N=n;for(i=0;in;i+) cout资源i+1ming; namei=ming; coutnumber; Avaliablei=number;coutendl;coutm;M=m;cout请输入各进程的最大需求量(m*n矩阵)Max:endl;for(i=0;im;i+) for(j=0;jMaxij;do flag=0; cout请输入各进程已经申请的资源量(m*n矩阵)Allocation:endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout申请的资源大于最大需求量,请重新输入!n;while(flag); showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全 while(choice) cout*银行家算法演示*endl; cout 1:增加资源 endl; cout 2:删除资源 endl; cout 3:修改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南省大理州洱源县消防救援局招聘政府专职消防员(4人)笔试模拟试题及答案解析
- 2025浙江湖州雷博医院管理有限公司招聘1人考试参考题库附答案解析
- 2025重庆铜梁区铜梁区小林镇公益性岗位招聘3人公告考试参考题库附答案解析
- 2025贵州遵义市应急救援大队有限责任公司招聘10人笔试参考题库附答案解析
- 2025年崇左市中小学教师公开招聘(第三批)动态及温馨提醒考试备考试题及答案解析
- 2025广东中山市东凤镇公安分局大厨招聘1人笔试模拟试题及答案解析
- 2025年漯河市中心医院(高水平医院) 第二批公开招聘工作人员28人笔试备考试题及答案解析
- 2025秋季国家超级计算天津中心招聘笔试参考题库附答案解析
- 2025秋季河南洛阳市航空实验学校小学部招聘教师考试参考题库附答案解析
- 2025四川长虹民生物流股份有限公司招聘质量主管岗位1人笔试参考题库附答案解析
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- Unit 8 Lets celebrate!教学设计2024-2025学年牛津译林版英语七年级上册
- 医院行政办公室主任职责
- 文言合集(1):120个文言实词小故事(教师版+学生版)
- 教科版(2024)小学科学一年级上册(全册)教案及反思(含目录)
- 争做“四有好老师”-当好“四个引路人”
- 【课件】2025届高三生物一轮复习备考策略研讨
- 中级会计师《经济法》历年真题及答案
- 高职院校高水平现代物流管理专业群建设方案(现代物流管理专业群)
- 外研版高中英语词汇表(全套)
- 共同风险投资协议书
评论
0/150
提交评论