版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《高級語言程序設(shè)計》</p><p><b> 課程設(shè)計報告</b></p><p><b> 目 錄</b></p><p> 11 設(shè)計目的及要求3</p><p> 1.1 設(shè)計目的3</p><p> 1.2 課程設(shè)計的實驗環(huán)境
2、3</p><p> 1.3 課程設(shè)計的預(yù)備知識3</p><p> 1.4 課程設(shè)計要求3</p><p> 2課程設(shè)計內(nèi)容3</p><p> 2.1程序功能介紹3</p><p> 2.2程序整體設(shè)計說明4</p><p> 2.2.1設(shè)計思路4</p&g
3、t;<p> 2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明5</p><p> 2.2.3程序結(jié)構(gòu)(流程圖)5</p><p> 2.2.4各模塊的功能及程序說明6</p><p> 2.2.5程序運行結(jié)果7</p><p><b> 3總結(jié)9</b></p><p>&l
4、t;b> 參考資料11</b></p><p><b> 程序源代碼12</b></p><p><b> 1 設(shè)計目的及要求</b></p><p><b> 1.1 設(shè)計目的</b></p><p> 本課程設(shè)計是計算機(jī)科學(xué)與技術(shù)專業(yè)重要的實
5、踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計語言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計的目的和任務(wù): </p><p> 1. 鞏固和加深學(xué)生對C語言課程的基本知識的理解和掌握 </p><p> 2. 掌握C語言編程和程序調(diào)試的基本技能 </p><p> 3. 利用C語言進(jìn)行基本的軟件設(shè)計</p><p> 4. 掌握書寫程
6、序設(shè)計說明文檔的能力</p><p> 5. 提高運用C語言解決實際問題的能力</p><p> 1.2 課程設(shè)計的實驗環(huán)境</p><p> 硬件要求能運行Windows 2000/XP操作系統(tǒng)的微機(jī)系統(tǒng)。C語言程序設(shè)計及相應(yīng)的開發(fā)環(huán)境。</p><p> 1.3 課程設(shè)計的預(yù)備知識</p><p> 熟悉
7、C語言及C語言開發(fā)工具。</p><p> 1.4 課程設(shè)計要求</p><p> 1. 分析課程設(shè)計題目的要求2. 寫出詳細(xì)設(shè)計說明3. 編寫程序代碼,調(diào)試程序使其能正確運行4. 設(shè)計完成的軟件要便于操作和使用5. 設(shè)計完成后提交課程設(shè)計報告</p><p><b> 課程設(shè)計內(nèi)容</b></p><p&g
8、t;<b> 2.1程序功能介紹</b></p><p> 在多道程序環(huán)境下,進(jìn)程數(shù)目往往多于處理機(jī)數(shù)目,致使他們爭用處理機(jī)。這就要求系統(tǒng)能按某種算法,動態(tài)地把處理機(jī)分配給就緒隊列中的一個進(jìn)程,使之運行。分配處理機(jī)的任務(wù)是由進(jìn)程調(diào)度程序完成的。一個進(jìn)程被建立后,系統(tǒng)為了便于對進(jìn)程進(jìn)行管理,將系統(tǒng)中的所有進(jìn)程按其狀態(tài),將其組織成不同點進(jìn)程隊列。于是系統(tǒng)中有運行進(jìn)程隊列、就緒隊列和各種事件的
9、進(jìn)程等待隊列。進(jìn)程調(diào)度的功能就是從就緒隊列中挑選一個進(jìn)程到處理機(jī)上運行。</p><p> 2.2程序整體設(shè)計說明</p><p> 用C語言實現(xiàn)進(jìn)程調(diào)度-操作系統(tǒng)課程設(shè)計設(shè)計思想: “最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法的基本思想是把cpu分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程。采用動態(tài)優(yōu)先數(shù),即優(yōu)先數(shù)在創(chuàng)建進(jìn)程時給定一個初始值,當(dāng)進(jìn)程獲得一次cpu后其優(yōu)先數(shù)就減少1。它用C語言編寫的實現(xiàn)模擬進(jìn)程調(diào)度
10、的程序,用戶模擬幾個進(jìn)程,輸入它們的進(jìn)程名,優(yōu)先級,運行時間等,進(jìn)程的初使?fàn)顟B(tài)為就緒狀態(tài)。然后就按優(yōu)先級優(yōu)先方式調(diào)度各個進(jìn)程,進(jìn)程的狀態(tài)也因此會變成等待狀態(tài)或完成狀態(tài)。</p><p><b> 2.2.1設(shè)計思路</b></p><p> 進(jìn)程是當(dāng)前操作系統(tǒng)下一個被加載到內(nèi)存的、正在運行的應(yīng)用程序的實例。每一個進(jìn)程都是由內(nèi)核對象和地址空間所組成的,內(nèi)核對象可以讓
11、系統(tǒng)在其內(nèi)存放有關(guān)進(jìn)程的統(tǒng)計信息并使系統(tǒng)能夠以此來管理進(jìn)程,而地址空間則包括了所有程序模塊的代碼和數(shù)據(jù)以及線程堆棧、堆分配空間等動態(tài)分配的空間。進(jìn)程僅僅是一個存在,是不能獨自完成任何操作的,必須擁有至少一個在其環(huán)境下運行的線程,并由其負(fù)責(zé)執(zhí)行在進(jìn)程地址空間內(nèi)的代碼。在進(jìn)程啟動的同時即同時啟動了一個線程,該線程被稱作主線程或是執(zhí)行線程,由此線程可以繼續(xù)創(chuàng)建子線程。如果主線程退出,那么進(jìn)程也就沒有存在的可能了,系統(tǒng)將自動撤消該進(jìn)程并完成對其
12、地址空間的釋放。 </p><p> 加載到進(jìn)程地址空間的每一個可執(zhí)行文件或動態(tài)鏈接庫文件的映象都會被分配一個與之相關(guān)聯(lián)的全局唯一的實例句柄。該實例句柄實際是一個記錄有進(jìn)程加載位置的基本內(nèi)存地址。進(jìn)程的實例句柄在程序入口函數(shù)中通過第一個參數(shù)傳遞,其實際值即為進(jìn)程所使用的基本地址空間的地址。對于VC++鏈接程序所鏈接產(chǎn)生的程序,其默認(rèn)的基本地址空間地址為0x00400000,如沒有必要一般不要修改該值。
13、 通過創(chuàng)建一個新的進(jìn)程及在其地址空間內(nèi)運行的主線程來啟動并運行一個新的程序。具體的,在執(zhí)行函數(shù)時,首先由操作系統(tǒng)負(fù)責(zé)創(chuàng)建一個進(jìn)程內(nèi)核對象,初始化計數(shù)為1,并立即為新進(jìn)程創(chuàng)建一塊虛擬地址空間。隨后將可執(zhí)行文件或其他任何必要的動態(tài)鏈接庫文件的代碼和數(shù)據(jù)裝載到該地址空間中。在創(chuàng)建主線程時,也是首先由系統(tǒng)負(fù)責(zé)創(chuàng)建一個線程內(nèi)核對象,并初始化為1。最后啟動主線程并執(zhí)行進(jìn)程的入口函數(shù)RunProc(),完成對進(jìn)程和執(zhí)行線程的創(chuàng)建。</p>
14、<p> 2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明</p><p> 數(shù)據(jù)結(jié)構(gòu)設(shè)計:本程序運用了struct函數(shù),并用if語句判斷運行指針,用while循環(huán)語句確定插入位置。</p><p> typedef struct PCB{</p><p> char NAME[10]; //進(jìn)程名字</p><p> int
15、PRIO; //進(jìn)程優(yōu)先數(shù)</p><p> int ROUNT; //輪轉(zhuǎn)時間片</p><p> int COUNT; //計數(shù)器</p><p> int NEEDTIME; //需要的CPU時間</p><p> int CPUTIME; //占用cpu時間</p>
16、;<p> char *STATE; //進(jìn)程狀態(tài)</p><p><b> }ElemPCB;</b></p><p><b> 用法說明:</b></p><p> 1.進(jìn)程通過定義一個進(jìn)程控制塊的數(shù)據(jù)結(jié)構(gòu)(PCB)來表示; </p><p> 2.每個進(jìn)程需要
17、賦予進(jìn)程信息、進(jìn)程到達(dá)時間、進(jìn)程需要運行的總時間的屬性;</p><p> 3.在程序進(jìn)程中,以1為時間片單位; </p><p> 4.運行時,輸入5個進(jìn)程序列,按照進(jìn)程的信息輸出其執(zhí)行序列。</p><p> 2.2.3程序結(jié)構(gòu)(流程圖)</p><p> 2.2.4各模塊的功能及程序說明</p><p>
18、 ① 高級調(diào)度模塊:又稱作業(yè)調(diào)度。其主要功能是根據(jù)一定的算法,從輸人的一批作業(yè)中選出若干個作業(yè),分配必要的資源,如內(nèi)存、外設(shè)等,為它建立相應(yīng)的用戶作業(yè)進(jìn)程和為其服務(wù)的系統(tǒng)進(jìn)程(如輸人、輸出進(jìn)程),最后把它們的程序和數(shù)據(jù)調(diào)人內(nèi)存,等待進(jìn)程調(diào)度程序?qū)ζ鋱?zhí)行調(diào)度,并在作業(yè)完成后作善后處理工作。</p><p> ?、?中級調(diào)度模塊:又稱交換調(diào)度。為了使內(nèi)存中同時存放的進(jìn)程數(shù)目不至于太多,有時就需要把某些進(jìn)程從內(nèi)存中移
19、到外存上,以減少多道程序的數(shù)目,為此設(shè)立了中級調(diào)度。特別在采用虛擬存儲技術(shù)的系統(tǒng)或分時系統(tǒng)中,往往增加中級調(diào)度這一級。所以中級調(diào)度的功能是在內(nèi)存使用情況緊張時,將一些暫時不能運行的講程從內(nèi)存對換到外存上等待。當(dāng)以后內(nèi)存有足夠的空閑空間時,再將合適的進(jìn)程重新?lián)Q人內(nèi)存,等待進(jìn)程調(diào)度。引人中級調(diào)度的主要目的是為了提高內(nèi)存的利用率和系統(tǒng)吞吐量。它實際上就是存儲器管理中的對換功能 。</p><p> ③ 低級調(diào)度模塊:
20、又稱進(jìn)程調(diào)度。其主要功能是根據(jù)一定的算法將CPU分派給就緒隊列中的一個進(jìn)程。執(zhí)行低級調(diào)度功能的程序稱做進(jìn)程調(diào)度程序,由它實現(xiàn)CPU在進(jìn)程間的切換。進(jìn)程調(diào)度的運行頻率很高,在分時系統(tǒng)中往往幾十毫秒就要運行一次。進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一種調(diào)度。在一般類型的操作系統(tǒng)中都必須有進(jìn)程調(diào)度,而且它的策略的優(yōu)劣直接影響整個系統(tǒng)的計能。 </p><p> 2.2.5程序運行結(jié)果</p><p>
21、<b> 1. 運行界面</b></p><p><b> 2.進(jìn)行調(diào)度界面</b></p><p><b> 總結(jié)</b></p><p> 通過做本實驗,讓我對進(jìn)程或作業(yè)先來先服務(wù)、高優(yōu)先權(quán)、按時間片輪轉(zhuǎn)調(diào)度算法以及進(jìn)程調(diào)度的概念和算法,有了更深入的認(rèn)識!初步理解了操作系統(tǒng)對于作業(yè)處理的基
22、本思想!對于時間片輪轉(zhuǎn)法的處理要比優(yōu)先級調(diào)度算法的理解要深。在實驗的過程中遇到了很多困難,感謝同學(xué)們的幫助。C語言在我的世界里占有的地位無所能及,雖然是有那么多的課程,那么多的紛擾,我最喜歡的還是C語言,因為它是直接面對問題,無所畏懼,在眾多的計算機(jī)學(xué)科中,C語言依舊是帝王!</p><p> 我手里捧著它,感到它是如此有分量。當(dāng)你必須要失去,唯一可以做的就是不要忘記!我首先覺得,用到的程序段不必太高級,因為天
23、下事有高低之分,決定優(yōu)劣的不是集體中某部分的強(qiáng)弱,起決定作用的是組合內(nèi)各元素的和諧,要能在一個集體中各能盡其用,每個人都能發(fā)揮長處,避免自己的短處,那么這個集體的實際組合能量是最優(yōu)的。選擇什么等級的語言就是關(guān)鍵,最后我決定運用文件,以及指針,去實現(xiàn)自己的構(gòu)想。文章設(shè)計有幾個要求:要能錄入新的文檔,要能刪除不需要的文檔,要能按照關(guān)鍵字查找已有的文檔,要能按照要求的順序進(jìn)行排序。我的理解是:必須建立一個文件,它既能夠保存新的錄入文檔,又能在
24、提示語言的要求下讀出文檔。</p><p> 然而,這只是萬里長征的第一步。后面的路還很長,困難還很多,可是我能成功的編譯一個程序,能夠在思路卡殼的情況下,繼續(xù)前進(jìn),我在此很想感謝那些給予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個日夜,如此多的困難,同學(xué)們勤懇塌實,從開始到結(jié)束,沒有顯出一點倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。</p><
25、;p> 在課程設(shè)計過程中,我學(xué)到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒,黑夜過去了,我們收獲的是黎明。在本次實踐中,給我印象最為深刻的是在文件刪除程序的編譯過程中,先有我的各個子程序都已經(jīng)編輯成功,那么這最后的程序就將是我成功的關(guān)鍵。老天不會讓我太過順利,他在這最后的時刻設(shè)置的障礙,是要考驗我的能力,他要置我于死地?在這個問題的解決上,我打了退堂鼓,我不能忍
26、受長時間的無功而反,時間正在消磨我的意志。沒有了柳暗花明的一天,那么我怎么能說經(jīng)受住了考驗?我鼓起勇氣,到處問,到處查資料,黃天不負(fù)有心人,在一篇文章上,終于看到了我所特別要求的函數(shù),我實現(xiàn)了組合是關(guān)鍵的理論。不得不說這是精神的勝利,是永不言敗的精神。</p><p><b> 參考資料</b></p><p> [1] 譚浩強(qiáng).C程序設(shè)計題解與上機(jī)指導(dǎo).北京:清
27、華大學(xué)出版社,2009 </p><p> [2] 廖雷.C語言程序設(shè)計.北京:高等教育出版社,2006</p><p> [3] 賈學(xué).宋海民.C語言程序設(shè)計.北京:中國鐵道出版社,2007</p><p> [4] 趙海廷.C語言程序設(shè)計.北京:人民郵電出版社,2006.</p><p> [5] 范剛龍.王康平.C程序設(shè)計.武漢
28、:武漢理工大學(xué)出版社,2006</p><p> [6] 張強(qiáng)華. C 語言程序設(shè)計.北京:人民郵電出版社,2010</p><p> [7] 徐新華. C 語言程序設(shè)計教程.北京: 清華大學(xué)出版社,2010</p><p> [8] 譚浩強(qiáng). C 語言程序設(shè)計.北京: 清華大學(xué)出版社,2011</p><p> [9] 徐建民. C
29、 語言程序設(shè)計.北京: 電子工業(yè)出版社,2009</p><p> [10] 李大友. C 語言程序設(shè)計. 北京: 清華大學(xué)出版社,2008</p><p> [11] 畢萬新. C 語言程序設(shè)計.大連: 大連理工大學(xué)出版社,2005</p><p> [12] 劉 燕. C 語言程序設(shè)計.北京: 中國鐵道出版社,2008</p><p&g
30、t; [13] 廖 雷. C語言程序設(shè)計.北京: 高等教育出版社,2006</p><p> [14] 方少卿. C語言程序設(shè)計.北京: 中國鐵道出版社,2007</p><p> [15] 譚浩強(qiáng). C語言程序設(shè)計. 北京:清華大學(xué)出版社,2007</p><p><b> 程序源代碼</b></p><p>
31、 #include<stdio.h></p><p> #include<malloc.h></p><p> typedef int Status;</p><p> #define ERROR 0</p><p> #define OK 1</p><p> typedef st
32、ruct PCB{</p><p> char NAME[10]; //進(jìn)程名字</p><p> int PRIO; //進(jìn)程優(yōu)先數(shù)</p><p> int ROUNT; //輪轉(zhuǎn)時間片</p><p> int COUNT; //計數(shù)器</p><p> in
33、t NEEDTIME; //需要的CPU時間</p><p> int CPUTIME; //占用cpu時間</p><p> char *STATE; //進(jìn)程狀態(tài)</p><p><b> }ElemPCB;</b></p><p> typedef struct QNode{<
34、/p><p> ElemPCB pcb;</p><p> struct QNode *next;</p><p> }QNode, *QueuePtr;</p><p> typedef struct{ //就緒隊列</p><p> QueuePtr RUN; //當(dāng)前
35、運行進(jìn)程指針</p><p> QueuePtr READY; //頭指針</p><p> QueuePtr TAIL; //尾指針</p><p> }READYQueue;</p><p> typedef struct{ //完成隊列</p><p> Queu
36、ePtr FINISH; //頭指針</p><p> QueuePtr TAIL; //尾指針</p><p> }FINISHQueue;</p><p> Status Create(READYQueue &ready);</p><p> Status Print(READYQueue ready,FINIS
37、HQueue finish);</p><p> Status Printr(READYQueue ready,FINISHQueue finish);</p><p> Status Fisrt(READYQueue &ready);</p><p> Status Insert1(READYQueue &ready);</p>
38、<p> Status Insert2(READYQueue &ready);</p><p> Status Prisch(READYQueue &ready,FINISHQueue &finish);</p><p> Status Roundsch(READYQueue &ready,FINISHQueue &finish);
39、</p><p> void main(){</p><p><b> char ch;</b></p><p> READYQueue ready;</p><p> FINISHQueue finish;</p><p> ready.READY=ready.TAIL=(QueueP
40、tr)malloc(sizeof(QNode)); //存儲分配</p><p> ready.RUN=(QueuePtr)malloc(sizeof(QNode));</p><p> ready.RUN->next=NULL;</p><p> finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof
41、(QNode));</p><p> Create(ready);</p><p> //創(chuàng)建后就緒對列中</p><p> printf("\n就緒對列中初始值:\n");</p><p> Print(ready,finish);</p><p> Fisrt(ready);</
42、p><p> printf("請您輸入要選擇調(diào)度的算法為 \002 1.優(yōu)先數(shù)調(diào)度, \002 2.時間片輪轉(zhuǎn)法)請選擇算法(1 or 2):\n");</p><p><b> while(1){</b></p><p><b> do{</b></p><p> ch=g
43、etchar();</p><p> scanf("%c",&ch);</p><p><b> }</b></p><p> while(ch!='1' && ch!='2');</p><p> switch(ch){</p&g
44、t;<p><b> case '1':</b></p><p><b> //優(yōu)先數(shù)調(diào)度</b></p><p> Prisch(ready,finish);</p><p><b> break;</b></p><p><b&g
45、t; case '2':</b></p><p><b> //時間片輪轉(zhuǎn)法</b></p><p> Roundsch(ready,finish);</p><p><b> break;</b></p><p><b> }</b>&l
46、t;/p><p><b> }</b></p><p><b> }</b></p><p> Status Print(READYQueue ready,FINISHQueue finish){ //打印就緒隊列中的進(jìn)程狀態(tài)</p><p> Qu
47、euePtr p,q;</p><p> p=ready.READY;</p><p> q=finish.FINISH;</p><p><b> //運行中的進(jìn)程</b></p><p> if(ready.RUN->next!=NULL)</p><p><b>
48、{</b></p><p> printf("%s",ready.RUN->next->pcb.NAME);</p><p> printf(":%s\t",ready.RUN->next->pcb.STATE);</p><p> printf("這個優(yōu)先數(shù)是:%d\n&q
49、uot;,ready.RUN->next->pcb.PRIO);</p><p><b> }</b></p><p><b> //就緒隊列的進(jìn)程</b></p><p> while(p!=ready.TAIL){</p><p> printf("%s"
50、,p->next->pcb.NAME);</p><p> printf(":%s\t",p->next->pcb.STATE);</p><p> printf("這個優(yōu)先數(shù)是:%d\n",p->next->pcb.PRIO);</p><p> p=p->next;</
51、p><p><b> }</b></p><p><b> //完成隊列的進(jìn)程</b></p><p> while(q!=finish.TAIL){</p><p> printf("%s",q->next->pcb.NAME);</p><
52、p> printf(":%s\t",q->next->pcb.STATE);</p><p> printf("這個優(yōu)先數(shù)是:%d\n",q->next->pcb.PRIO);</p><p> q=q->next;</p><p><b> }</b><
53、/p><p> return OK;</p><p><b> }</b></p><p> Status Printr(READYQueue ready,FINISHQueue finish){ //打印就緒隊列中的進(jìn)程狀態(tài)</p><p> QueuePtr p,q;
54、</p><p> p=ready.READY;</p><p> q=finish.FINISH;</p><p><b> //運行中的進(jìn)程</b></p><p> if(ready.RUN->next!=NULL)</p><p><b> {</b>
55、</p><p> printf("%s",ready.RUN->next->pcb.NAME);</p><p> printf(":%s\t",ready.RUN->next->pcb.STATE);</p><p> printf("進(jìn)程剩余時間為:%d\n",ready
56、.RUN->next->pcb.NEEDTIME);</p><p><b> }</b></p><p><b> //就緒隊列的進(jìn)程</b></p><p> while(p!=ready.TAIL){</p><p> printf("%s",p->
57、;next->pcb.NAME);</p><p> printf(":%s\t",p->next->pcb.STATE);</p><p> printf("進(jìn)程剩余時間為:%d\n",p->next->pcb.NEEDTIME);</p><p> p=p->next;</p
58、><p><b> }</b></p><p><b> //完成隊列的進(jìn)程</b></p><p> while(q!=finish.TAIL){</p><p> printf("%s",q->next->pcb.NAME);</p><p
59、> printf(":%s\t",q->next->pcb.STATE);</p><p> printf("進(jìn)程剩余時間為:%d\n",q->next->pcb.NEEDTIME);</p><p> q=q->next;</p><p><b> }</b>
60、</p><p> return OK;</p><p><b> }</b></p><p> Status Create(READYQueue &ready){</p><p> QueuePtr p;</p><p><b> int i=0 ;</b>
61、;</p><p><b> int n;</b></p><p> printf(" \n \002 您好,這個是C語言模擬進(jìn)程調(diào)度 \002 \n\n");</p><p> printf(" 您好! \002 \002 請輸入進(jìn)程的個數(shù):&qu
62、ot;);</p><p> scanf("%d",&n);</p><p> while(i<n)</p><p><b> {</b></p><p> p=(QueuePtr)malloc(sizeof(QNode));</p><p> prin
63、tf("請您輸入第%d進(jìn)程名:",i+1);</p><p> scanf("%s",p->pcb.NAME);</p><p> printf("請您輸入進(jìn)程需要的時間:");</p><p> scanf("%d",&p->pcb.NEEDTIME);<
64、;/p><p> printf("請您輸入進(jìn)程的進(jìn)程優(yōu)先數(shù):");</p><p> scanf("%d",&p->pcb.PRIO);</p><p> p->pcb.STATE="W";</p><p> p->pcb.ROUNT=2;</p&
65、gt;<p> p->pcb.COUNT=0;</p><p><b> i++;</b></p><p> p->next=NULL;</p><p> ready.TAIL->next=p;</p><p> ready.TAIL=p;</p><p>
66、;<b> }</b></p><p> return OK;</p><p><b> }</b></p><p> Status Fisrt(READYQueue &ready){</p><p> if(ready.READY==ready.TAIL)</p>
67、<p> return ERROR;</p><p> ready.RUN->next=ready.READY->next;</p><p> ready.RUN->next->pcb.STATE="RUN"; //修改進(jìn)程狀態(tài)</p><p> if(ready.TAIL==ready.READ
68、Y->next)</p><p> ready.READY=ready.TAIL;</p><p><b> else</b></p><p> ready.READY->next=ready.READY->next->next; //頭指針后移</p><p> printf(&quo
69、t;\n%s被從就緒隊列調(diào)度運行\(zhòng)n",ready.RUN->next->pcb.NAME);</p><p> return OK;</p><p><b> }</b></p><p> Status Insert1(READYQueue &ready){</p><p> in
70、t i=0,j=0;</p><p> QueuePtr p=ready.READY,q;</p><p> ElemPCB temp;</p><p> QueuePtr s=(QueuePtr)malloc(sizeof(QNode));</p><p> s->pcb=ready.RUN->next->pcb;
71、</p><p> s->next=NULL;//將未完成的進(jìn)程插入就緒隊列</p><p> ready.TAIL->next=s;</p><p> ready.TAIL=s;</p><p> //按優(yōu)先數(shù)從大到小排序</p><p> for(p;p!=ready.TAIL;p=
72、p->next)</p><p><b> {</b></p><p> for(q=p->next;q!=ready.TAIL;q=q->next)</p><p><b> {</b></p><p> if(p->next->pcb.PRIO < q
73、->next->pcb.PRIO)</p><p><b> {</b></p><p> temp=p->next->pcb;</p><p> p->next->pcb=q->next->pcb;</p><p> q->next->pcb=temp
74、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return OK;</p><p><b> }</b></p>&l
75、t;p> Status Insert2(READYQueue &ready){</p><p> QueuePtr p=ready.RUN->next;</p><p> if(p->pcb.NEEDTIME > 0)</p><p><b> {</b></p><p> re
76、ady.TAIL->next=p; //插入到就緒隊列</p><p> ready.TAIL=p;</p><p> ready.RUN->next=NULL;</p><p><b> }</b></p><p> return OK;</p><p><b>
77、; }</b></p><p> Status Prisch(READYQueue &ready,FINISHQueue &finish){</p><p><b> int i=0 ;</b></p><p> while(ready.RUN->next!=NULL)</p><p
78、><b> {</b></p><p> ready.RUN->next->pcb.CPUTIME++;</p><p> ready.RUN->next->pcb.NEEDTIME--;</p><p> ready.RUN->next->pcb.PRIO-=3;</p><
79、;p> if(ready.RUN->next->pcb.NEEDTIME==0)</p><p><b> {</b></p><p> finish.TAIL->next=ready.RUN->next; //插入到完成隊列</p><p> finish.TAIL=ready.RUN->n
80、ext; //尾指針后移</p><p> ready.RUN->next->pcb.STATE="FINISH";</p><p> ready.RUN->next=NULL;</p><p> if(ready.READY!=ready.TAIL)</p><p><b
81、> {</b></p><p> Fisrt(ready);</p><p><b> }</b></p><p><b> }</b></p><p> Else if(ready.READY!=ready.TAIL&&(ready.RUN->ne
82、xt->pcb.PRIO) < (ready.READY->next->pcb.PRIO))</p><p><b> {</b></p><p> ready.RUN->next->pcb.STATE="W";</p><p> printf("%s被調(diào)到就緒隊列里為\n
83、",ready.RUN->next->pcb.NAME);</p><p> Insert1(ready);</p><p> Fisrt(ready);</p><p><b> }</b></p><p><b> i++;</b></p><p
84、> printf("\n進(jìn)程執(zhí)行第%d個時間片的結(jié)果為:\n",i);</p><p> Print(ready,finish);</p><p><b> }</b></p><p> return OK;</p><p><b> }</b></p>
85、;<p> Status Roundsch(READYQueue &ready,FINISHQueue &finish){</p><p><b> int i=0;</b></p><p> while(ready.RUN->next!=NULL)</p><p><b> {</b
86、></p><p> ready.RUN->next->pcb.CPUTIME++;</p><p> ready.RUN->next->pcb.NEEDTIME--;</p><p> ready.RUN->next->pcb.COUNT++;</p><p> if(ready.RUN-&
87、gt;next->pcb.NEEDTIME==0)</p><p><b> {</b></p><p> finish.TAIL->next=ready.RUN->next; //插入到完成隊列</p><p> finish.TAIL=ready.RUN->next; //尾指針后移
88、</p><p> ready.RUN->next->pcb.STATE="FINISH";</p><p> ready.RUN->next=NULL;</p><p> if(ready.READY!=ready.TAIL)</p><p><b> {</b></
89、p><p> Fisrt(ready);</p><p><b> }</b></p><p><b> }</b></p><p> else if(ready.RUN->next->pcb.COUNT==ready.RUN->next->pcb.ROUNT)</
90、p><p><b> {</b></p><p> ready.RUN->next->pcb.COUNT=0;</p><p> if(ready.READY != ready.TAIL)</p><p><b> {</b></p><p> ready.
91、RUN->next->pcb.STATE="W";</p><p> printf("%s被調(diào)到就緒隊列里為\n",ready.RUN->next->pcb.NAME);</p><p> Insert2(ready);</p><p> Fisrt(ready);</p><
92、p><b> }</b></p><p><b> }</b></p><p><b> i++;</b></p><p> printf("\n進(jìn)程執(zhí)行第%d個時間片的結(jié)果為:\n",i);</p><p> Printr(ready,fi
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《高級語言程序設(shè)計》課程設(shè)計大綱
- 《高級語言程序設(shè)計》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度程序設(shè)計
- 進(jìn)程調(diào)度模擬程序課程設(shè)計
- 《高級語言程序設(shè)計》課程設(shè)計--英漢小詞典
- 高級語言程序設(shè)計模擬試題
- c語言程序設(shè)計課程設(shè)計
- 《高級語言程序設(shè)計》c++課程設(shè)計數(shù)值微分
- 《高級語言程序設(shè)計(一)》課程大綱
- 高級語言程序設(shè)計模擬試題2015
- 進(jìn)程調(diào)度模擬系統(tǒng)課程設(shè)計
- 匯編語言程序設(shè)計課程設(shè)計
- 《c語言程序設(shè)計》課程設(shè)計報告
- 匯編語言程序設(shè)計-課程設(shè)計
- c語言程序設(shè)計課程設(shè)計報告
- 高級語言程序設(shè)計c++課程答辯
- 進(jìn)程模擬調(diào)度算法課程設(shè)計
- 《高級語言程序設(shè)計》教案
- 高級語言程序設(shè)計(一)
- 《c++語言程序設(shè)計》課程設(shè)計報告
評論
0/150
提交評論