C語言程序設(shè)計課程設(shè)計-C語言進程調(diào)度_第1頁
C語言程序設(shè)計課程設(shè)計-C語言進程調(diào)度_第2頁
C語言程序設(shè)計課程設(shè)計-C語言進程調(diào)度_第3頁
C語言程序設(shè)計課程設(shè)計-C語言進程調(diào)度_第4頁
C語言程序設(shè)計課程設(shè)計-C語言進程調(diào)度_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C語言程序設(shè)計 課程設(shè)計(論文)題目: _進程調(diào)度院(系): _專業(yè)班級: _學(xué) 號:_學(xué)生姓名:_指導(dǎo)教師:_教師職稱:_起止時間:_課程設(shè)計(報告)任務(wù)及評語教研室:號學(xué)程序設(shè)計 (報告) 題目程序設(shè)計(報告)任務(wù)JZJZ 77 JXJX JZJZ - - JXJX 、LInLIn刀 序 1235612356 j j 7 7 是果也 zfzf z(z( z(xz(x z(xz(x z(z( fxfx 、t tJ J指導(dǎo)教師評語及成績?nèi)? 4月1x1x 字年 z:iz:i 1x1x 師201201 成院(系):第1章課程設(shè)計的目的與要求 .111課程設(shè)訃口的.11.2課程設(shè)訃的實驗環(huán)境.11

2、3課程設(shè)計的預(yù)備知識.114課程設(shè)訃要求.1第2章課程設(shè)計內(nèi)容 .221程序功能介紹.222程序整體設(shè)計說明.322 1設(shè)訃思路 .42.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明 .5223程序結(jié)構(gòu)(流程圖) .52. 2. 4各模塊的功能及程序說明.822.5程序結(jié)果 .82. 3程序源代碼及注釋 .8第3章課程設(shè)計總結(jié).18參考資料 .20第1章課程設(shè)計的目的與要求1.1課程設(shè)計LI的本課程設(shè)計是汁算機科學(xué)與技術(shù)專業(yè)重要的實踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習完程 序設(shè)計語言(C)課程后進行的一次全面的綜合練習。本課程設(shè)計的目的和任務(wù):1.鞏固和加深學(xué)生對C語言課程的基本知識的理解和掌握2.掌握C語言編程和程序

3、調(diào)試的基本技能3.利用C語言進行基本的軟件設(shè)計4.掌握書寫程序設(shè)計說明文檔的能力5.提高運用C語言解決實際問題的能力1.2課程設(shè)計的實驗環(huán)境硬件要求能運行Windows 2000/XP操作系統(tǒng)的微機系統(tǒng)。C語言程序設(shè)計及相應(yīng)的開 發(fā)環(huán)境。1.3課程設(shè)汁的預(yù)備知識熟悉C語言及C語言開發(fā)工具。1.4課程設(shè)計要求1.分析課程設(shè)計題U的要求2.寫出詳細設(shè)計說明3.編寫程序代碼,調(diào)試程序使其能正確運行4.設(shè)計完成的軟件要便于操作和使用5.設(shè)計完成后提交課程設(shè)計報告第2章課程設(shè)計內(nèi)容2.1程序功能介紹在多道程序環(huán)境下,進程數(shù)H往往多于處理機數(shù)tl,致使他們爭用處理機。這就要 求系統(tǒng)能按某種算法,動態(tài)地把處

4、理機分配給就緒隊列中的一個進程,使之運行。分配 處理機的任務(wù)是山進程調(diào)度程序完成的。一個進程被建立后,系統(tǒng)為了便于對進程進行 管理,將系統(tǒng)中的所有進程按其狀態(tài),將其組織成不同點進程隊列。于是系統(tǒng)中有運行 進程隊列、就緒隊列和各種事件的進程等待隊列。進程調(diào)度的功能就是從就緒隊列中挑 選一個進程到處理機上運行。本課題模擬實現(xiàn)進程調(diào)度算法,選用了優(yōu)先數(shù)調(diào)度算法和時間片輪轉(zhuǎn)算法。2. 2程序整體設(shè)計說明進程調(diào)度的設(shè)計方法lo數(shù)據(jù)結(jié)構(gòu)(1)優(yōu)先級與時間片的設(shè)計進程因等待放棄CPI;時,優(yōu)先級置為1 (高優(yōu)先級)進程因時間片到放棄CPU時,優(yōu)先級置為0 (低優(yōu)先級)優(yōu)先1對應(yīng)時間片4;優(yōu)先級0對應(yīng)時間片1

5、0o(2)進程控制塊(PCB)的內(nèi)容進程標識3-9進程優(yōu)先級0, 1進程優(yōu)先級0, 1進程等待時間20鏈接指針2:程序算法PCB結(jié)構(gòu),變量與主程序struct PCBint pname;int pri:int runtime;int waitting;struct PCB*next;pcb7;struct PCB*running, ready, wait;int sin二0;main()創(chuàng)建 PCB3PCB9并插入 ready 隊列;/ *pname 分別為 39,pri=O,runtime=10, waittime二0 */for(;)/*系統(tǒng)程序,完成初始化和處理機分派功能*/castsi

6、g=O:swtch;sig=l:waiter;sig=3:proc3;sig=4:proc4;sig=5:procS;sig=6:proc6;sig=7:proc7;sig=8:procS;sig=9:proc9;2. 2. 1設(shè)計思路1設(shè)訃進程進程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先數(shù)調(diào)度算法和循環(huán)輪轉(zhuǎn)調(diào)度算 法。PCB結(jié)構(gòu)通常包括以下信息:進程名,進程優(yōu)先數(shù)(或輪轉(zhuǎn)時間片),進程所占用 的CPU時間,進程的狀態(tài),當前隊列指針等。根據(jù)調(diào)度算法的不同,PCB結(jié)構(gòu)的內(nèi)容可 以作適當?shù)脑鰟h。建立進程就緒隊列。對兩種不同算法編制入鏈子程序。編制兩種進程調(diào)度算法:1) 優(yōu)先度調(diào)度;2)循環(huán)輪轉(zhuǎn)調(diào)度。本程

7、序用兩種算法對五個進程進行調(diào)度,每個進程可有三個狀態(tài),并假設(shè)初始狀態(tài) 為就緒狀態(tài)。為了便于處理,程序中的運行時間以時間片為單位計算,各進程的優(yōu)先數(shù)或輪轉(zhuǎn)時間數(shù) 以及進程需要運行的時間片數(shù)的初值均山用戶給定。在優(yōu)先數(shù)算法中,初始優(yōu)先數(shù)為50-NEEDTIME,進程每執(zhí)行一次,優(yōu)先數(shù)減3, CPU 時間片數(shù)加1,進程還需要的時間片數(shù)減1,在輪轉(zhuǎn)算法中,采用固定時間片,時間片數(shù) 為2進程每執(zhí)行1次,CPU時間片數(shù)加2,進程還需要的時間數(shù)減2,并排列到就緒隊列 的尾上。2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明主要數(shù)據(jù)結(jié)構(gòu)定義進程Typedef struct nodeint Pname; /進程名int Rti

8、me;/進程要求執(zhí)行時間int rtime;/進程已執(zhí)行時間char state;/進程狀態(tài)st rue t node * nex t; /指針Pnode;主要代碼結(jié)構(gòu)輸入運行的進程數(shù)先定義第一個進程輸出剩余的進程,輸入時釆用尾插法,最終建立一個循環(huán)鏈表對循環(huán)鏈表根據(jù)算法思想進行相關(guān)的處理。2.2.3程序結(jié)構(gòu)(流程圖)程序流程圖如圖2.1、2.2所示。圖2.1程序流程圖224各模塊的功能及程序說明第一模塊:標題輸出函數(shù);使用if-else語句編輯。第二模塊:進程PCB輸出;使用if-else語句編輯。第三模塊:輸出函數(shù):使用辻語句和wh訂e語句編輯。第四模塊:優(yōu)先數(shù)的插入算法;使用while語

9、句和if-else語句編輯。第五模塊:輪轉(zhuǎn)法插入函數(shù);使用for語句和if-else語句編輯。第六模塊:優(yōu)先數(shù)創(chuàng)建初始PCB信息;使用if-else語句和for語句編輯。第七模塊:輪轉(zhuǎn)法創(chuàng)建進程PCB;使用辻-else語句和for語句編輯。第八模塊:優(yōu)先數(shù)調(diào)度算法;使用if-else語句,wh訂e語句和辻語句編輯。第九模塊:時間片輪轉(zhuǎn)法;if-else語句,wh訂e語句和辻語句編輯。第十模塊:主函數(shù);使用if-else語句編輯。2. 2. 5程序結(jié)果程序運行結(jié)果如圖23所示圖2. 3運行結(jié)果2. 3程序源代碼及注釋 /*8. 3. 2源程序*/ include stdio. h #includ

10、e stdlib. h #include string h typedef struct nodechar name 10 :/*進程標識符*/int prio; /*進程優(yōu)先數(shù)*/int round;/*進程時間輪轉(zhuǎn)時間片*/int cputime: /*進程占用CPU時間*/staten,z);int needtime; /*進程到完成還要的時間*/int count:/*計數(shù)器*/char state; /*進程的狀態(tài)*/struct node *next: /*鏈指針*/PCB;PCB *finish, *ready, *tail, *run; /*隊列指針*/int N; /*進程數(shù)

11、*/*將就緒隊列中的第一個進程投入運行*/firstin()run二ready;/*就緒隊列頭指針賦值給運行頭指針*/run-state二R ;/*進程狀態(tài)變?yōu)檫\行態(tài)*/ready二ready-next;/ *就緒對列頭指針后移到下一進程*/*標題輸出函數(shù)*/void prtl(char a)if(toupper(a)=,P) /*優(yōu)先數(shù)法*/printf C namecputime needtime priority staten)elseprintf C namecputime needtime count round/*進程PCB輸出*/void prt2(char a,PCB *q)i

12、f (toupper (a) =,P)/*優(yōu)先數(shù)法的輸出*/printfC %-10s%-10d%-10d%-10d %cn, q-name, q-cputime, q-needtime, q-prio, q-state);else/*輪轉(zhuǎn)法的輸出*/printf C %-10s%10d%-10d%-10d%-10d %-cn, q-name, q-cputime, q-needtime, q-count, q-round, q-state);/*輸出函數(shù)*/void prt(char algo)PCB *p;prtl (algo) :/*輸出標題*/if(run!=NULL) /*如果運行指

13、針不空*/prt2 (algo, run) ; /*輸出當前正在運行的PCB*/p二ready;/*輸出就緒隊列PCB*/wh 訂 e(p!二 NULL)prt2(algo, p);p=p-next;p二finish; /*輸出完成隊列的PCB*/wh訂e(p!=NULL)prt2(algo, p);p=p-next;getch() ;/*壓任意鍵繼續(xù)*/*優(yōu)先數(shù)的插入算法*/insert1(PCB *q)PCB *pl, *s, *r;int b;s=q; /*待插入的PCB指針*/pl二ready; /*就緒隊列頭指針*/r=pl; /*r做pl的前驅(qū)指針*/b二 1;wh訂e (pl!二

14、NULL)&b) /*根據(jù)優(yōu)先數(shù)確定插入位置*/ if(pl-prio=sprio)r 二pl;pl=pl-next;elseb 二0;if(r!=pl) /*如果條件成立說明插入在r與pl之間*/ r-next=s;s-next=pl;elses-next=pl;/*否則插入在就緒隊列的頭*/ready二s;/*輪轉(zhuǎn)法插入函數(shù)*/insert2(PCB *p2)tail-next=p2; /*將新的PCB插入在當前就緒隊列的尾*/tail=p2;p2-next二NULL;/*優(yōu)先數(shù)創(chuàng)建初始PCB信息水/void createl(char alg)PCB *p;int i,time;char

15、na10;ready二NULL; /*就緒隊列頭指針*/finish二NULL; /*完成隊列頭指針*/run二NULL; /*運行隊列指針*/printf (Enter name and time of processn) ; /*輸入進程標識和所需時間創(chuàng)建PCB*/for(i=l;iname, na);p-cputimez:O;p-needt ime=t ime;p-state=,w,;p-prio=50-time;if (ready !=NULL)就緒隊列不空調(diào)用插入函數(shù)插入*/insert 1 (p);elsep-next=ready; /*創(chuàng)建就緒隊列的笫一個PCB*/ready=p

16、;clrscr ();printf(,zprt (alg) ;/*輸出進程PCB信息*/run=ready; /*將就緒隊列的第一個進程投入運行*/ready=ready-next; run-state二R ;/*輪轉(zhuǎn)法創(chuàng)建進程PCB*/ void create2(cha:r alg)PCB *p;int i,time; char na10: ready二NULL; finish二NULL;run二NULL;printf (Enter name and time of round processll);for(i=l;iname, na);p-cputime=O;p-needt ime=t i

17、me;p-count二0; /*計數(shù)器*/p-stdte二飛;p-round=2;/ *時間片*/if(ready!=NULL) insert2(p);elseout put of priority: nzz):out put of roundnzz);p-next=ready;ready=p;tail=p;clrscr ();printf(,zpp intf( *n)prt (alg) ;/*輸出進程PCB信息*/run二ready; /*將就緒隊列的第一個進程投入運行*/ready 二:ready-next;run-state=* R ;/*優(yōu)先數(shù)調(diào)度算法*/priority(char a

18、lg)while (run!=NULL) /*當運行隊列不空時,有進程正在運行*/runcput ime=run-cput ime+1;run-needtime二:run-needtimeT ;run-prio=run-prio-3; /*每運行一次優(yōu)先數(shù)降低3個單位*/ if (run-needtimeO) /*如所需時間為0將其插入完成隊列*/run-next=finish;finish=run;run-state二F ;/*置狀態(tài)為完成態(tài)*/run二NULL; /*運行隊列頭指針為空水/if (ready !=NULL) /*如就緒隊列不空*/f讓stin() ; /*將就緒對列的第一個

19、進程投入運行*/else /*沒有運行完同時優(yōu)先數(shù)不是最大,則將其變?yōu)榫途w態(tài)插入到就緒隊列*/if(ready!=NULL)&(run-prioready-prio)run-state二W;insert 1(run);firstinO ; /*將就緒隊列的第一個進程投入運行水/)prt (alg) : /*輸出進程PCB信息*/*時間片輪轉(zhuǎn)法*/roundrun(char alg)wh訂e(run!=NULL)run-cput ime=runcput ime+1;run-needtime二run-needtimeT ;run-count=run-count+1;if(run-needtime0

20、) /*運行完將其變?yōu)橥瓿蓱B(tài),插入完成隊列*/run-next二f inish;finish二run;run-state二F;run二NULL;if (ready!=NULL)firstinO; /*就緒對列不空,將第一個進程投入運行水/else辻(run-countrun-round) / 水如果時間片到*/run-count=0; /*計數(shù)器置 0*/if (ready !=NULL) /*如就緒隊列不空*/run-state二W ; /*將進程插入到就緒隊列中等待輪轉(zhuǎn)*/ insert2(run);f讓stin() ; /*將就緒對列的笫一個進程投入運行*/prt (alg) : /*輸

21、出進程信息*/*主函數(shù)*/main()char algo; /*算法標記*/clrscr ();printf (type the algorithm:P/R(priority/roundrobin) n,z): scanf C%c, &algo) ; /*輸入字符確定算法*/printf(Enter process numbern);scanf(%r,&N); /*輸入進程數(shù)*/if (algo* P? algo* p*)createl (algo) : /*優(yōu)先數(shù)法*/priority(algo);elseif (algo二二R algo=,r)create2 (algo): /*輪轉(zhuǎn)法*/

22、 roundrun(algo);第3章課程設(shè)計總結(jié)通過完成本次進程調(diào)度程序設(shè)汁的任務(wù),使我熟練和掌握了這學(xué)期所學(xué)的有關(guān) Turboc2. 0中的一些主要知識點和應(yīng)用點,如函數(shù)定義,語句的判斷等等。原來我還不 知道進程調(diào)度這個名詞,通過這次課程設(shè)訃,也讓我充分了解留什么是進程調(diào)度??梢?所學(xué)有所學(xué),所有所用,不至于自己所學(xué)知識山于沒有經(jīng)歷可用過程,而放棄對它的興 趣。本次作為一門軟件設(shè)計的課程,具有極強的實踐性,使我加強了靈活應(yīng)用理論知識 的能力及面向?qū)ο蟪绦蛟O(shè)計技能。此次,應(yīng)用程序的設(shè)計和創(chuàng)建,經(jīng)歷了平時在課堂中和考試中,決不會有的重重難 題和問題。而這些問題,乂都是課本上很少提到的、更深一層

23、的知識領(lǐng)域和應(yīng)用領(lǐng)域。 這些問題,并不是我們平時只靠課本,就可以輕易解決的。所以,鍛煉了我們面對難題, 自己思索,自己探索,自己查資料發(fā)現(xiàn)問題、解決問題的獨斷能力。當然,此次任務(wù)的完成,也體現(xiàn)出同學(xué)之間的團結(jié)精神。所遇種種難以解決的問題, 大家都會把它當作共同遇到的問題,在一起共同探討,共同發(fā)揮自己所學(xué)和所知,投入 式的互相幫助和解決困難。“實踐是檢驗真理的唯一標準”。沒有實踐,就不會發(fā)現(xiàn)和深刻體會它的真實所在。 只有通過檢驗的真理,在自己的心里,才會認可它的真實性。面向?qū)ο蟪绦蛟O(shè)計的完成, 使我們懂得了真理的重要性,理論和實際的相結(jié)合,才能真正把握所學(xué)和所掌握的知識。理論的擁有并不能代表我們的實力和能力,一切的事件和其成功都是理論和實踐的 結(jié)合??傊覀儗W(xué)習和掌握的知識,只有通過實際應(yīng)用,才能真正的理解和掌握,才 能更好的去應(yīng)用。在為期不到兩周的課程設(shè)計中,我體會頗多,學(xué)到很多東西。我懂得了如何用 Turboc2. 0編寫應(yīng)用程序,我加強了對,利用設(shè)計這次簡單計算器的機會的認識,復(fù)習 了自己以前的知識,自己的邏輯思考能力也提高不少。從而對Turboc2. 0 乂有了更深入 的認識!在這次課程設(shè)計中,我還懂得了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論