進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告(共8頁(yè))_第1頁(yè)
進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告(共8頁(yè))_第2頁(yè)
進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告(共8頁(yè))_第3頁(yè)
進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告(共8頁(yè))_第4頁(yè)
進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告(共8頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上信息科學(xué)與技術(shù)學(xué)院實(shí)驗(yàn)報(bào)告課程名稱: 操作系統(tǒng)實(shí)驗(yàn) 實(shí)驗(yàn)項(xiàng)目: 進(jìn)程調(diào)度 實(shí)驗(yàn)地點(diǎn): 博西207 指導(dǎo)教師: 侯永莉 日期: 2017.11.24 實(shí)驗(yàn)類型: 驗(yàn)證性實(shí)驗(yàn) 專業(yè): 服務(wù)外包 班級(jí): 外二 姓名: 石順義_ 學(xué)號(hào): 一、實(shí)驗(yàn)?zāi)康募耙?. 理解進(jìn)程調(diào)度的概念和基本調(diào)度算法;2. 利用C語(yǔ)言實(shí)現(xiàn)掌握進(jìn)程算法FIFO,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法。二、實(shí)驗(yàn)儀器、設(shè)備或軟件1. 知識(shí)準(zhǔn)備:學(xué)過(guò)進(jìn)程管理、處理機(jī)調(diào)度等章節(jié)內(nèi)容.2. 硬件環(huán)境:個(gè)人計(jì)算機(jī)3. 軟件平臺(tái):Windows操作系統(tǒng),語(yǔ)言開(kāi)發(fā)環(huán)境VC+6.0.三、實(shí)驗(yàn)內(nèi)容及原理1. 實(shí)驗(yàn)原理1) F

2、IFO算法思想:處理機(jī)分配給最先進(jìn)入就緒隊(duì)列的進(jìn)程,一個(gè)進(jìn)程一旦分得處理機(jī),便執(zhí)行下去,直到該進(jìn)程完成或阻塞時(shí),才釋放處理機(jī)。2) 優(yōu)先數(shù)算法思想:優(yōu)先數(shù)(priority number)是一個(gè)與進(jìn)程關(guān)聯(lián)的固定區(qū)間的整數(shù),優(yōu)先級(jí)確定可由系統(tǒng)內(nèi)部定義或由外部指定。優(yōu)先選擇就緒隊(duì)列中最高優(yōu)先權(quán)的進(jìn)程投入運(yùn)行。 非搶占式優(yōu)先級(jí)法:當(dāng)前占用CPU的進(jìn)程一直運(yùn)行下去,直到完成或因等待某事件而主動(dòng)讓出CPU時(shí),系統(tǒng)才讓另一個(gè)優(yōu)先級(jí)高的進(jìn)程占用CPU。 搶占式優(yōu)先級(jí)法:立刻停止當(dāng)前進(jìn)程,強(qiáng)行將CPU分配給優(yōu)先級(jí)高的進(jìn)程。3) 時(shí)間片輪轉(zhuǎn)算法思想:把CPU時(shí)間劃分成若干小單位-時(shí)間片,按順序賦給就緒隊(duì)列中的每

3、一個(gè)進(jìn)程,進(jìn)程輪流占有CPU,當(dāng)時(shí)間片用完時(shí),進(jìn)程被搶占并加入就緒隊(duì)列尾;即使未執(zhí)行完,系統(tǒng)也剝奪該進(jìn)程的CPU,將該進(jìn)程排在就緒隊(duì)列末尾,同時(shí)系統(tǒng)選擇另一個(gè)進(jìn)程運(yùn)行。2. 實(shí)驗(yàn)內(nèi)容:這個(gè)實(shí)驗(yàn)主要考慮三個(gè)問(wèn)題:如何組織進(jìn)程、如何創(chuàng)建進(jìn)程和如何實(shí)現(xiàn)處理器調(diào)度??紤]如何組織進(jìn)程,首先就要設(shè)定進(jìn)程控制塊的內(nèi)容。進(jìn)程控制塊PCB記錄各個(gè)進(jìn)程執(zhí)行時(shí)的情況。不同的操作系統(tǒng),進(jìn)程控制塊記錄的信息內(nèi)容不一樣。操作系統(tǒng)功能越強(qiáng),軟件也越龐大,進(jìn)程控制塊記錄的內(nèi)容也就越多。這里的實(shí)驗(yàn)只使用了必不可少的信息。一般操作系統(tǒng)中,無(wú)論進(jìn)行控制塊中信息量多少,信息都可以大致分為以下四類:標(biāo)識(shí)信息、管理信息、現(xiàn)場(chǎng)信息、說(shuō)明信

4、息。編寫(xiě)代碼實(shí)現(xiàn)下面三種算法的任意一種FIFO,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法。四、實(shí)驗(yàn)步驟(或過(guò)程) 利用軟件vc+6.0,將程序代碼輸入,執(zhí)行后依次輸入七個(gè)數(shù)字組成pcb,執(zhí)行結(jié)果如下。 五、實(shí)驗(yàn)結(jié)論1、實(shí)驗(yàn)結(jié)果 2、程序分析 實(shí)驗(yàn)中,進(jìn)程控制塊隊(duì)列采用單向不循環(huán)靜態(tài)鏈表。該程序標(biāo)識(shí)符采用編號(hào)方式,為每個(gè)進(jìn)程依次分配一個(gè)不相同的正整數(shù),使用進(jìn)程控制塊模擬進(jìn)程,僅包括進(jìn)程狀態(tài),用大寫(xiě)的全局變量AX、BX、CX、DX模擬通用寄存器、大寫(xiě)的全局變量PC模擬程序計(jì)數(shù)器、大寫(xiě)的全局變量PSW模擬程序狀態(tài)字寄存器。確定進(jìn)程控制塊內(nèi)容后,由于實(shí)驗(yàn)?zāi)M的是進(jìn)程調(diào)度,沒(méi)有對(duì)等待隊(duì)列的操作,所以實(shí)驗(yàn)中只有

5、一個(gè)指向正在運(yùn)行進(jìn)程的進(jìn)程控制塊指針和一個(gè)就緒進(jìn)程控制塊隊(duì)列指。六、實(shí)驗(yàn)程序設(shè)計(jì)代碼如下:#include<iostream>#include<stdio.h>#include<malloc.h>using namespace std;enum process_statusREADY , RUN , FINISH; /進(jìn)程的三種狀態(tài)/定義進(jìn)程數(shù)據(jù)結(jié)構(gòu)typedef struct pcb char process_tag20 ; /存儲(chǔ)進(jìn)程標(biāo)識(shí)符 struct pcb *next ; /連接下一個(gè)進(jìn)程的指針 int priority_num ; /優(yōu)先調(diào)度算法

6、中為優(yōu)先級(jí) , 輪轉(zhuǎn)調(diào)度算法中為輪轉(zhuǎn)時(shí)間片 int take_cpu_time ; /占用CPU時(shí)間片數(shù) int process_time ; /進(jìn)程所需時(shí)間片數(shù) process_status status ; /進(jìn)程當(dāng)前的狀態(tài) PCB ;/定義進(jìn)程控制塊的鏈結(jié)構(gòu)typedef struct PCB *run ; /當(dāng)前運(yùn)行的進(jìn)程指針 PCB *ready ; /當(dāng)前準(zhǔn)備隊(duì)列的頭指針 PCB *tail ; /準(zhǔn)備隊(duì)列的隊(duì)尾指針 PCB *finish ; /完成隊(duì)列的指針 PCBC ;void init_pcbc(PCBC *p) p->run = NULL ; p->ready

7、 = NULL ; p->tail = NULL ; p->finish = NULL ;/輸入進(jìn)程,并加入就緒隊(duì)列void input_process(PCBC *pcbc) PCB *pcb ; pcb = (PCB*)malloc(sizeof(PCB) ; printf("請(qǐng)輸入進(jìn)程標(biāo)識(shí)符:") ; scanf("%s" , &pcb->process_tag) ; printf("輸入格式為: (優(yōu)先級(jí),占用CPU時(shí)間片數(shù),進(jìn)程所需時(shí)間片數(shù)) : ") ; scanf("%d,%d,%d&

8、quot; , &pcb->priority_num , &pcb->take_cpu_time , &pcb->process_time) ; pcb->status = READY ; /初始化就緒狀態(tài) /當(dāng)就緒隊(duì)列為空時(shí) if(pcbc->ready = NULL && pcbc->tail = NULL) pcbc->ready = pcbc->tail = pcb ; pcb->next = NULL ; else /將新進(jìn)入的隊(duì)列加入隊(duì)尾 pcb->next = pcbc->t

9、ail->next ; pcbc->tail->next = pcb ; pcbc->tail = pcb ; void swapx(PCB * p1 , PCB *p2) int i , priority_num , take_cpu_time , process_time ; char temp ; /進(jìn)行標(biāo)識(shí)符的交換 for(i = 0 ; i < 20 ; i+) temp = p1->process_tagi; p1->process_tagi = p2->process_tagi ; p2->process_tagi = tem

10、p ; /優(yōu)先值的交換 priority_num = p1->priority_num ; p1->priority_num = p2->priority_num ; p2->priority_num = priority_num ; /占用CPU時(shí)間片的交換 take_cpu_time = p1->take_cpu_time ; p1->take_cpu_time = p2->take_cpu_time ; p2->take_cpu_time = take_cpu_time ; /進(jìn)程所需時(shí)間片數(shù)的交換 process_time = p1-&g

11、t;process_time ; p1->process_time = p2->process_time ; p2->process_time = process_time ;/將就緒隊(duì)列按優(yōu)先級(jí)別大小進(jìn)行排序,按冒泡排序算法void sort_pcbc(PCBC *pcbc , int pcb_num) PCB *p , *p1 ; p = pcbc->ready ; for(p = pcbc->ready ; p != NULL ; p = p->next) for(p1 = p->next ; p1 != NULL ; p1 = p1->n

12、ext) if(p->priority_num < p1->priority_num) swapx(p , p1) ; /只是進(jìn)行指針內(nèi)部數(shù)據(jù)的交換,不改變指針指向 /* *打印當(dāng)前進(jìn)程控制塊中的情況 */ void print_log(PCBC *pcbc) PCB *ready , *finish ; ready = pcbc->ready ; finish = pcbc->finish ; printf("- n") ; printf("Run: n") ; if(pcbc->run != NULL) print

13、f("%s %04d %04d %04d n" , pcbc->run->process_tag ,pcbc->run->priority_num , pcbc->run->take_cpu_time , pcbc->run->process_time) ; else printf("Run is empty! n") ; printf("Ready:n") ; while(ready != NULL) printf("%s %04d %04d %04d n" , r

14、eady->process_tag ,ready->priority_num , ready->take_cpu_time , ready->process_time) ; ready = ready->next ; printf("Finish:n") ; while(finish != NULL) printf("%s %04d %04d %04d n" , finish->process_tag ,finish->priority_num , finish->take_cpu_time , finis

15、h->process_time) ; finish = finish->next ; /* *運(yùn)行進(jìn)程控制塊 */ void run_pcbc_priority(PCBC *xpcbc) PCBC *pcbc = xpcbc ; PCB *temp , *pre , *tail ; /進(jìn)行那個(gè)CPU的循環(huán)調(diào)用 while(pcbc->ready != NULL) pcbc->run = pcbc->ready ; /將就緒隊(duì)列隊(duì)首加入運(yùn)行隊(duì)列 pcbc->ready = pcbc->ready->next ; /改變隊(duì)首元素 print_log(

16、pcbc) ; pcbc->run->priority_num -= 3 ; pcbc->run->process_time -= 1 ; if(pcbc->run->process_time = 0) if(pcbc->finish = NULL) pcbc->finish = pcbc->run ; pcbc->finish->next = NULL ; tail = pcbc->finish ; else tail->next = pcbc->run ; tail = tail->next ; ta

17、il->next = NULL ; else if(pcbc->ready != NULL) temp = pcbc->ready ; while(temp != NULL) if(pcbc->run->priority_num > temp->priority_num) break ; pre = temp ; temp = temp->next ; if(temp = pcbc->ready) pcbc->run->next = pcbc->ready ; pcbc->ready = pcbc->run ; else pcbc->run->next = pre->next ; pre->next = pcbc->run ; else pcbc->ready = pcbc->run ; pcbc->run = NULL ; print_log(pcbc) ; int main() PCBC *pcbc ; /創(chuàng)建進(jìn)程控制塊鏈 ; int pcb_num ; /記錄處理進(jìn)程數(shù)目 pcbc = (PCBC*)malloc(sizeof(PCBC) ; printf("請(qǐng)輸入要處理的進(jìn)程數(shù)目: ") ; sc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論