版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南農(nóng)業(yè)大學(xué)科學(xué)技術(shù)師范學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告姓名:湯黎波 年級(jí)專(zhuān)業(yè)班級(jí)06級(jí)計(jì)算機(jī)教育班 日期2008年12月8日成績(jī)課程名稱(chēng)計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)名稱(chēng)編程進(jìn)程或作業(yè)先來(lái)先服務(wù)、高優(yōu)先權(quán)、按時(shí)間片輪轉(zhuǎn)調(diào)度 算法(4學(xué)時(shí))實(shí)驗(yàn)類(lèi)型次、一、-、r擔(dān)止戊|綜司|創(chuàng)新|【實(shí)驗(yàn)?zāi)康?、要求】?shí)驗(yàn)?zāi)康模海?)通過(guò)編寫(xiě)程序?qū)崿F(xiàn)進(jìn)程或作業(yè)先來(lái)先服務(wù)、高優(yōu)先權(quán)、按時(shí)間片輪轉(zhuǎn)調(diào)度算法,使學(xué)生進(jìn) 一步掌握進(jìn)程調(diào)度的概念和算法,加深對(duì)處理機(jī)分配的理解。(2)了解Windows2000/XP中進(jìn)程(線(xiàn)程)的調(diào)度機(jī)制。(3) 學(xué)習(xí)使用Windows2000/XP中進(jìn)程(線(xiàn)程)調(diào)度算法,掌握相應(yīng)的與調(diào)度有關(guān)的Win32 API函數(shù)。
2、實(shí)驗(yàn)要求:(1)經(jīng)調(diào)試后程序能夠正常運(yùn)行。(2)采用多進(jìn)程或多線(xiàn)程方式運(yùn)行,體現(xiàn)了進(jìn)程或作業(yè)先來(lái)先服務(wù)、高優(yōu)先權(quán)、按時(shí)間片輪轉(zhuǎn)調(diào)度的關(guān)系。(3)程序界面美觀(guān)?!緦?shí)驗(yàn)內(nèi)容】在Windows XP、Windows 2000等操作系統(tǒng)下,使用C語(yǔ)言,利用相應(yīng)的WIN32 API函數(shù),編寫(xiě)程序?qū)崿F(xiàn)進(jìn)程或作業(yè)先來(lái)先服務(wù)、高優(yōu)先權(quán)、按時(shí)間片輪轉(zhuǎn)調(diào)度算法?!緦?shí)驗(yàn)環(huán)境】(含主要設(shè)計(jì)設(shè)備、器材、軟件等)Pc電腦一臺(tái)【實(shí)驗(yàn)步驟、過(guò)程】(含原理圖、流程圖、關(guān)鍵代碼,或?qū)嶒?yàn)過(guò)程中的記錄、數(shù)據(jù)等)定義:1)先來(lái)先服務(wù)算法:如果早就緒的進(jìn)程排在就緒隊(duì)列的前面,遲就緒的進(jìn)程排在就緒隊(duì)列的后面,那么先來(lái)先服務(wù)(FCFS fi
3、rst come first service )總是把當(dāng)前處于就緒隊(duì)列之首的那個(gè)進(jìn)程 調(diào)度到運(yùn)行狀態(tài)。2)輪轉(zhuǎn)法就是按一定時(shí)間片(記為q)輪番運(yùn)行各個(gè)進(jìn)程。如果q是一個(gè)定值,則輪轉(zhuǎn)法是一種對(duì)各 進(jìn)程機(jī)會(huì)均等的調(diào)度方法。3)優(yōu)先級(jí)調(diào)度的基本思想是,把當(dāng)前處于就緒隊(duì)列中優(yōu)先級(jí)最高的進(jìn)程投入運(yùn)行,而不管各進(jìn)程的下一個(gè)CPU周期的長(zhǎng)短和其他因素。實(shí)驗(yàn)步驟:(1)需求分析:了解基本原理,確定程序的基本功能,查找相關(guān)資料,畫(huà)出基本的數(shù)據(jù)流圖;(2)概要設(shè)計(jì):確定程序的總體結(jié)構(gòu)、模塊關(guān)系和總體流程;(3)詳細(xì)設(shè)計(jì):確定模塊內(nèi)部的流程和實(shí)現(xiàn)算法;(4)上機(jī)編碼和調(diào)試;(5)運(yùn)行測(cè)試;(6)編寫(xiě)實(shí)驗(yàn)報(bào)告。流程圖
4、:(先來(lái)先服務(wù)流程圖)(高優(yōu)先權(quán)流程圖)(按時(shí)間片輪轉(zhuǎn)調(diào)度)程序說(shuō)明及實(shí)現(xiàn):1)先來(lái)先服務(wù)調(diào)度算法:高響應(yīng)比優(yōu)先實(shí)現(xiàn)進(jìn)程調(diào)度.(用C語(yǔ)言實(shí)現(xiàn)),2)優(yōu)先級(jí)調(diào)度程序:該程序由主程序、構(gòu)造隊(duì)列子程序、打印子程序、運(yùn)行子程序構(gòu)成。3)時(shí)間片輪轉(zhuǎn)法程序:在此程序中由于程序比較小,未進(jìn)行分模塊設(shè)計(jì)。直接采用單一模塊。1先來(lái)先服務(wù)# i ncludefloat t,d; /*定義兩個(gè)全局變量*/struct /*定義一個(gè)結(jié)構(gòu)體數(shù)組,包括進(jìn)程的信息*/int id;float ArriveTime;float RequestTime;float StartTime;float EndTime;float R
5、unTime;float DQRunTime;int Status;arrayTask4; /*定義初始化的結(jié)構(gòu)體數(shù)組*/GetTask()/*給結(jié)構(gòu)體數(shù)組賦值,輸入到達(dá),服務(wù)時(shí)間*/ int i;float a;for(i=0;i4;i+) arrayTaski.id=i+1;printf(input the number);printf(input the the ArriveTime of arrayTask%d:,i); /*用戶(hù)輸入進(jìn)程的時(shí)間,初始為零scanf(%f,&a);arrayTaski.ArriveTime=a;printf(input the RequestTi
6、me of arrayTask%d:,i);scanf(%f,&a);arrayTaski.RequestTime=a;arrayTaski.StartTime=0;arrayTaski.EndTime=0;arrayTaski.RunTime=0;arrayTaski.Status=0; /*開(kāi)始默認(rèn)的標(biāo)志位零*/int fcfs() /*定義FCFS中尋找未執(zhí)行的進(jìn)程的最先到達(dá)時(shí)間*/int i,j,w=0; /*在結(jié)構(gòu)體數(shù)組中找到一個(gè)未執(zhí)行的進(jìn)程*/for(i=0;i4;i+)if(arrayTaski.Status=0)t=arrayTaski.ArriveTime;w=1;i
7、f(w=1)break;for(i=0;i4;i+) /*查找數(shù)組中到達(dá)時(shí)間最小未執(zhí)行的進(jìn)程*/if(arrayTaski.ArriveTimet&arrayTaski.Status=0)t=arrayTaski.ArriveTime; /*返回最小到達(dá)時(shí)間的數(shù)組的下標(biāo)*/for(i=0;i4;i+)if (arrayTaski.ArriveTime=t)return i;int sjf() /*定義FCFS中尋找未執(zhí)行的進(jìn)程的最先到達(dá)時(shí)間*/int i,x=0,a=0,b=0; /*判斷是不是第一個(gè)執(zhí)行的進(jìn)程*/ float g;for(i=0;i4;i+) if(arrayTask
8、i.Status=1)g=arrayTaski.EndTime;x=1;if(x=0) /*第一個(gè)執(zhí)行的進(jìn)程按FCFS*/t=arrayTask0.ArriveTime;*/for(i=0;i4;i+)if(arrayTaski.ArriveTimet) t=arrayTaski.ArriveTime;a=i;return a;elsefor(i=0;ig)g=arrayTaski.EndTime;for(i=0;i4;i+)if(arrayTaski.Status=0& arrayTaski.ArriveTime=g)t=arrayTaski.RequestTime;a=i;b=1;
9、 /*判斷有沒(méi)有進(jìn)程在前個(gè)進(jìn)程完成前到達(dá)*/if(b!=0) /*有進(jìn)程到達(dá)則按SJF*/for(i=0;i4;i+)if(arrayTaski.Status=0&arrayTaski.ArriveTime=g&arrayTaski.RequestTimet)t=arrayTaski.RequestTime;a=i;return a;else /*否則按FCFS*/for(i=0;i4;i+)if(arrayTaski.Status=0)t=arrayTaski.ArriveTime;for(i=0;i4;i+)if(arrayTaski.Status=0&arrayT
10、aski.ArriveTimet)t=arrayTaski.ArriveTime;a=i;)return a;)new(int s) /*定義執(zhí)行進(jìn)程后相關(guān)數(shù)據(jù)的修改*/(int i,g=0;for(i=0;i4;i+)(if(arrayTaski.Status=0)continue;else(g=1;break;if(g=0) /*當(dāng)處理的是第一個(gè)未執(zhí)行的進(jìn)程時(shí)執(zhí)行*/(arrayTask s .StartTime=arrayTask s .ArriveTime;arrayTask s.EndTime=arrayTasks.RequestTime+arrayTask s .ArriveTim
11、e;arrayTasks.RunTime=arrayTasks.RequestTime;arrayTasks.Status=1;g=2;if(g=1) /*當(dāng)處理的不是第一個(gè)未執(zhí)行的進(jìn)程時(shí)執(zhí)行*/(arrayTasks.Status=1;for(i=0;i4;i+)(if(arrayTaski.Status=1)d=arrayTaski.EndTime;for(i=0;id&arrayTaski.Status=1)d=arrayTaski.EndTime;if(arrayTasks.ArriveTimed) /*判斷修改的進(jìn)程的到達(dá)時(shí)間是否在前一個(gè)執(zhí)行的進(jìn)程的完成時(shí)間前面*/array
12、Task s .StartTime=d;elsearrayTask s .StartTime=arrayTask s .ArriveTime;arrayTask s .EndTime=arrayTask s .StartTime+arrayTasks.RequestTime;arrayTasks.RunTime=arrayTask s .EndTime-arrayTask s .ArriveTime;arrayTask s .DQRunTime=arrayTasks.RunTime/arrayTasks.RequestTime;Printresult(int j)/*定義打印函數(shù)*/print
13、f(%dt,arrayTaskj.id);printf(%5.2ft”,arrayTaskj.ArriveTime);printf(%5.2ft,arrayTaskj.RequestTime);printf(%5.2ft,arrayTaskj.StartTime);printf(%5.2ft,arrayTaskj.EndTime);printf(%5.2ft,arrayTaskj.RunTime);printf(%5.2fn,arrayTaskj.DQRunTime);main() int i,b,k,a,c=0;int d4;clrscr();printf(t F. FCFS n);prin
14、tf(t S. SFJ n);printf(t Q. EXIT n);for(i=0;i+)if(c)break;printf(please input the number a:n);scanf(%d”,&a);switch(a)case Q: c=1;break;case F:printf(please input the different-ArriveTime of arrayTasksn); GetTask();printf(NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen);for(b=0
15、;b4;b+) /*調(diào)用兩個(gè)函數(shù)改變結(jié)構(gòu)體數(shù)的值*/k=fcfs();db=k;new(k);for(b=0;b4;b+)Printresult(db);/*調(diào)用打印函數(shù)打出結(jié)果*/continue;case S: printf(please input the different-RequestTime of arrayTasksn);printf(*the result of fcfsn);GetTask();printf(NumbertArrivetRequesttStarttEndtRuntDQRun timen);for(b=0;b4;b+)k=sjf();db=k;new(k);f
16、or(b=0;b0) printf(enter thepname:);scanf(%s,str);printf(enter the need time:);printf(*the result of sjfn);scanf(%d”,&t);head=p=(QUEN *)malloc(sizeof(QUEN);strcpy(p-pname,str);p-time1=t;p-time2=0;p-state=R;p-next=NULL;head=p;getchar();-d;while(d0) /*構(gòu)建隊(duì)列表*/printf(enter the pname:);scanf(%s,str);p
17、rintf(enter need time:);scanf(%d,&t);q=(QUEN *)malloc(sizeof(QUEN);strcpy(q-pname,str);q-time1=t;q-time2=0;q-state=R;q-next=NULL;p-next=q;p=q;-d;p-next=head;q=head;printf(process name need time runned staticn);do printf( %s%d %d %cn,q-pname,q-time1,q-time2,q-state);q=q-next;while(q!=head);printf
18、(n);doif(head-time2time1)head-time2+;if(head-time2=head-time1) head-state=E;q=head;textbackground(0);printf(The running process is %sn,q-pname);printf(process name left time runned staticn);do textcolor(15);/*輸入隊(duì)列表*/printf( %s %d %d %cn,q-pname,q-time1,q-time2,q-state);q=q-next;while(q!=head);printf
19、(n);head=head-next;q=head;p-next=head;elseprintf(The running process is %sn,q-pname);printf(process name left time runned staticn);do printf(%s%d%d %ci,q-pname,q-time1,q-time2,q-state);q=q-next;while(q!=head);printf(n);head=head-next;q=head;p=p-next;printf(Is it needing new process?(y or n)n);/*是否加入
20、新的進(jìn)程*/getchar();scanf(%c”,&f);if(f=Y|f=y)getchar();printf(Enter the new pname:);scanf(%s,str);printf(Enter the new neededtime:);scanf(%d,&t);m=(QUEN *)malloc(sizeof(QUEN);strcpy(m-pname,str);m-time1=t;m-time2=0;m-state=R;m-next=NULL;if(q-next-state=E)p=m;head=m;p-next=head;q=head;elsep-next=
21、m;m-next=head;p=m;while(q-next-state!=E);printf(The processes are finishedn);3優(yōu)先級(jí)調(diào)度方法: #include #include conio.htypedef struct pcb/*定義結(jié)構(gòu)*/(char name5;struct pcb *next;int needtime;int priority;char state5;)NODE;NODE *create_process(int n)/*創(chuàng)建隊(duì)列*/ (NODE *head,*s,*t;int time,i=0,j;char pname5;head=(NO
22、DE *)malloc(sizeof(NODE);printf(please input process name:);scanf(%s,pname);strcpy(head-name,pname);printf(please input need time:);scanf(%d,&time);head-needtime=time;printf(please input priority:);scanf(%d,&j);head-priority=j;strcpy(head-state,ready);head-next=NULL;t=head;for(i=1;iname,pnam
23、e);printf(please input need time:);canf(%d,&time);s-needtime=time;printf(please input priority:);scanf(%d,&j);s-priority=j;strcpy(s-state,ready);s-next=NULL;t-next=s;t=s;)return head;)pri_process(NODE *p)/*輸出進(jìn)程隊(duì)列*/(int i;NODE *q;q=p-next;printf(n nametneedtimetpriority t staten);while(q!=NUL
24、L)(printf(%5st %2d t %2d t %5s n,q-name,q-needtime,q-priority,q-state);q=q-next;)NODE *order(NODE head_sort)/*對(duì)進(jìn)程的優(yōu)先級(jí)進(jìn)行排序*/(NODE *p,*s,*q,*head,*r,*t;int m,pr;char name5;head=head_sort;p=head-next;r=p;t=p;q=p-next;while(r!=NULL)(while(q!=NULL)(if(p-prioritypriority)(m=p-priority;p-priority=q-priority;q-priority=m;strcmp(name,p-name);strcmp(p-name,q-name);strcmp(q-name,nam
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度商場(chǎng)餐飲品牌授權(quán)許可合同
- 服裝鞋帽居間合同模板
- 眼鏡店改造維修合同
- 居家裝修設(shè)計(jì)合同模板范本
- 二零二五年度企業(yè)核心辦公室文員職責(zé)合同
- 高端半導(dǎo)體制造廠(chǎng)房租賃合同樣本(二零二五年度)
- 小型機(jī)動(dòng)車(chē)輛抵押合同年
- 水產(chǎn)養(yǎng)殖管理操作手冊(cè)
- 高分子材料與工程塑料作業(yè)指導(dǎo)書(shū)
- 移動(dòng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)作業(yè)指導(dǎo)書(shū)
- 患者發(fā)生輸液反應(yīng)的應(yīng)急預(yù)案
- 銷(xiāo)售團(tuán)隊(duì)組建和管理課件
- 中國(guó)內(nèi)部審計(jì)準(zhǔn)則及指南
- 銀行個(gè)人業(yè)務(wù)培訓(xùn)課件
- 2024年ISTQB認(rèn)證筆試歷年真題薈萃含答案
- tpu顆粒生產(chǎn)工藝
- 《體檢中心培訓(xùn)》課件
- 《跟著音樂(lè)去旅行》課件
- 初中數(shù)學(xué)深度學(xué)習(xí)與核心素養(yǎng)探討
- 特殊教育導(dǎo)論 課件 第1-6章 特殊教育的基本概念-智力異常兒童的教育
- 辭職申請(qǐng)表-中英文模板
評(píng)論
0/150
提交評(píng)論