2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論