一个小型的操作系统设计与实现_第1页
一个小型的操作系统设计与实现_第2页
一个小型的操作系统设计与实现_第3页
一个小型的操作系统设计与实现_第4页
一个小型的操作系统设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、南通大学计算机科学与技术学院操作系统课程设计报告/逐术、1912/专业:计嵌151学生姓名:王志宏学号:1513052018时间:2017/6/28设计一个小型的操作系统设计要求将本学期三次的实验集成实现:1,中断处理2 .作业调度3 .PV原语4 .死锁5 .页面替换6,磁盘调度(一)设计流程图主流程图1,中断处理模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。计算机系统工作过程中,若出现中断事件,硬件就把它记录在中断寄存器中。中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成一1II0处理器每执行一条指令后,必须查中断寄存器,当中断寄

2、存器内容不为一0八时,说明有中断事件发生。硬件把中断寄存器内容以及现行程序的断点存在主存的固定单元,且让操作系统的中断处理程序占用处理器来处理出现的中断事件。操作系统分析保存在主存固定单元中的中断寄存器内容就可知道出现的中断事件的性质,从而作出相应的处理。本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令。每模拟一条指令执行后,从键盘读入信息且分析,当读入信息=0时,表示无中断事件发生,继续执行指令;当读入信息=1时,表示发生了时钟中断事件,转时钟中断处理程序6 .作业调度1)先来先服务FCFS开始初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队

3、调度数组中首个进程,并让数组中的下一位移到首位计算并打印进程的完成时刻、周转时间、带权周转时间其中:周转时间=完成时间-到达时间带权周转时间=周转时间/服务时间<)更改计时器的当前时间,即下一刻进程的开始时间当前时间=前一进程的完成时间+其服务时间结束先来先服务算法流程7 .PV原语1)哲学家吃通心面问题哲学家吃通心面:在这道题目里,每把叉子必须互斥使用,当一位哲学家吃通心面之前必须执行两个P操作,获得自己左右两边的叉子,在吃完通心面后必须执行两个V操作,放下叉子。4.死锁1)银行家算法M畸他.11iOs理由咕京社肥UUW”15.页面替换1)先进先出FIFOFIFO淘汰算法流程2)LRU

4、LRU淘汰算法流程6.磁盘调度1)先来先服务算法FCFS(二)实现原理主界面设计一个框架分别去链接处理机管理、存储器管理和缺页调度相关的程序操作系统课程设计1.中断处理2.作业调度3,死锁4.页面替换5,磁盘调度1,中断L中断处理工作业调度3.死锁4页面普模工啜盘滔度L开始2返回开始菜单时回:Jun2S屋:的士32017指.一.评1表示中断.成一±或一个一小完元-S兀完一元-门表示中断,*fl表示中断,辛(1/不中断,诔示无中断】:1口表示无中断):0旗示无中断J:2.作业调度1)先来先服务FCFS(一)任务先来先服务的调度算法实现处理机调度。(二)要求1 .实现对FCFSB法的模拟

5、实现2 .计算出该算法的平均作业周转时间、平均带权作业周转时间(三)原理按作业到达CPU寸间先后顺序进行非剥夺式调度,先到达CPU的作业先被执行。(四)数据结构structtask_struct(.charname;/*intnumber;/*floatcome_time;/*floatrun_begin_time;/*floatrun_time;/*floatrun_end_time;/*intpriority;/*intorder;/*intrun_flag;/*tasksMAX;intfcfs()/*先来先服务算法*/进程名称*/进程编号*/到达时间*/开始运行时间*/运行时间*/运行结

6、束时间*/优先级*/运行次序*/调度标志*/进程名链接指针到达时间估计运行时问进程状态进程控制块结构(五)实现方法建立一个链表按照到达CPU的时间从小到大排列,只需从第一个作业(头结S盘市BC均均FF到达时间时间33.周转时间:运行时间289333335.74074开始时间53342停止时I可334245运行次序周转时间128235337点)依次调度到最后一个作业(尾结点)(六)运行界面测试数据:作业名到达时间运行时间A028B09C03L九米元服劣舁法2.返回叶服来执行FCFSB法如下:L中断处理2.作业调度3.死锁4.页面替换5.磁盘调度3 .死锁假定本系统中的各个所需资源均是独占型资源,

7、在进程运行的过程中不再释放,故只需要遍历链表将各个进程中所需的资源统计出来,只要不大于系统中预设的即可,一旦进程所需的资源大于系统中的最大量,给予用户选择kill一进程,已达到释放资源的目的。死锁检测函数:voidsisuo()死锁解除函数:voidsafe()翳余程庠14-可73g2520231oO1Og232Q的的求源42013.请资起家发请AA00212k照0-4按371q-i程目申请的资源大于需求值字州K吗?(广学峙口n-终止):HIaLAiLAu-Ar4 .缺页调度1)先进先出FIFO(一)任务采用先进先出FIFO算法实现分页管理的缺页调度,并输出每次调入调出的页号和运行结果。(二)

8、要求1 .实现对FIFO算法的模拟实现2 .输出每次执行的结果。(三)原理基于程序总是按线性顺序来访问物理空间这一假设,总是淘汰最先调入主存的页面,即淘汰在主存中驻留时间最长的页面,认为驻留时间最长的页不再使用的可能性较大。(四)数据结构voidFIFO()intlength;intfifo100=0;intpageLength;intfifoPage100=0;*先进先出算法inti,j;cout<<"*"<<endl;pageLength=3;length=9;for(i=1;i<=length;i+)intflag=0;for(j=1;j

9、<=pageLength;j+)if(fifoi=fifoPagej)flag=1;j=pageLength+1;elseif(fifoPagej=0)fifoPagej=fifoi;j=pageLength+1;flag=1;if(flag=1)elsef淘汰"<<fifoPage1<<endl;cout<<"for(j=1;j<=pageLength;j+)fifoPagej=fifoPagej+1;fifoPagepageLength=fifoi;)(五)实现方法当采用先进先出算法时,用一个数组构成先进先出队列,数组中各

10、个元素为进程已在主存的页号,其队列头指针初始化为0.假设分配给每个进程的内存块数固定。当队列满需淘汰时,淘汰最先进入主存的一页。若该页修改过,还有存入磁盘。然后要把当前访问的页装入该块,并修改页表和存储分块表的对应标志。(六)运行界面测试数据:页表长度:9;页框长度:3;页面请求数列:4,4,3,5,1,1,2,3,2执行先进先出FIFO算法结果如下:2) LRU(一)任务采用先进先出LRU算法实现分页管理的缺页调度,并输出每次调入调出的贡号和运行结果。(二)要求1 .实现对LRU算法的模拟实现2 .输出每次执行的结果。(三)原理最近最少使用页面替换算法淘汰的页面是在最近一段时间内最久未被访问

11、的那一页,它是基于程序局部性原理来考虑的,认为那些刚被使用过的页面可能还有立即被使用,而那些在较长时间内未被使用的页面可能不会立即使用。在分页虚拟存储系统中,当硬件发出缺页中断后转操作系统处理缺页中断。如果主存中已无空闲块,可采用LRU算法进行缺页处理。(四)数据结构voidLRU()(intlength;intlru100=0;intpageLength;intlruPage100=0;inti,j;cout<<"*最近最少使用LRU算法*"<<endl;pageLength=3;length=9;for(i=1;i<=length;i+)i

12、ntflag=0;for(j=1;j<=pageLength;j+)if(lrui=lruPagej)for(intcc=j;cc>0;cc-)lruPagecc=lruPagecc-1;lruPage1=lrui;flag=1;j=pageLength+1;elseif(lruPagej=0)for(intvv=j;vv>0;vv-)lruPagevv=lruPagevv-1;lruPage1=lrui;j=pageLength+1;flag=1;if(flag=1)else淘汰cout<<""<<lruPagepageLengt

13、h<<endl;for(j=pageLength;j>0;j-)lruPagej=lruPagej-1;lruPage1=lrui;(五)实现方法当采用LRU算法时,用一个数组构成堆栈,堆栈中各个元素为进程已在主存的页号,为了进行页面置换,可设置一个栈指针,初始化为0.假定分配给每个进程的内存块数固定不变。当队列满需淘汰时,操作系统选择栈底元素淘汰,其他元素向下移一个位置,将新调入页放栈指针指示的栈顶。当访问的页在栈中时,还应调整页从当前位置到栈顶。(六)运行界面测试数据:页表长度:9;页框长度:3;页面请求数列:2,3,5,1,5,5,4,4,3执行最近最少使用LRU算法结

14、果如下:5.磁盘调度1)先来先服务算法FCFS这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。5.磁盘调度L中断处理2.作业调度品死锁4.页面替换51,先来先服务2.返回开始菜单1请输入磁道序列(0结束);1256792167350你输入的磁道序列为:125679216735磁盘清来序列为;125679216

15、735董勤虺演的碇置号:11磁盎扫描序列为:125679216735平均寻道长度2.90909(三)总结与体会通过本次课程设计让我对于图形界面设计有了一定的思路和看法,同时我对先来先服务、时间片轮转、首次适应算法、最佳适应算法、先进先出和最近最少使用算法有了更详尽的认识。在编程的过程中发现会用到大量的指针,用指针来操作大量的数据比较方便,但最后应该记得释放资源。从这次实验中我发现我对于C+掌握也有所不足,程序经过了多次修改才得以完善,在以后应该注重编程方面的训练。此外我还更深入的理解了各个进程调度算法,及实现过程。在编写程序时查询了很多资料,间接提高了我的搜索能力。在此次课程设计过程中,对进程

16、的相关知识有了一定的加深。特别是对进程的进程控制块的存在和价值有了更进一步的认识。在编写程序的过程之中,对进程自身信息的设计和管理以及调度的算法都有助于对书本知识的理解和掌握。特别是设计先来先服务调度算法和时间片轮转调度算法的时候,对进程的调度算法有了更好的深入理解。对进程管理中的等待队列,就绪队列,时间片等概念有了更深刻的印象。在设计此模拟操作系统的课设中,也加深了对C+知识的把握。解决了一些以往在编程中遇到了困难。通过此次的课程设计,不仅提高了对操作系统的认知,也在同时提高了编程的能力,加强了实践。另外,我觉得此次课程设计虽然主要问题是在编程上,但是经过不断的去调试,还是成功的调试了出来。

17、但是这几个程序用了多天的时间进行分析和修改,虽然出现了不少问题,但收获颇多!源代码:#include<iostream>#include<cstring>#include<cstddef>#include<windows.h>#include<time.h>#include<string>#include<assert.h>#include<stdio.h>#include<stdlib.h>usingnamespacestd;intfcfsoutput();/*调度结果输出*/intf

18、cfsinput();/进程参数的初始化voidkaishi();#defineMAX10#definemaxsize1000structnode/建立链表来存放进程数据charname5;/进程名称intneed_time;/所需要的时间intallocation;占用cpu的情况charstate;/目前的状态R为运行,E为运行完毕node*next;/链表的尾结点;structtaskstructcharname;/*进程名称*/intnumber;/*进程编号*/floatcometime;/*到达时间*/floatrunbegintime;/*开始运行时间*/floatrun_tim

19、e;/*运行时间*/floatrunendtime;/*运行结束时间*/intpriority;/*优先级*/intorder;/*运行次序*/intrunflag;/*调度标志*/tasksMAXintcounter;/*实际进程个数*/intfcfs()/*先来先服务算法*/fcfsinput();floattime_temp=0;inti;intnumberschedul;time_temp=e_time;for(i=0;i<counter;i+)tasksi.runbegintime=timetemp;tasksi.run_end_time=tasksi.ru

20、n_begin_time+tasksi.run_time;tasksi.runflag=1;timetemp=tasksi.runendtime;number_schedul=i;tasksnumberschedul.order=i+1;fcfsoutput();return0;intfcfsinput()taskstructtt;inti,j;/初始化进程数counter=3;/初始化每个到达系统的时间为5、7、8etime=rand()%9;etime=rand()%9;e_time=rand()%9;for(i=1;i<3

21、;i+)for(j=0;j<3-i;j+)if(e_time>tasksj+1.come_time)tt=tasksj;tasksj=tasksj+1;tasksj+1=tt;/初始化每个进程估计运行的时间tasks0.run_time=28;tasks1.runtime=9;tasks2.run_time=3;/初始化每个进程的名字='A'='B'='Ccout<<,*先来先服务算法*<<endl<<endl;for(i

22、=0;i<counter;i+)tasksi.runbegintime=0;tasksi.runendtime=0;tasksi.order=0;tasksi.runflag=0;return0;intfcfsoutput()/*调度结果输出*/inti;floatturn_round_time=0,f1,w=0;cout<<*先来先服务*"<<endl;cout<<"作业名到达时间运行时间开始时间停止时间运行次序周转时间"<<endl;for(i=0;i<counter;i+)f1=tasksi.run

23、etime;turn_round_time+=f1;w+=(f1/tasksi.runtime);cout<<""<<<<'t'<<""<<etime<<'t'<<<<tasksi.runtime<<'t'<<""<<tasksi.runbegintime<<'

24、t'<<<<tasksi.run_end_time<<'t'<<tasksi.order<<'t'<<f1<<'t'<<endl;cout<<"平均周转时间:"<<turnroundtime/counter<<endl;cout<<"平均带权周转时间:"<<w/counter<<endl;cout<<""

25、;return0;voidzuoyediaodu()/作业调度intn;cout<<"t1.先来先服务算法t2.返回开始菜单"<<endl;cin>>n;switch(n)(case 1: fcfs();kaishi();break;case 2: kaishi();kaishi();break;)/*/voidFIFO()intlength;intfifo100=0;intpageLength;intfifoPage100=0;inti,j;cout<<"*先进先出算法*"<<endl;pag

26、eLength=3;length=9;cout<<"时亥It"<<'t'for(i=0;i<length;i+)cout<<i<<'t'cout<<endl<<"引用串"<<'t'for(i=1;i<=length;i+)fifoi=rand()%5+1;cout<<fifoi<<'t"for(i=1;i<=length;i+)intflag=0;for(j=1;j

27、<=pageLength;j+)if(fifoi=fifoPagej)flag=1;j=pageLength+1;elseif(fifoPagej=0)fifoPagej=fifoi;j=pageLength+1;flag=1;else(cout<<">淘汰"<<fifoPage1<<endl;for(j=1;j<=pageLength;j+)fifoPagej=fifoPagej+1;fifoPagepageLength=fifoi;cout<<endl<<"t="<&

28、lt;i-1<<"时"<<'t'cout<<"P"<<jk<<'t'(intjk=1;jk<=pageLength;jk+)cout<<endl<<'t'for(ints=1;s<=pageLength;s+)cout<<fifoPages<<'t'cout<<endl;voidLRU()intlength;intlru100=0;intpageLength;i

29、ntlruPage100=0;inti,j;cout<<*最近最少使用LRU算法*"<<endl;pageLength=3;length=9;cout<<"时亥Ut"<<''t'for(i=0;i<length;i+)JJcout<<i<<'t'cout<<endl<<"引用串"<<'t'for(i=1;i<=length;i+)lrui=rand()%5+1;cout&

30、lt;<lrui<<'t')for(i=1;i<=length;i+)intflag=0;for(j=1;j<=pageLength;j+)if(lrui=lruPagej)for(intcc=j;cc>0;cc-)lruPagecc=lruPagecc-1;)lruPage1=lrui;flag=1;j=pageLength+1;)elseif(lruPagej=0)for(intvv=j;vv>0;vv-)lruPagevv=lruPagevv-1;)lruPage1=lrui;j=pageLength+1;flag=1;)if(f

31、lag=1)_|)else<<lruPagepageLength<<endl;cout<<"f淘汰for(j=pageLength;j>0;j-)lruPagej=lruPagej-1;)lruPage1=lrui;)cout<<endl<<"t="<<i-1<<"时"<<'t'for(intjk=1;jk<=pageLength;jk+)cout<<"P"<<jk<<

32、;'t')cout<<endl<<'t'for(ints=1;s<=pageLength;s+)cout<<lruPages<<'t')cout<<endl;voidqueye()/页面替换intn;cout<<endl;cout<<"t1.先进先出算法t2.LRU算法t3.返回开始菜单"<<endl;cin>>n;switch(n)case 1: FIFO();kaishi();case 2: LRU();kai

33、shi();break;break;case3:kaishi();kaishi();break;)/*/*判断输入数据是否有效*/intdecide(charstr)/判断输入数据是否有效inti=0;while(stri!='0')if(stri<'0'|stri>'9')returni;将字符串转换成数字*/*inttrans(charstr,inta)/将字符串转换成数字inti;intsum=0;for(i=0;i<a;i+)(sum=sum+(int)(stri-'0')*pow(10,a-i-1);r

34、eturnsum;)I*先来先月艮务调度算法*/voidFCFS(intcidao,intm)/磁道号数组,个数为mintnow;/当前磁道号intsum=0;/总寻道长度intj,i;inta;charstr100;cout<<*先来先服务*<<endl;floatave;/平均寻道长度cout<<"磁盘请求序列为:for(i=0;i<mi+)/按先来先服务的策略输出磁盘请求序列cout<<cidaoi<<cout<<endl;cout<<"请输入当前的磁道号:B:cin>&g

35、t;str;/对输入数据进行有效性判断a=decide(str);if(a=0)cout<<"输入数据的类型错误,请重新输入!"<<endl;gotoB;)elsenow=trans(str,a);/输入当前磁道号sum+=abs(cidao0-now);cout<<"磁盘扫描序列为:for(i=0;i<mi+)/输出磁盘扫描序列cout<<cidaoi<<sum+=abs(cidaoj-cidaoi);for(i=0,j=1;j<mi+,j+)/求平均寻道长度ave=(float)(sum)

36、/(float)(m);cout<<endl;cout<<"平均寻道长度:"<<ave<<endl;)voidcipandiaodu()/磁盘调度(inta;intc;/菜单项intcidaomaxsize;inti=0,count;charstr100;cout<<endl;cout<<"t1.先来先服务t2.返回开始菜单"<<endl;F:cin>>str;/对输入数据进行有效性判断a=decide(str);if(a=0)cout<<&quo

37、t;输入数据的类型错误,请重新输入!"<<endl;gotoF;/输入错误,跳转到F,重新输入elsec=trans(str,a);cout<<"请输入磁道序列(0结束):"<<endl;A:cin>>str;/对输入数据进行有效性判断a=decide(str);if(a=0)|cout<<"输入数据的类型错误,请重新输入!"<<endl;gotoA;/输入错误,跳转到A,重新输入elsecidaoi=trans(str,a);i+;while(cidaoi-1!=0)ci

38、n>>str;/对输入数据进行有效性判断a=decide(str);if(a=0)cout<<"输入数据的类型错误,请重新输入!"<<endl;elsecidaoi=trans(str,a);i+;count=i-1;/要访问的磁道数cout<<"你输入的磁道序列为:"for(i=0;i<count;i+)cout<<cidaoi<<""/输出磁道序列)cout<<endl;switch(c)(case 1: 使用FCF砥法FCFS(cidao,

39、count);kaishi();break;case 2:kaishi();kaishi();break;)/*/booltools5;/全局变量,用餐工具CRITICALSECTIOMs;/信号量,在线程中使用,临界区classPhilosopherprivate:intnumber;intstatus;/标记当前哲学家的状态,0表示正在等待/(即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考public:Philosopher(intnum=0):status(2),number(nun)constintfind()returnnumber;constintgetinfo()r

40、eturnstatus;voidChange();/状态改变函数voiddead_lock();voidPhilosopher:dead_lock()EnterCriticalSection(&cs);/进入临界区strings;if(status=1)toolsnumber%5=true;/tools(number-1)%5=true;status=2;)elseif(status=2)(status=0;/tools(number-1)%5=false;I/tools(number-1)%5=true;)elseif(status=0)(toolsnumber%5=false;to

41、ols(number-1)%5=falsestatus=1;)LeaveCriticalSection(&cs);/cout<<"*”;/进入临界区voidPhilosopher:Change()EnterCriticalSection(&cs);if(status=1)/正在进餐(toolsnumber%5=true;/放下左手工具tools(number-1)%5=true;/放下右手工具status=2;/改变状态为思考=elseif(status=2)/思考中(status=0;/改变状态为等待elseif(status=0)/等待中(if(too

42、lsnumber%5&&tools(number-1)%5)/左右手两边工具均为空闲状(toolsnumber%5=false;/拿起左手工具tools(number-1)%5=false;/拿起右手工具status=1;LeaveCriticalSection(&cs);stringprint(Philosopher*pA)(/pA->Change();inti=pA->getinfo();stringstr;if(i=0)str="等待";elseif(i=1)Istr="就餐";elsestr="思考&

43、quot;returnstr;stringtoolstatus(boola)stringstate;if(a=true)state="闲";if(a=false)state="用";returnstate;voiddeadlock()charcon='y'/判断是否继续/con='n'for(inti=0;i<5;i+)toolsi=true;/筷子都未使用,初始化PhilosopherP1(1),P2(2),P3(3),P4(4),P5(5);InitializeCriticalSection(&cs);/

44、初始化初始化临界区/cout<<"哲学家们开始生活:"<<endl;/cout<<"当前状态:"cout<<endl;/cin>>con;while(con='y')P1.Change();P2.Change();P3.Change();P4.Change();P5.Change();cout<<"当前状态为:"<<endl;cout<<""<<P1,find()<<print(&

45、amp;P1)<<""<<endl;cout<<""<<toolstatus(tools0)<<""<<toolstatus(tools1)<<endl;cout<<""<<P5.find()<<print(&P5)<<""<<P2.find()<<print(&P2)<<endl;cout<<&quo

46、t;"<<toolstatus(tools4)<<""<<toolstatus(tools2)<<endl;cout<<""<<P4.find()<<print(&P4)<<""<<P3.find()<<print(&P3)<<endl;cout<<""<<toolstatus(tools3)<<endl;cout<&

47、lt;""<<endl;cout<<"若要继续下一状态,输入y;输入n进入死锁;输入其他,结束程序:"cin>>con;Sleep(20);while(con='n')P1.deadlock();P2.deadlock();P3.deadlock();P4.deadlock();P5.deadlock();cout<<"死锁情况"<<endl;cout<<""<<P1.find()<<print(&

48、;P1)<<""<<endl;cout<<""<<toolstatus(tools0)<<""<<toolstatus(tools1)<<endl;cout<<""<<P5.find()<<print(&P5)<<""<<P2.find()<<print(&P2)<<endl;cout<<"&

49、quot;<<toolstatus(tools4)<<""<<toolstatus(tools2)<<endl;cout<<""<<P4.find()<<print(&P4)<<""<<P3.find()<<print(&P3)<<endl;cout<<""<<toolstatus(tools3)<<endl;cout<<

50、""<<endl;cout<<"输入n继续;输入其他,结束程序:"cin>>con;Sleep(20);DeleteCriticalSection(&cs);/退出资源区voidPV()/哲学家吃通心面问题intn;cout<<endl;cout<<"t1.开始t2.返回开始菜单"<<endl;cin>>n;switch(n)(case 1: deadlock();kaishi();break;case 2: kaishi();kaishi()

51、;break;/*/voidZD()doublep;inta,m,r,n,e,o,u;structtm*local;char*st,s27;timett;t=time(NULL;local=localtime(&t);st=asctime(local);/记录初试时间for(inti=0;i<27;i+)(si=*st;st+;cout<<*中断模拟*<<endl;cout<<"当前系统时间:"for(inti1=4;i1<27;i1+)(cout<<si1;cout<<endl<<

52、endl;/设置为时钟闹铃为8,每个时钟间隔为2秒intcount=0,count1=0,k=8,w;while(k!=0)|docout<<"已执行完一条指令n"count+;cout<<"请输入一个数字(1表示中断,0表示无中断):"cin>>w;/读取键盘输入while(w=0);/如果w一直为0,则程序一直在此循环执行if(w=1)cout<<"现场保存完毕n"count1+;k-;/对k-,当出现8次中断时if(k!=0)cout<<"处理器完成调度n&q

53、uot;p=count1*2;a=(int)count1*2;if(p-a)>=0.5)p=a+1;elsep=a;/这段代码是对硬件的模拟,就是当count1出现偏差时的处理m=(int)p;cout<<"现在已过时间为:"<<m<<endl;r=s17-48;n=s18-48;e=r*10+n;p=p+e;/下面部分代码为ASCII码的转换if(p<60)(s17=(int)p/10)+48;s18=(int)p%10)+48;for(inti=4;i<27;i+)cout<<si;cout<<

54、;endl;else(s14=s14-48;s15=s15-48;o=s14*10+s15;o=o+(int)p/60;if(o<60)s14=(o/10)+48;s15=(o%10)+48;s17=(int)p%60)/10+48;s18=(int)p%60)%10+48;for(inti=4;i<27;i+)(cout<<si;)cout<<endl;)else(s11=s11-48;s12=s12-48;u=s11*10+s12;u=u+o/60;Iif(u<24)(s11=u/10+48;s12=u%10+48;s14=(o%60)/10+48

55、;s15=(o%60)%10+48;s17=(int)p%60)/10+48;s18=(int)p%60)%10+48;for(inti=4;i<27;i+)(cout<<si;)cout<<endl;)voidzhongduan()(intn;cout<<endl;cout<<"t1,开始t2.返回开始菜单"<<endl;cin>>n;switch(n)(case 3: ZD();kaishi();break;case 4: kaishi();kaishi();break;)/*/structp

56、rocess(stringname;floatarrivetime;/到达时间floatruntime;/运行时间floatstarttime;/开始时间floatfinishtime;/完成时间boolflag=false;);/多道程序设计structprogramprocessp5;);voidinput(program&p,intn)/程序信息输入cout<<"请您输入进程的t名字t服务时间n"for(inti=0;i<n;i+)(cout<<"请输入步骤"<<i+1<<"的信息:"cin>>>>p.pi.runtime;cout<<endl;)floatsearch(strings,programp,intn)for(inti=n-1;i>=0;i-)(if(p.pi.flag&&=s)return0;)voidPrint(programp,intn)/最终结果输出cout<<endl;cout<<"n

温馨提示

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

评论

0/150

提交评论