




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 衡陽師范學院工科課程設計 -操作系統(tǒng)課程設計報告 題 目: 優(yōu)先數(shù)調度算法的實現(xiàn) 學 號: 14450139 姓 名: 魯向陽 班 級: 14級物聯(lián)網班 指導教師: 陳瓊老師 日 期: 2016年 12月 25 目錄1.概述21.1設計目的21.2運行環(huán)境31.3任務分配32.需求分析42.2題目內容42.2設計思想說明42.3數(shù)據(jù)結構設計63.算法的設計73.1頭文件聲明73.2定義各種變量73.3相關函數(shù)的定義73.4程序運行流程圖103.5方案設計流程圖113.6進程控制塊PCB結構123.7進程控制塊鏈結構124.實例135.總結146.附錄16參考文獻241.概述1.1設
2、計目的 在操作系統(tǒng)中調度算法的實質是一種資源的分配,因而調度算法是指“根據(jù)系統(tǒng)資源分配策略所規(guī)定的資源分配算法”。對于不同的操作系統(tǒng)和系統(tǒng)目標,通常采用不同的調度算法。為了照顧緊迫作業(yè),使之在進入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權調度算法。作為進程調度算法時,該算法是把處理機分配給就緒隊列優(yōu)先權最高的進程。這可以分為搶占式優(yōu)先權算法和非搶占式優(yōu)先權算法。對于最高優(yōu)先權調度算法,其關鍵在于:它是使用靜態(tài)優(yōu)先權還是動態(tài)優(yōu)先權,以及如何確定進程的優(yōu)先權。動態(tài)優(yōu)先權擁有其特有的靈活優(yōu)點,同時,若所有的進程都具有相同的優(yōu)先權初值,則顯然是最先進入就緒隊列的進程,將因其動態(tài)優(yōu)先權變得高而優(yōu)先獲得處理機
3、,此即FCFS算法。若所有的就緒進程具有各不相同優(yōu)先權初值,那么,對于優(yōu)先權初值低的進程,在等待了足夠長的時間后,其優(yōu)先權便可能升為最高,從而獲得處理機。當采用搶占式優(yōu)先權調度算法時,如果規(guī)定當前進程的優(yōu)先權以一定速率下降,則可防止一個長作業(yè)長期壟斷處理機。1.2運行環(huán)境硬件機器:pc計算機語言:C+(使用自己學習的)編譯環(huán)境:visual studio 20101.3任務分配 1)理解掌握進程調度實現(xiàn)所涉及到的主要問題:如何組織進程、如何實現(xiàn)處理機調度。進程控制塊的作用和結構,進程控制塊的鏈表組織。進程調度程序包含從進程就緒隊列選擇并摘取進程、給該進程分配處理機。2)設計進程控制塊相關數(shù)據(jù)結
4、構,進程狀態(tài)躍遷的相關模擬;3)實現(xiàn)優(yōu)先調度算法模擬程序設計、編碼及調試。2.需求分析2.2題目內容編寫程序,采用優(yōu)先權調度算法實現(xiàn)單處理機系統(tǒng)對進程的調度過程。2.2設計思想說明模擬動態(tài)優(yōu)先權算法,在主函數(shù)中選擇采用搶占式進程調度算法,再調用優(yōu)先調度算法完成模擬。1.設定系統(tǒng)中有五個進程,每一個進程用一個進程控制塊(PCB)表示,隊列的每一個結點都是一種結構體,結構體名稱定義為進程模塊。2.進程控制塊包含如下信息:進程編號、需要運行時間、已用CPU時間等等。3.在每次運行設計的處理調度程序之前,由終端輸入五個進程的“進入就緒隊列時間”和“要求運行時間”。4.進程的進入就緒隊列時間及需要的運行
5、時間人為地指定.進程的運行時間以時間片為單位進行計算。5.將五個進程按給定進程的時間片從小到大連成就緒隊列,當?shù)谝粋€進程進去的時候,它就執(zhí)行當前進程,在執(zhí)行的過程中,可能有另一個進程進入,進入之后,當前的進程就會進行更新,更新它所有的信息,就把它放入運行隊列,使當前運行的剩余時間為零,為零之后就把當前的資源釋放掉,這時候就從就緒隊列里面取出進程的隊頭,作為當前運行的進程。尋找的過程中,采用的是隊列的遍歷,每遍歷一個進程的時候,就對當前進程的剩余時間進行更新并記錄這個隊頭。6.處理機調度總是選隊列首進程運行。進程每運行一次剩余時間減“1”,同時將已運行時間加“1”。7.進程運行一次后,若要求運行
6、時間不等于已運行時間,則再將它加入就緒隊列;否則將其狀態(tài)置為“結束”,且退出就緒隊列。8.“就緒”狀態(tài)的進程隊列不為空,則重復上面6,7步驟,直到所有進程都成為“結束”狀態(tài)。9.在設計的程序中有輸入語句,輸入5個進程的“進入就緒隊列時間”和“要求運行時間”,也有顯示或打印語句,能顯示或打印進程的平均等待時間和平均周轉時間。10.最后,為五個進程任意確定一組“進入就緒隊列時間”和“要求運行時間”,運行并調試所設計的程序,顯示或打印出逐次被選中進程的進程序號。2.3數(shù)據(jù)結構設計設定系統(tǒng)中有五個進程,每一個進程用一個進程控制塊(PCB)表示,隊列的每一個結點都是一種結構體,結構體名稱定義為進程模塊。
7、建立好進程控制模塊之后,進程就已按時間片從小到大的順序排成了就緒隊列。typedef struct nodechar name10; /進程標志符int prio; /進程優(yōu)先數(shù)int cputime; /進程占用cpu時間int needtime; /進程到完成還要的時間char state; /進程的狀態(tài)struct node *next; /鏈指針PCB;3.算法的設計3.1頭文件聲明#include<stdio.h>/*標準io庫*/#include<stdlib.h>/*該文件包含了C語言標準庫函數(shù)的定義*/#include<string.h>/*
8、一種常用的編譯預處理指令,在使用到字符數(shù)組時需要使用*/3.2定義各種變量char name10; /進程標志符int prio; /進程優(yōu)先數(shù)int cputime; /進程占用cpu時間int needtime; /進程到完成還要的時間char state; /進程的狀態(tài)struct node *next; /鏈指針3.3相關函數(shù)的定義/優(yōu)先數(shù)的算法插入算法void insert1(PCB *q)PCB *p1,*s,*r;int b;s=q; /待插入的PCB指針p1=ready; /就緒隊列頭指針r=p1; /r做p1的前驅指針b=1;while(p1!=NULL)&&
9、b) /根據(jù)優(yōu)先數(shù)確定插入位置if(p1->prio>=s->prio)r=p1;p1=p1->next;elseb=0;if(r!=p1) /如果條件成立說明插入在r與p1之間r->next=s;s->next=p1;elses->next=p1; /否則插入在就緒隊列的頭ready=s;/優(yōu)先數(shù)調度算法void priority(char alg)while(run!=NULL) /當運行隊列不空時,有進程正在運行run->cputime=run->cputime+1;run->needtime=run->needtime-
10、1;run->prio=run->prio-3; /每運行一次優(yōu)先數(shù)降低3個單位if(run->needtime=0) /如所需時間為0將其插入完成隊列run->next=finish;finish=run;run->state='F' /置狀態(tài)為完成態(tài)run=NULL; /運行隊列頭指針為空if(ready!=NULL) /如就緒隊列不空firstin(); /將就緒隊列的第一個進程投入運行else /沒有運行完同時優(yōu)先數(shù)不是最大,則將其變?yōu)?就緒態(tài)插入到就緒隊列if(ready!=NULL)&&(run->prio<
11、ready->prio)run->state='W'insert1(run);firstin(); /將就緒隊列的第一個進程投入運行prt(alg); /輸出進程PCB信息3.4程序運行流程圖圖3-13.5方案設計流程圖4圖3-23.6進程控制塊PCB結構進程ID鏈指針優(yōu)先數(shù)占用CPU時間片數(shù)進程所需時間片數(shù)進程狀態(tài)圖3-33.7進程控制塊鏈結構圖3-44.實例圖4-1圖4-25.總結這次的程序軟件基本上運行成功,這次數(shù)據(jù)結構課程設計讓我感觸很深,使我了解到的學習不應該只局限于課本,因為課本上只是很有限的一部分,所涉及的面也是狹窄的。但是怎樣在有限的范圍內學習到無限
12、的知識呢?那就要懂得自學,懂得充分利用身邊的資源。應該說,在這次的課程設計中學到了很多知識,這并不僅僅包括書本上的知識,更重要的是學會了如何去和別人交流,怎樣用語言去實現(xiàn)自己的想法,在這個過程中使我懂得了勤學好問的重要性。雖然在我的程序中有一部分是從網上搜索得來的,但我竭力將所獲得的信息變成自己的資源。在我動手上機操作的同時,我在了解和看懂的基礎上有所改變和創(chuàng)新,但是在我的程序軟件中還有部分的不足,需要加以更新。同時,通過這次課程設計,意識到了自己動手實踐的弱勢,特別是在編程方面,于是我知道了計算機的實踐操作是很重要的,只有通過上機編程才能充分的了解自己的不足。相信通過這次的課程設計,更讓我深
13、刻意識到學習中的弱點,同時也找到了克服這些弱點的方法,這也是一筆很大的資源。在以后的時間中,我應該利用更多的時間去上機實驗,多編寫程序,相信不久后我的編程能力都會有很大的提高。經過這次課程設計,通過對程序的編制,調試和運行,使我熟悉了各種調用的數(shù)據(jù)類型,在調試和運行過程中使我更加的了解和熟悉程序運行的環(huán)境,提高了我對程序調試分析的能力和對錯誤的糾正能力。這次操作系統(tǒng)的程序設計,對于我來說是一個挑戰(zhàn)。我對操作系統(tǒng)的學習在程序的設計中也有所體現(xiàn)。課程設計是培養(yǎng)學生綜合運用所學知識、發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。6.附錄#inclu
14、de<stdio.h>#include<stdlib.h>#include<string.h>typedef struct nodechar name10; /進程標志符int prio; /進程優(yōu)先數(shù)int cputime; /進程占用cpu時間int needtime; /進程到完成還要的時間char state; /進程的狀態(tài)struct node *next; /鏈指針PCB;PCB *finish,*ready,*tail,*run; /隊列指針int N; /進程數(shù)/將就緒隊列的第一個進程投入運行void firstin()run=ready;
15、/就緒隊列頭指針賦值給運行頭指針run->state='R' /進程狀態(tài)變?yōu)檫\行態(tài)ready=ready->next; /就緒列頭指針后移到下一進程/標題輸出函數(shù)void prt1(char a)printf("進程號 cpu時間 所需時間 優(yōu)先數(shù) 狀態(tài)n");/進程PCB輸出void prt2(char a,PCB *q) /優(yōu)先數(shù)算法輸出printf(" % -10s% -10d% -10d% -10d %cn",q->name,q->cputime,q->needtime,q->prio,q-&g
16、t;state);/輸出函數(shù)void prt(char algo)PCB *p;prt1(algo); /輸出標題if(run!=NULL) /如果運行標題指針不空prt2(algo,run); /輸出當前正在運行的PCBp=ready; /輸出就緒隊列PCBwhile(p!=NULL)prt2(algo,p);p=p->next;p=finish; /輸出完成隊列的PCBwhile(p!=NULL)prt2(algo,p);p=p->next;getchar(); /按任意鍵繼續(xù)/優(yōu)先數(shù)的算法插入算法void insert1(PCB *q)PCB *p1,*s,*r;int b;
17、s=q; /待插入的PCB指針p1=ready; /就緒隊列頭指針r=p1; /r做p1的前驅指針b=1;while(p1!=NULL)&&b) /根據(jù)優(yōu)先數(shù)確定插入位置if(p1->prio>=s->prio)r=p1;p1=p1->next;elseb=0;if(r!=p1) /如果條件成立說明插入在r與p1之間r->next=s;s->next=p1;elses->next=p1; /否則插入在就緒隊列的頭ready=s;/優(yōu)先數(shù)創(chuàng)建初始PCB信息void create1(char alg)PCB *p;int i,time;ch
18、ar na10;ready=NULL; /就緒隊列頭文件finish=NULL; /完成隊列頭文件run=NULL; /運行隊列頭文件printf("輸入進程號和運行時間:n"); /輸入進程標志和所需時間創(chuàng)建PCBfor(i=1;i<=N;i+)p=(PCB *)malloc(sizeof(PCB);scanf("%s",na);scanf("%d",&time);strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='w
19、39;p->prio=50-time;if(ready!=NULL) /就緒隊列不空,調用插入函數(shù)插入insert1(p);elsep->next=ready; /創(chuàng)建就緒隊列的第一個PCBready=p;/clrscr();printf(" 優(yōu)先數(shù)算法輸出信息:n");printf("*n");prt(alg); /輸出進程PCB信息run=ready; /將就緒隊列的第一個進程投入運行ready=ready->next;run->state='R'/優(yōu)先數(shù)調度算法void priority(char alg)while(run!=NULL) /當運行隊列不空時,有進程正在運行run->cputime=run->cputime+1;run->needtime=run->needtime-1;run->prio=run->prio-3; /每運行一次優(yōu)先數(shù)降低3個單位if(run->needtime=0) /如所需時間為0將其插入完成隊列run->next=finish;finish=run;run->st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵路旅客運輸服務鐵路旅客運輸服務質量規(guī)范72課件
- 雙語客運值班員車站的管理組織課件
- 鐵路工程安全技術石家莊鐵路33課件
- 外墻測量方案模板范本
- ARM Cortex-M3嵌入式開發(fā)及應用教與學 課件 第3、4章 STM32F103學習平臺;LED燈控制與KEIL MDK工程框架
- 市場營銷咨詢顧問合同范本
- 房屋修繕工程合同協(xié)議
- 宿州市重點中學2025屆初三下學期第二次考試英語試題試卷含答案
- 暫定場地租賃合同書
- 南寧理工學院《人工神經網絡》2023-2024學年第二學期期末試卷
- 2025年小學英語畢業(yè)模擬試卷:英語短劇表演腳本創(chuàng)意構思與舞臺排練試題
- 食堂節(jié)約管理制度規(guī)范
- 預留印鑒變更管理制度
- 2025年浙江省金華市九年級中考一模語文試題(含答案)
- 2024年江蘇事業(yè)單位真題下載
- 2024-2025學年江蘇省南京市竹山中學七年級下學期3月月考英語試題及答案
- (省統(tǒng)測)貴州省2025年4月高三年級適應性考試語文試卷(含答案解析)
- ISO27001:2022信息安全管理體系全套文件+表單
- 系統(tǒng)本地部署協(xié)議合同
- 2024年國家糧食和物資儲備局垂直管理系統(tǒng)事業(yè)單位招聘筆試真題
- 寶鋼熱鍍鋅鋼板產品手冊
評論
0/150
提交評論