版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng) 操作系統(tǒng) 項(xiàng)目文檔報(bào)告進(jìn)程調(diào)度算法專 業(yè): 班 級: 指導(dǎo)教師: 姓 名: 學(xué) 號: 一、核心算法思想1.先來先服務(wù)調(diào)度算法先來先服務(wù)調(diào)度算法是一種最簡單的調(diào)度算法,該算法既可以用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。當(dāng)在作業(yè)調(diào)度中采用該算法時(shí),每次調(diào)度都是從后備作業(yè)隊(duì)列中選擇一個(gè)或多個(gè)最先進(jìn)入該隊(duì)列的作業(yè),將他們調(diào)入內(nèi)存,為它們分配資源、創(chuàng)建進(jìn)程,然后放入就緒隊(duì)列。在進(jìn)程調(diào)度中采用FCFS算法時(shí),則每次調(diào)度是從就緒隊(duì)列中選擇一個(gè)最先進(jìn)入該隊(duì)列的進(jìn)程,為之分配處理機(jī),使之投入運(yùn)行。該進(jìn)程一直運(yùn)行到完成或發(fā)生某事件而阻塞后才放棄處理機(jī)。FCFS算法比較有利于長作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程
2、)。2. 短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJ(P)F,是指對短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法。它們可以分別用于作業(yè)調(diào)度和進(jìn)程調(diào)度。短作業(yè)優(yōu)先(SJF)的調(diào)度算法是從后備隊(duì)列中選擇一個(gè)或若干個(gè)估計(jì)運(yùn)行時(shí)間最短的作業(yè),將它們調(diào)入內(nèi)存運(yùn)行。而短進(jìn)程(SPF)調(diào)度算法則是從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機(jī)再重新調(diào)度。SJ(P)F調(diào)度算法能有效地降低作業(yè)(進(jìn)程)的平均等待時(shí)間,提高系統(tǒng)吞吐量。該算法對長作業(yè)不利,完全未考慮作業(yè)的緊迫程度。3.高響應(yīng)比優(yōu)先調(diào)度算法在批處理系統(tǒng)中,短作業(yè)優(yōu)先算法是一種比
3、較好的算法,其主要不足之處是長作業(yè)的運(yùn)行得不到保證。如果我們能為每個(gè)作業(yè)引人動態(tài)優(yōu)先權(quán),并使作業(yè)的優(yōu)先級隨著等待時(shí)間的增加而以速率a提高,則長作業(yè)在等待一定的時(shí)間后,必然有機(jī)會分配到處理機(jī)。該優(yōu)先權(quán)的變化規(guī)律可描述為:優(yōu)先權(quán)=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間即 優(yōu)先權(quán)=響應(yīng)時(shí)間/要求服務(wù)時(shí)間如果作業(yè)的等待時(shí)間相同,則要求服務(wù)的時(shí)間越短,其優(yōu)先權(quán)越高,因而該算法有利于短作業(yè)。當(dāng)要球服務(wù)的時(shí)間相同時(shí),作業(yè)的優(yōu)先權(quán)決定于其等待時(shí)間,等待時(shí)間越長,優(yōu)先權(quán)越高,因而它實(shí)現(xiàn)的是先來先服務(wù)對于長作業(yè),作業(yè)的優(yōu)先級可以隨著等待時(shí)間的增加而提高,當(dāng)其等待時(shí)間足夠長時(shí),其優(yōu)先級便可以升到很高,從而也可獲得
4、處理機(jī)。4. 時(shí)間片輪轉(zhuǎn)算法在時(shí)間片輪轉(zhuǎn)算法中,系統(tǒng)將所有的就緒進(jìn)程按先來先服務(wù)的原則排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)數(shù)器發(fā)出時(shí)鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。這樣就可以保證就緒隊(duì)列中的所有進(jìn)程在一給定的時(shí)間內(nèi)均能獲得一時(shí)間片的處理機(jī)執(zhí)行時(shí)間。換言之,系統(tǒng)能在給定的時(shí)間內(nèi)響應(yīng)所有用戶的請求。二、核心算法流程圖1.先來先服務(wù)算法流程圖開始 創(chuàng)建進(jìn)程PCB按到達(dá)時(shí)間排序調(diào)用action,執(zhí)行進(jìn)程輸出結(jié)果結(jié)束2. 短
5、進(jìn)程優(yōu)先算法 開始獲取進(jìn)程信息按進(jìn)程越要時(shí)間排序調(diào)用action,執(zhí)行進(jìn)程輸出結(jié)果結(jié)束3.時(shí)間片輪轉(zhuǎn)算法開始 獲得進(jìn)程信息 調(diào)用時(shí)間片輪轉(zhuǎn)算法在每個(gè)時(shí)間片執(zhí)行程序大于0計(jì)算各進(jìn)程剩余時(shí)間等于0進(jìn)程結(jié)束4.髙響應(yīng)比優(yōu)先算法開始首先進(jìn)行第一個(gè)進(jìn)程計(jì)算剩余進(jìn)程的響應(yīng)比按優(yōu)先級排序運(yùn)行優(yōu)先級最高的進(jìn)程結(jié)束四、源代碼下面給出的是用C實(shí)現(xiàn)程序的源代碼:#include<stdio.h>#include <stdlib.h>#include <time.h>typedef struct pcb int name; int needtime; int arrivetime;
6、 int pri; int state; int cputime;plist;void action(plist * nowpro);void action(plist * nowpro) delay(1000); printf("now is process %d ",nowpro->name); nowpro->needtime-; if(nowpro->needtime=0) printf(" the process %d is endn",nowpro->name); /* nowpro->state=1; */ p
7、rintf("-n"); else printf("process %d needtime is %dn",nowpro->name,nowpro->needtime); printf("-n"); void creatpro(int n,plist * process ) int j; for(j=0;j<n;j+) = j; processj.needtime=rand()%10+1; processj.arrivetime=rand()%10; processj.pri=rand()%
8、4; processj.state=0; processj.cputime=0; void show( int n,plist * process) int j; for (j=0 ;j<n;j+) printf("name of process%dt",); printf("needtime %dt",processj.needtime); printf("arrivetime %dt",processj.arrivetime); printf("pri %dn",processj
9、.pri); printf("state %dt",processj.state); printf("cputime %dn",processj.cputime); void main() void creatpro(int n,plist * process ); void show( int n,plist * process); void fcfs(int n,plist * process); void sjf(int n,plist * process); void rr(int n,plist * pro1); void hrrn(int n
10、,plist * pro1); int n; /*the number of process*/ int k; plist process10; printf("please input the number of process from 0 to 10n"); scanf("%d",&n); creatpro(n,process); show(n,process); printf("please choose the what you want to usen"); printf("1 FCFSt 2 SJFt
11、3 HRRNt 4 RRn"); scanf("%d",&k); switch(k) case 1: fcfs(n,process); break; case 2: sjf(n,process); break; case 3: hrrn(n,process); break; case 4: rr(n,process); break; default : break; getch();void fcfs(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0; int
12、 time; plist temp; plist pro210; for(i=0;i<n;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; for(j=k+1;j<n;j+) if(temp.arrivetime>pro1j.arrivetime&&pro1j.state!=1) temp=pro1j; k=j; pro2m+=temp; pro1k.state=1; show(n,pro2); for(i=0;i<n;i+) while(pro2i.needtime>0) action(&pro2
13、i); void sjf(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0; plist temp; plist pro210; for(i=0;i<n;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; for(j=k+1;j<n;j+) if(temp.needtime>pro1j.needtime&&pro1j.state!=1) temp=pro1j; k=j; pro2m+=temp; pro1k.state=1;
14、 show(n,pro2); for(i=0;i<n;i+) while(pro2i.needtime>0) action(&pro2i); void rr(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0; int time; plist temp; plist pro210; for(i=0;i<n;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; for(j=k+1;j<n;j+) if(temp.arrivetime
15、>pro1j.arrivetime&&pro1j.state!=1) temp=pro1j; k=j; pro2m+=temp; pro1k.state=1; show(n,pro2); time=pro20.needtime; for(i=0;i<n;i+) if(time<pro2i.needtime) time=pro2i.needtime; while(time>0) for(i=0;i<n;i+) if(pro2i.needtime>0) action(&pro2i); time-; void hrrn(int n,plis
16、t * pro1) int cal(int a ,plist * pro2); int i,k,j,m; int curtime=0; plist temp; for(i=0;i<n;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; m=cal(curtime,&temp); for(j=0;j<n;j+) if(pro1j.state!=1) pro1j.pri=cal(curtime,&pro1j); if(m>pro1j.pri) temp=pro1j; m=pro1j.pri; k=j; while(pro1k.needtime>0) action(&pro1k); curtime+; pro1k.state=1; int cal(int a ,plist * pro2) int pr; if(a-pro2->arrivetime)<=0) pr=1; else pr=(a-pro2->arrivetime+pro2->needtime)/pro2->needtime
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考物理總復(fù)習(xí)專題八恒定電流實(shí)驗(yàn)九測定電源的電動勢和內(nèi)阻練習(xí)含答案
- 草莓購買合同
- 江蘇地區(qū)高一年級信息技術(shù)一年教案7資源管理器教案
- 江蘇地區(qū)高一年級信息技術(shù)一年教案26 IF語句教案
- 2024年高中政治 第一單元 公民的政治生活 第二課 我國公民的政治參與 3 民主管理:共創(chuàng)幸福生活教案1 新人教版必修2
- 2024-2025學(xué)年新教材高中物理 第七章 萬有引力與宇宙航行 4 宇宙航行(1)教案 新人教版必修2
- 2024-2025學(xué)年新教材高中地理 第3章 天氣的成因與氣候的形成 第2節(jié) 氣壓帶、風(fēng)帶對氣候的影響教案 中圖版選擇性必修第一冊
- 高考地理一輪復(fù)習(xí)第十二章環(huán)境與發(fā)展第二節(jié)中國國家發(fā)展戰(zhàn)略課件
- 寶寶防疫針委托書
- 人教A版廣東省深圳實(shí)驗(yàn)學(xué)校高中部2023-2024學(xué)年高一上學(xué)期第三階段考試數(shù)學(xué)試題
- 北京科技大學(xué)EMC-VNX5300實(shí)施文檔
- 高一女生青春期教育講座
- 氨分解制氫安全技術(shù)要求3
- 智慧農(nóng)業(yè)導(dǎo)論智慧樹知到答案章節(jié)測試2023年浙江農(nóng)林大學(xué)
- 知識產(chǎn)權(quán)保險(xiǎn)介紹
- 2023年重慶市大渡口區(qū)春暉路街道陽光社區(qū)工作人員考試模擬試題及答案
- 日本福島核電站事故案例環(huán)境倫理分析
- 孔子與《論語》智慧樹知到答案章節(jié)測試2023年曲阜師范大學(xué)
- 汽車維修結(jié)算單
- GA 1811.1-2022傳媒設(shè)施反恐怖防范要求第1部分:媒體機(jī)構(gòu)
- 醫(yī)學(xué)原蟲的檢驗(yàn) 藍(lán)氏賈第鞭毛蟲的檢驗(yàn)
評論
0/150
提交評論