




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统上机实验报告操作系统上机实验报告(13版)1/451/45操作系统上机实验报告操作系统上机实验报告(13版)1/451/45编者说明《操作系统》是计算机科学与技术专业的一门核心专业基础课。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使自身更好的掌握操作系统的基本概念、基本原理及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。《操作系统实验指导书》是针对这门课的实验编写的,书中设计了三个操作系统原理实验。三个实验难易层次分明,重点突出,其中实验一(Windows操作系统)和实验二(进程管理)为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。所有实验共8学时,采用C语言作为编程语言模拟设计完成相关程序。限于编者的水平,难免有疏漏与错误,敬请读者批评指正。编者:李可操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)实验一Windows操作系统一、 实验题目计算机管理、任务管理、察看了解注册表二、 实验目的Windows是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。三、 实验内容Windows提供了那些人机交互的界面?观察Windows对应用程序运行的支持。Windows提供了几种方式启动应用程序?Windows提供了几种方式让用户改变应用程序外观?Windows提供了几种方式结束程序的运行?了解windows对应用程序的运行时对I/O支持。系统中有多少个I/O设备?多少种I/O控制方式?能否确信应用程序I/O需要操作系统支持?能体会到“设备独立性”吗?观察资源管理器,记录你使用的机器的资源情况:CPU、内存、磁盘分区及容量、文件目录树及文件属性。—=K地毗Q£■•)■-F五通酢堂Fl)■■ZZWNES诉UCigsmHgBHF口心理的MS酊邛屯研IS5】—=K地毗Q£■•)■-F五通酢堂Fl)■■ZZWNES诉UCigsmHgBHF口心理的MS酊邛屯研IS5】O招鶴面审j产■文玷(_!]"nruaDriiEOf弔①項冃上并JEKl-fiU17M'p'CJdCuwcat白址!K1咬也泊女存KM.㈣E肥也IWrfB诚浪上巩捆日. ■IHrrW!^^"«h^ib看也I屮■■:Tjarr:-J->J世善feHElik#EUbcompiuerXtt.有!tCX黄小:占用淄吨JAse4瀚..晰..颇m5E8睡蹄..瞒..雎[曲啊郞牝錦十:切学池■捎2DI3JT^flUB-!Z34D»W1■只谟£田应用于宝井表中由空忤?E『atIIMiL^-r-Wriai.观察设备管理器,记录你使用机器的设备的配置情况(启动控制面板,到管理工具,再到计算机管理,进入设备管理器)。亨博土雷it..rJ'T/iff-邮展tews_"日«0.WnSRSrtlBiRtf(EO着看9匱BE野JLHffl帮哽, 籍0.6i£▼0,,/JJEEtQ-』皖皿留IffffZJl 己<3♦!■到土由[饌全责尊Hrts她*lr£快捷方式土由[饌全责尊Hrts她*lr£快捷方式2kE賞件順丈修養任强&:=TtL3ff*H*UQBOF把1通母■|JWtCTO9n网上l+«TI¥3!HffTTTt2KE詳細懐専TK±N^iD.IKE•碗fpf鸟aA钵学翫入诜書控制面板中看看系统还能让我们控制什么,特别了解“系统”、“显示”、“添加硬件”、“添加/删除程序”、“语音控制”等。操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)7.AT1U曲F姬'MkImeIfl,&金"肝匣■所北惺甲*龍它Ul+H帆HPi-握金,所間畔,*己相上次旳电■1□LKM・a皿1Kii-a-xi,■™a±MSHI」正衣用*LCHMde-w网垣主卫士2L5.CC44u泓早率■ukie氏卧h j]&:>?.N路渤B毎汹■igarSoitiag初1<M-3*^/>邛Eitoi大4电申*翻WAjSOtV -DT"™E -0*5孟53雌削"PMIdUKtiB«r綢佬屬*IX»W^^"^丽激折ht|3:.i.rwwrt wajh!*L3M-,■!MW用h>叫!<e&>grt!Gjtmtes*+■盅g.d<L*t伊*™cdi百RrmEMWpPKJtMEcoej^'MKTMaFl.HETmnrKrk3jQ5«~*»Pjk±223LCC44j^"Mktv«-F|.HETmnnwk3.9SP1友4S-.C^S_t]H梆中有M'itt程?为什土专官ARi殛IS而弟不是板用梃甲?启动“任务管理器”,观察Windows对多任务管理列出的应用程序与启动的是否一致,系统中有多少进程?为什么会有那么多进程而都不是应用程序?8.启动Windows的注册表,检查系统配置和设置,初步了解注册表的作用。了解管理工具,为了帮助用户管理和监视系统,Windowsxp提供了多种系统管理工 具,其中最主要的有:计算机管理,事件查看器,性能监视,服务,数据源(ODBC)。请回答出这些工具的主要功能。 事件查看器中观察“应用程序日志”,本地计算机中,共有 个应用程序 日志事件。单击“查看”菜单中的“筛选”命令,查看系统日志包括的事件类型有哪些?打开“服务”图标。查看在你的本地计算机中,管理着 个系统服务项目。通过观察,选出你所感兴趣的5个系统服务项目,描述他们的名称和服务的内容。 查看ODBC数据源,找到系统为哪些数据源缺省安装了ODBC驱动程序。实验二进程控制一、 实验题目模拟进程管理二、 实验目的利用简单的结构和控制方法模拟进程结构、进程状态和进程控制。三、 实验内容用PCB表示整个进程实体,利用键盘控制方法模拟进程执行中产生的事件,或者利用基于图形界面的鼠标或者键盘操作控制进程管理内容。建立三个基本的队列:等待、执行、阻塞进行模拟。操作系统的进程管理,模拟进程的调度,模拟用户的创建、执行、阻塞、挂起、唤醒等操作。就绪时冋因等待事片有件发生而时冋因等待事片有件发生而图2.1进程状态转换四、源程序建立一个结点,即PCB块包括用户标识域、指针域等。建立三个队列(执行队列、就绪队列、等待队列)根据进程状态转换实现对三个队列的具体操作用switch选择语句选择状态#include"stdio.h"#include"dos.h"#include"stdlib.h"#include"conio.h"#include"windows.h"#defineSEC3#defineNULL0/*定义结构体*/typedefstructPCB{intPID;〃进程控制号intUID;〃内部ID号structPCB*next;操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)}PCB;PCB*really,*excute,*wait;/*createqueueheader*//*queueoperation入队*/intenqueue(PCB*head,PCB*node){PCB*p;p=head;if(p->next==NULL){head->next=node;return1;}while(p){if(p->next==NULL){p->next=node;return1;}elsep=p->next;}}/*enquue*//^dequeue出队列*/PCB*dequeue(PCB*head){PCB*p;p=head;if(p->next==NULL){returnNULL;}else{p=p->next;head->next=p->next;p->next=NULL;returnp;}/*headtonext*/
}/*dequeue*//*PCBoperate*//*新建进程*/voidcreate(){PCB*p;p=(PCB*)malloc(sizeof(PCB));p->next=NULL;printf("inputPIDandUIDtoanewprocess\n");scanf("%d%d”,&p->PID,&p->UID);if(enqueue(really,p))printf("createaprocess:PID=%dUID=%d\n",p->PID,p->UID);elseprintf("createFailed'n");}/*create*//*执行fexcute*/intfexcute(){PCB*p=dequeue(really);if(p==NULL){printf("NOprocessinqueue\n");return0;}else{enqueue(excute,p);printf("addaprocessintoexcutequeueprocess:PID=%dUID=%d\n",p->PID,p->UID);return1;}}/*excute*/intsuspend(){PCB*p=dequeue(excute);if(p==NULL){printf("NOprocessinqueue\n");return0;}else{enqueue(really,p);printf("addaprocessintoreallyqueueprocess:PID=%dUID=%d\n",p->PID,p->UID);return1;}}intwake(){PCB*p=dequeue(wait);if(p=NULL){printf("NOprocessinqueue\n");return0;}else{enqueue(really,p);printf("addaprocessintowaitreallyprocess:PID=%dUID=%d\n",p->PID,p->UID);return1;}}intblock(){PCB*p=dequeue(excute);if(p=NULL){printf("NOprocessinqueue\n");return0;}else{enqueue(wait,p);printf("addaprocessintowaitqueueprocess:PID=%dUID=%d\n",p->PID,p->UID);return1;}}/*block*//*输出队列outputqueue*/intoutputqueue(PCB*head){PCB*p;if(head->next==NULL){/*队列为空*/printf("queueisnull\n");return1;}p=head->next;/*nodepointer*/while(p){/*打印processidUID*/printf("PID=%dUID=%d\n",p->PID,p->UID);p=p->next;}return0;}/*output输出*/intoutput(){printf("REALLLYQUEUEM");outputqueue(really);printf("EXCUTEQUEUE:\n");outputqueue(excute);printf("WAITQUEUE:\n");outputqueue(wait);}/*output*//*init初始化*/intinit(){PCB*p;//clrscr();really=(PCB*)malloc(sizeof(PCB));really->next=NULL;excute=(PCB*)malloc(sizeof(PCB));excute->next=NULL;wait=(PCB*)malloc(sizeof(PCB)); 操作系统上机实验报告(13版)wait->next=NULL;printf(" PROCESSSECHUDLE \n");printf("nowiniting \n");printf("inputPIDandUIDasinteger,00asover\n");while(l){p=(PCB*)malloc(sizeof(PCB));p->next=NULL;scanf(”%d%d”,&p->PID,&p->UID);if(p->PID=0&&p->UID==0)break;else{if(enqueue(really,p))printf("newprocessPID=%dUID=%dadded!\n",p->PID,p->UID);elsereturn0;}}return1;}/*init*/ /*运行一个process*/intrun(){PCB*p=excute;ints=SEC;if(excute->next=NULL){printf("noprocessinexcutequeue\n");return0;}else{p=excute->next;printf("systemwillsleep%dsasprocessrunning\n",s);Sleep(3);/*sleepasprocessruningtime*/printf("process:PID=%dUID=%dexcutesuccessed..\n",p->PID,p->UID);excute->next=p->next;free(p); 操作系统上机实验报告(13版)} /*离开*/voidleave(){PCB*p,*t;while(really->nextIIexcute->nextIIwait->next){p=really->next;while(p){t=p->next;free(p);p=t;}really->next=NULL;p=wait->next;while(p){t=p->next;free(p);p=t;}wait->next=NULL;p=excute->next;while(p){t=p->next;free(p);p=t;}excute->next=NULL;}exit(0);}/*leave*/voidhelp(){printf(" HELPMENU\n"); printf("\t-hHELPshowhelpoption\n");printf("\t-cCREATEcreateanewprocess,andputtoreallyqueue\n");操作系统上机实验报操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)\n");printf("\t-bBLOCKblockaprocessinexcutequeue\n");printf("\t-wWAKEwakeaprocessinwaitqueue\n");printf("\t-eEXCUTEexcuteaprocessinreallyqueue\n");printf("\t-sSUSPENDsuspendaprocessinexcutequeue\n");printf("\t-oOUTPUToutputallprocessesinqueues\n");printf("\t-rRUNexcuteaprocessinexcutequeue\n");printf("\t-xEXITexitthisprogram\n");\n");printf(" printf("\ttype'H'willshowthismenu\n");}/*help*/voidmain(){charCOMMAND=NULL;if(init()!=1){printf("initfalied!\n”);getch();exit(0);}else{printf("init...OK\n");output();help();}while(1){/*当三队列都不空执行调度*/printf(”〉”);scanf("%c”,&COMMAND);switch(COMMAND){case'\n':break;case'H':case'h':help();break;case'C':case'c':create();break;case'B':case'b':block();break;
case'W':case'w':wake();break;case'S':case's':suspend();break;case'E':case'e':fexcute();break;case'O':case'o':output();break;case'X':case'x':leave();break;case'R':case'r':run();break;}}}/*main*/五、实验运行结果(截图)运行主界面创建几个进程执行一个进程阻塞一个进程唤醒一个进程操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)实验三虚拟存储管理一一页面置换算法一、 实验目的1.通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想。通过对几种置换算法页面的比较,来对比他们的优缺点,并通过比较更换频率来对比它们的效率。二、 实验内容通过编程实现一个虚拟存储区和内存工作区,并使用下述算法来模拟实现页面的置换:先进先出的算法(FIFO)最近最久未使用算法(LRU)最佳置换算法(OPT)四、 设计思路1.先进先出(FIFO)置换算法该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序连接成一个队列,并设置一个替换指针,使它总指向最老的页面。2.最近久未使用(LRU)置换算法最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情况来进行决策的。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。3.最佳(OPT)置换算法 其所选择的被淘汰的页面,是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳置换算法,通常可保证获得最低的缺页率。五、 测试数据假设分给一作业的物理块数为3,页面数为20个。页面号为(20个):7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,11Jt'B-ftS!E4 ,jIk--HbjuwM加1Jt'B-ftS!E4 ,jIk--HbjuwM加H啪■toriHii£irlffliD1U.34HUl(D充审顧EWM>i®n,事…i.j□ ■uari™f/质euj=!?! !4-II6IBigEPIE^h〔13?Jpc--HraawH>>Mri...(OPT)置金鼻江.其面选择的被陶出由页面.是以石不使用的.或者是在未来时间内不耳械冲底的页H.栗早果攵五択牌掺,近栄可溟注荻龍最1氏的苹页辜;“五.測試貌齋但就什摯一限业的物理块戒为3,史面泉为M个匚,页面弓为⑶个H■丄I.2.0-J.0.4-2.丄丄名丄I■'丄I■L0.,(339,jjsc-HKnnol!W^ni□毓必>«BCJilffl®価七如瞽式。IM«D芫卬侦W3iJIMiiil)ft|Em>Mp4S塞JJZaillgWiWlFiKf,檢-PilSfW;讪让・— .5*.BjB|=i=i-A-厂离 。由建W行〔I芯)•… i*:T<He,|:6... •.po濾炒E珈■:皿愷蕊:'L 啥肖知wiu芝诜重新世拝登祗#徒->:■>5fih的页ID弓GI用甲71,R>L1»1»4S^D>^2, towN诵斷轉作,话】7D>L±H請I設I§71验IEIII!I!HIBQi|sIi^1;il•请选降貝旬ir握ush•1.氐渔光扯FlP0> 3.卷近最久未便ft<LBU>-j.MScwrs-4-ifiE瀏勢,„fllJ?操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)B-fl!SK4 ,jhc-Hsrauiil制Hrlffiifidz®荀式hiUH(DWlf|'£1|nQiMihii"!」JH3」JA尊ni••寻 — 通,■啪皿WlH地 rMt■JiBE云卓勇I-A:!41!a!ft'涅匚!+! 161 111 !ift■1ti*1 ■ri■ ■ft1IV1Ili! 1 1±1-1 1Jil1 !BA! !S■ ! 1Ml1 1零141I! ■L03ft理竺j鲤 -十成" *■ 『芥/軍WlEJ:H u,%尊I1-aJI^冨"*C:f<HnTrn>a|...Sbpa■insert"AMiri...:窪•豎荷斐豊*.,gunilZE:.:*也M点藐XintpSIZE;'*页面号引用申中飴*六、源代码#include<stdio.h>#include<stdlib.h>/*全局变量*/intmSIZE;/*物理块数*/intpSIZE;/*页面号引用串个数*/staticintmemery[10]={0};/*物理块中的页号*/staticintpage[100]={0};/*页面号引用串*/staticinttemp[100][10]={0};/*辅助数组*//*自定义置换算法函数*/voidFIFO();voidLRU();voidOPT();/*自定义函数*/voidprint(unsignedintt);/*主函数*/voidmain(){inti,k,code;system("color0A");printf("请按任意键进行初始化操作...\n”);getchar();
system("cls");system("color0B");printf("请输入物理块的个数(Mv=10):”);scanf("%d",&mSIZE);while(mSIZE>10){printf("输入有误,请重新输入");scanf("%d",&mSIZE);}printf(”请输入页面号引用串的个数(Pv=100):”);scanf("%d",&pSIZE);while(pSIZE>100){printf("输入有误,请重新输入");scanf(”%d”,&pSIZE);}puts("请依次输入页面号引用串(连续输入,中间用空格隔开):”);for(i=0;ivpSIZE;i++)scanf("%d",&page[i]);system("cls");system("color0E");do{puts("输入的页面号引用串为:,for(k=0;kv=(pSIZE-1)/20;k++){for(i=20*k;(ivpSIZE)&&(iv20*(k+1));i++){if(((i+1)%20==0)ll(((i+1)%20)&&(i==pSIZE-1)))printf("%d\n",page[i]);else}}printf(printf(printf(printf(printf(printf(printf("%d”,page[i]);}}printf(printf(printf(printf(printf(printf(**********************\n);*请选择页面置换算法:*请选择页面置换算法:\t\t\t* *\n");1.先进先出(FIFO) 2.最近最久未使用(LRU)*\n");3.最佳(OPT) 4.退出 *\n");**********************\n);操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)printf("请选择操作:[]\b\b");scanf("%d",&code);switch(code){case1:FIFO();break;case2:LRU();break;case3:OPT();break;case4:system("cls");system("color0A");exit(0);default:printf("输入错误,请重新输入:,}printf("按任意键重新选择置换算法:>>>”);getchar();}while(code!=4);getchar();}voidprint(unsignedintt){inti,j,k,l;intflag;for(k=0;kv=(pSIZE-l)/20;k++){for(i=20*k;(ivpSIZE)&&(iv20*(k+l));i++){if(((i+l)%20==0)ll(((i+l)%20)&&(i==pSIZE-l)))printf("%d\n",page[i]);elseprintf("%d",page[i]);}for(j=0;jvmSIZE;j++)
for(i=20*k;(i<mSIZE+20*k)&&(i<pSIZE);i++){if(i>=j)printf(”|%d|",temp[i][j]);elseprintf(”II");}for(i=mSIZE+20*k;(ivpSIZE)&&(iv20*(k+l));i++){for(flag=0,l=0;lvmSIZE;l++)if(temp[i][l]==temp[i-l][l])flag++; if(flag=mSIZE)/*页面在物理块中*/printf("");elseprintf("I%dI",temp[i][j]);}/*每行显示20个*/if(i%20==0)continue;printf("\n");}}!! \n")!! \n"); printf("缺页次数:%d\t\t”,t+mSIZE);printf("缺页率:%d/%d\n",t+mSIZE,pSIZE); printf("置换次数:%d\t\t",t);printf("访问命中率:%d%%\n”,(pSIZE-(t+mSIZE))*100/pSIZE);printf(" \n"); } /*先进先出页面置换算法*/voidFIFO(){intmemery[10]={0};inttime[10]={0};/*记录进入物理块的时间*/inti,j,k,m;intmax=0;/*记录换出页*/ intcount=0;/*记录置换次数*/操作系统上机实验报操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)/*前mSIZE个数直接放入*/for(i=0;i<mSIZE;i++){memery[i]=page[i];time[i]=i;for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;ivpSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;jvmSIZE;j++){if(memery[j]!=page[i])k++;}if(k=mSIZE)/*如果不在物理块中*/{count++;/*计算换出页*/max=time[0]vtime[1]?0:1;for(m=2;m<mSIZE;m++)if(time[m]vtime[max])max=m;memery[max]=page[i];time[max]=i;/*记录该页进入物理块的时间*/for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}else{for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}}print(count);}/*最近最久未使用置换算法*/voidLRU()
{intmemery[10]={0}; intflag[10]={0};/*记录页面的访问时间*/inti,j,k,m;intmax=0;/*记录换出页*/ intcount=0;/*记录置换次数*/ /*前mSIZE个数直接放入*/for(i=0;ivmSIZE;i++){memery[i]=page[i];flag[i]=i;for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;ivpSIZE;i++){ /*判断新页面号是否在物理块中*/for(j=0,k=0;jvmSIZE;j++){if(memery[j]!=page[i])k++;elseflag[j]=i;/*刷新该页的访问时间*/} if(k=mSIZE)/*如果不在物理块中*/{count++;/*计算换出页*/max=flag[0]vflag[1]?0:1;for(m=2;mvmSIZE;m++)if(flag[m]vflag[max])max=m;memery[max]=page[i];flag[max]=i;/*记录该页的访问时间*/for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}else{操作系统上机实验报操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}}print(count);}/*最佳置换算法*/voidOPT(){intmemery[10]={0};intnext[10]={0};/*记录下一次访问时间*/inti,j,k,l,m;intmax;/*记录换出页*/ intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/for(i=0;ivmSIZE;i++){memery[i]=page[i];for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;ivpSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;jvmSIZE;j++){if(memery[j]!=page[i])k++;}if(k=mSIZE)/*如果不在物理块中*/{count++;/*得到物理快中各页下一次访问时间*/for(m=0;m<mSIZE;m++){for(l=i+l;lvpSIZE;l++)if(memery[m]==page[l])break;next[m]=l;
}/*计算换出页*/max=next[0]>=next[1]?0:1;for(m=2;m<mSIZE;m++)if(next[m]>next[max])max=m;/*下一次访问时间都为pSIZE,则置换物理块中第一个*/memery[max]=page[i];for(j=0;jvmSIZE;j++)temp[i][j]=memery[j];}else(for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}}print(count);}七、实验结果(截图)1、 运行程序输入数据2、 算法选择界面3、 FIFO算法演示结果(需要算法分析)4、 LRU算法演示结果(需要算法分析)5、 OPT算法演示结果(需要算法分析)操作系统上机实验报告操作系统上机实验报告(13版)操作系统上机实验报告操作系统上机实验报告(13版)实验四进程(作业)调度算法一、 实验目的1、 通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。2、 了解Windows系统的进程(作业)的调度机制。二、 实验内容编写程序实现进程或作业先来先服务、优先权、按时间片轮转和短作业优先调度算法。三、 设计思路1、先来先服务算法FCFS就是每次调度是从就绪队列中选择最先进入就绪队列的进程,把处理机分配给它,使它投入运行。一直执行到完或者是发生事件使之中断而阻塞,才放弃处理机。2、 时间片轮转法就是系统将所有就绪进程按FCFS原则,排成一个队列,每次调度时把CPU分配给队首进程,执行一个时间片。当执行的时间片用完时,停止该进程的执行,并送到就绪队列的末尾,等待下一次执行;然后把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。按一定时间片轮番运行各个进程。如果时间片是一个定值,则时间片轮转法是一种对各进程机会均等的调度方法。3、 优先权调度的基本思想就是把当前处于就绪队列中优先级最高的进程投入运行,而不管这个进程的下一个CPU周期的长短和其他因素。4、 短作业优先(SPF)就是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它一直执行到完成,或发生某个事件而被阻塞放弃处理机时,再重新调度。四、 测试数据进程名优先级到达时间服务时间P1104P2213P3五、源代码#include<stdio.h>#include<string.h>〃使用timer()函数#include<windows.h>〃时间延迟#defineDELAY100//时间片#defineSJP4/**********全局变量声unsignedshortTIME=03打明**********/; //时间24操作系统上机实验报操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)unsignedshortNUM=0; 〃进程数量charTYPE=T; 〃模拟类型//PCB结构体定义typedefstructPCB{typedefstructPCB{charname[16];charstate;//[R]Run,[F]Finish,[P]Pause,[N]Newunsignedshortpriority;unsignedshortt_arrive;unsignedshortt_start;unsignedshortt_finish;unsignedshortt_service;unsignedshortt_run;unsignedshortt_wait;structPCB*next;〃数字越大,优先级越高,最小为1〃到达时间〃开始时间〃完成时间〃服务时间〃运行时间〃等待时间}pcb;pcb*now=NULL, 〃现在运行的pcb*head=NULL; //pcb链头部指针/**********函数声明**********/voidfcfs();voidsjf();voidgyxb();voidsjplz();voidinit();pcb*sort(pcb*);voidtimer();voidresult();//先到先服务〃短作业优先〃高优先比〃时间片轮转〃初始化,完成pcb录入〃对init()录入的pcb按到达时间排序〃定时器,每一个延迟自我调用一次〃打印结果〃先到先服务算法voidfcfs(){if(now->t_arrive>TIME){printf("[时间:%d]\t无进程运行\n",TIME);return;}if(now->state=='N'){now->state='R';now->t_start=TIME;printf("[时间:%d]\t进程:%s首次运行\n",TIME,now->name);}elseif(now->state=='R'){(now->t_run)++;if(now->t_run>=now->t_service){now->state='F';now->t_finish=TIME;printf("[时间:%d]\t进程:%s任务完成\n”,TIME,now->name);now=now->next;if(now!=NULL)fcfs();}elseprintf("[时间:%d]\t进程:%s正在运行,已运行时间:%d\n”,TIME,now->name,now->t_run);}}〃短作业优先算法voidsjf(){pcb*p=head,*p_min=NULL;unsignedshortt_min=9999; 〃从现在时间以前并且未结束的进程中,选出服务时间最小的进程while(p!=NULL&&p->t_arrive<=TIME){if(p->state=='F'){p=p->next;continue;}if((p->t_service-p->t_run)<t_min){t_min=p->t_service;p_min=p;}p=p->next;}〃如果为空,判断全部进程是否都已完成if(p_min==NULL){chark='Y';p=head;while(p!=NULL){if(p->state!='F')k='N';p=p->next;}if(k=='Y')now=NULL;elseprintf("[时间:%d]\t无进程运行\n",TIME);return;}〃如果选出的进程和之前的不同if(p_min!=now){if(now->state='R'){now->state='P';printf("[时间:%d]\t进程:%s暂停运行\n",TIME,now->name);}}if(p_min==NULL)now=head;elsenow=p_min;if(now->state='N'){操作系统上机实验报操作系统上机实验报告(13版)}}操作系统上机实验报操作系统上机实验报告(13版)}}操作系统上机实验报告(13版)操作系统上机实验报告(13版)}}now->state='R';now->t_start=TIME;printf("[时间:%d]\t进程:%s首次运行\n",TIME,now->name);}else{if(now->state=='P'){now->state='R';printf("[时间:%d]\t进程:%s继续运行\n",TIME,now->name);}(now->t_run)++;if(now->t_run>=now->t_service){now->state='F';now->t_finish=TIME;printf("[时间:%d]\t进程:%s任务完成\n”,TIME,now->name);gyxb();}elseprintf("[时间:%d]\t进程:%s正在运行,已运行时间:%d\n",TIME,now->name,now->t_run);}}〃高优先比算法voidgyxb(){pcb*p=head,*p_min=NULL;unsignedshortt_min=0; 〃从现在时间以前并且未结束的进程中,选出服务时间最小的进程while(p!=NULL&&p->t_arrive<=TIME){if(p->state=='F'){p=p->next;continue;〃动态优先比if(p->state=='P'){p->t_wait++;p->priority+=p->t_wait/p->t_service+1;}if(p->priority>t_min){t_min=p->priority;p_min=p;}p=p->next;}〃如果为空,判断全部进程是否都已完成if(p_min=NULL){chark='Y';p=head;while(p!=NULL){if(p->state!='F')k='N';p=p->next;}if(k=Y)now=NULL;elseprintf("[时间:%d]\t无进程运行\n”,TIME);return;}〃如果选出的进程和之前的不同if(p_min!=now){if(now->state=='R'){now->state='P';printf("[时间:%d]\t进程:%s暂停运行\n",TIME,now->name);操作系统上机实验报操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)}if(p_min==NULL)now=head;elsenow=p_min;if(now->state=='N'){now->state='R';now->t_start=TIME;printf("[时间:%d]\t进程:%s首次运行\n",TIME,now->name);}else{if(now->state=='P'){now->state='R';now->t_wait=0;printf("[时间:%d]\t进程:%s继续运行\n",TIME,now->name);}(now->t_run)++;if(now->t_run>=now->t_service){now->state='F';now->t_finish=TIME;printf("[时间:%d]\t进程:%s任务完成\n”,TIME,now->name);sjf();}elseprintf("[时间:%d]\t进程:%s正在运行,已运行时间:%d\n”,TIME,now->name,now->t_run);}}〃时间片轮转算法voidsjplz(){pcb*p=head,*q=now;//每个时间片结束时的处理if(TIME%SJP==0&&TIME/SJP>0){chark='Y';while(p!=NULL){if(p->state!='F'){k='N';break;}p=p->next;}if(k=Y){now=NULL;return;}if(p!=NULL){while(1){if(q->next!=NULL){if((q->next)->state=='F'){q=q->next;continue;}else{now=q->next;break;}}else{q=head;if(q->state=='F')continue;else{操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报告(13版)操作系统上机实验报操作系统上机实验报告(13版)now=head;break;}}}}else{p=head;while(p->next!=NULL)p=p->next;now=p;}}if(now->t_arrive>TIME){printf("[时间:%d]\t无进程运行\n",TIME);return;}if(now->state='N'){now->state='R';now->t_start=TIME;printf("[时间:%d]\t进程:%s首次运行\n",TIME,now->name);}elseif(now->state=='R'){(now->t_run)++;if(now->t_run>=now->t_service){now->state='F';now->t_finish=TIME;printf("[时间:%d]\t进程:%s任务完成\n",TIME,now->name);if(now!=NULL)fcfs();
}elseprintf("[时间:%d]\t进程:%s正在运行,已运行时间:%d\n",TIME,now->name,now->t_run);}elseif(now->state=='F')printf("[时间:%d]\t无进程运行\n",TIME);}voidresult(){pcb*p=head;printf("\n=========运行结果=========\n\n");printf(-名称优先级到达时间开始时间完成时间服务时间周转时间带权周转时间\n");while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t%.2f\n",p->name,p->priority,p->t_arrive,p->t_start,p->t_finish,p->t_service,p->t_finish-p->t_arrive,1.0*(p->t_finish-p->t_arrive)/p->t_service);p=p->next;}}voidtimer(){if(TYPE==T)fcfs();elseif(TYPE=='2')sjf();elseif(TYPE=='3')gyxb();elseif(TYPE=='4')sjplz();if(now==NULL)return;TIME++;Sleep(DELAY);timer();}voidinit(){pcb*p,*q;unsignedshorti;printf(-作用调度算法:”);printf("\n1:先来先服务2:短作业优先\n3:高优先比4:时间片轮转\n");printf(”输入模拟类型:[]\b\b”);scanf("%c",&TYPE);printf("输入进程数目:\n");scanf("%d”,&NUM);for(i=0;i<NUM;i++){p=(pcb*)malloc(sizeof(pcb));printf("[第%《个]依次输入:名称优先度到达时间服务时间\n",i+1);scanf("%s\t%d\t%d\t%d”,&p->name,&p->priority,&p->t_arrive,&p->t_service);if(head==NULL){head=p;q=p;}q->next=p;p->t_start=0;p->t_finish=0;p->t_run=0;p->t_wait=0;p->next=NULL;p->state='N';q=p;}}〃按到达时间冒泡排序pcb*sort_pcb(pcb*h_head){pcb*p,*p1,*p2,*p3;pcbh,t;if(h_head==NULL)returnNULL;h.next=h_head;p=&h;while(p->next!=NULL){p=p->next;}p=p->next=&t;while(p!=h.next){p3=&h;p1=p3->next;p2=p1->next;while(p2!=p){if((p1->t_arrive)>(p2->t_arrive)){p1->next=p2->next;p2->next=p1;p3->next=p2;p3=p2;p2=p1->next;}else{p3=p1;p1=p2;p2=p2->next;}}P=P】;}while(p->next!=&t){p=p->nex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物品预定金合同协议书
- 软件技术代理合同协议
- 透明橱窗租赁合同范本
- 玉器回收寄售合同范本
- 理财公司债务合同范本
- 软件迁移协议合同范本
- 粉料车间出租合同范本
- 酒店排烟清洗合同范本
- 电表安装分包合同范本
- 软件系统销售合同范本
- 2025-2026学年青岛版(五四制)(2024)小学科学三年级上册(全册)教学设计(附目录P230)
- 100以内进退位加减法口算题(20000道 可直接打印 每页100道)
- 室内装修工程应急预案范本
- 美缝施工合同
- 食品生产许可品种明细表优质资料
- 屎壳郎的大粪球教学
- 浙科电子商务模拟教学软件用户手册
- 职业技术学院科技工作管理办法(修订)
- 2022年江门市新会区自然资源局事业单位招聘考试笔试试题及答案解析
- SB/T 10379-2012速冻调制食品
- GB/T 23902-2021无损检测超声检测超声衍射声时技术检测和评价方法
评论
0/150
提交评论