




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中南大學(xué)實(shí)驗(yàn)名稱:處理機(jī)調(diào)度課程名稱:計(jì)算機(jī)操作系統(tǒng)學(xué)生姓名 盛希玲學(xué) 號(hào) 05學(xué) 院信息科學(xué)與工程學(xué)院專業(yè)班級(jí)電子信息工程0602完成時(shí)間2008 年10月12日錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽 錯(cuò)誤!未定義書(shū)簽?zāi)夸浺?實(shí)驗(yàn)內(nèi)容 . 二 實(shí)驗(yàn)?zāi)康?. 三 實(shí)驗(yàn)題目 . 四 基本思想 . 五 算法分析 . 六 流程圖 . 七 算法描述 . 八 運(yùn)行輸出結(jié)果 一 實(shí)驗(yàn)內(nèi)容選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度。二 實(shí)驗(yàn)?zāi)康亩嗟老到y(tǒng)中, 當(dāng)就緒進(jìn)程數(shù)大于處理機(jī)數(shù)時(shí), 須按照某種策略決定哪些進(jìn)程 優(yōu)先占用處理機(jī)。本
2、實(shí)驗(yàn)?zāi)M實(shí)現(xiàn)處理機(jī)調(diào)度,以加深了解處理機(jī)調(diào)度的工作。三 實(shí)驗(yàn)題目設(shè)計(jì)一個(gè)按優(yōu)先權(quán)調(diào)度和時(shí)間片輪轉(zhuǎn)算法實(shí)現(xiàn)處理機(jī)調(diào)度的程序。四 基本思想先選擇時(shí)間片的個(gè)數(shù)和每個(gè)時(shí)間片需要的時(shí)間, 正在運(yùn)行的進(jìn)程每運(yùn)行一秒 其優(yōu)先權(quán)數(shù)目加一, 即其優(yōu)先權(quán)減小。 每個(gè)時(shí)間片運(yùn)行結(jié)束后, 選擇進(jìn)入時(shí)間片 進(jìn)程優(yōu)先權(quán)數(shù)目最小的進(jìn)程,開(kāi)始下一個(gè)時(shí)間片的運(yùn)行。如果有進(jìn)程運(yùn)行結(jié)束, 則離開(kāi),再在就緒隊(duì)列中選擇優(yōu)先權(quán)數(shù)目最小的進(jìn)程進(jìn)入。 在運(yùn)行期間, 如果有 新的進(jìn)程來(lái)到,按優(yōu)先權(quán)大小放入就緒隊(duì)列中。五 算法分析定義一個(gè)結(jié)構(gòu)體,此包含了 PCB的信息:struct PCB1char PID5;/*進(jìn)程名 */int needt
3、ime;/*要求運(yùn)行的時(shí)間 */int cputime;/*已運(yùn)行時(shí)間 */int priority;/*優(yōu)先權(quán)(越小越高 )*/int starttime;/*進(jìn)入就緒隊(duì)列的時(shí)間 */int overtime;/*運(yùn)行完成的時(shí)間 */int state;/*狀態(tài):1 就緒 2運(yùn)行 3 完成*/struct PCB *next;子函數(shù) struct PCB *create(int num,int n) 用來(lái)建立一個(gè)按優(yōu)先級(jí)大小排 列的就緒進(jìn)程鏈表和一個(gè)按時(shí)間先后循序排列的將進(jìn)入就緒進(jìn)程的鏈表。main()函數(shù)中用一 while循環(huán)輸出進(jìn)入時(shí)間片的進(jìn)程狀態(tài)六流程圖七 算法描述進(jìn)程名 */ 要求運(yùn)
4、行的時(shí)間 */ 已運(yùn)行時(shí)間 */ 優(yōu)先權(quán)(越小越高 )*/ 進(jìn)入就緒隊(duì)列的時(shí)間 */運(yùn)行完成的時(shí)間 */ 狀態(tài):1 就緒 2運(yùn)行 3 完成*/struct PCB *head,*p,*p1,*p2; int i;head=NULL;/*for(i=1;i<=num;i+)/* printf("請(qǐng)輸入第c個(gè)進(jìn)程的信息n",i);/* 創(chuàng)建進(jìn)程,并將進(jìn)程按優(yōu)先級(jí)順序插入隊(duì)列中 */頭指針指零 */循環(huán)建立所有進(jìn)程 */#define NULL 0 #define LEN sizeof(struct PCB) #include"" #include&qu
5、ot;" struct PCB char PID5; /* int needtime; /* int cputime; /* int priority; /* int starttime; /* int overtime; /* int state; /* struct PCB *next;struct PCB *create(int num,int n)p=(struct PCB *)malloc(LEN); /* printf(" 進(jìn)程名 :");/*scanf("%s",p->PID);printf(" 要求運(yùn)行的時(shí)間 :
6、");/*scanf("%d",&p->needtime); p->cputime=0;/*printf(" 優(yōu)先權(quán) :");/*scanf("%d",&p->priority);if(n=1) p->starttime=0;/*elseprintf(" 進(jìn)入就緒隊(duì)列時(shí)間 :"); scanf("%d",&p->starttime); p->overtime=-1;/*為-1*/開(kāi)辟一個(gè)空間 */輸入進(jìn)程名 */輸入要運(yùn)行的時(shí)
7、間 */占用處理機(jī)的時(shí)間賦為零 */ 輸入優(yōu)先權(quán) */進(jìn)入就緒隊(duì)列的時(shí)間賦為零 */* 輸入進(jìn)入就緒隊(duì)列的時(shí)間 */運(yùn)行沒(méi)有結(jié)束所以運(yùn)行完成的時(shí)間賦p->state=1;/*p1=head;/*p1if(head=NULL) /* head=p;head->next=NULL; else /*狀態(tài)賦為就緒狀態(tài) */指針指向頭指針 */如果頭指針為零將頭指針指向新建立的進(jìn)程*/頭指針不為零的情況 */if(n=1)while(p1!=NULL&&p->priority>p1->priority) /* 查找插入點(diǎn) */ p2=p1;p1=p1->
8、;next;elsewhile(p1!=NULL&&p->starttime>p1->starttime) /* 查找插入點(diǎn) */ p2=p1;p1=p1->next;if(head=p1) /* 優(yōu)先權(quán)的值最小作為表頭 */ p->next=head;p2=head=p;else /* 否則的話插入 */ p2->next=p;p->next=p1;return(head);void main()char now5;int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;PCBs
9、truct *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;over=NULL;printf(" 初始化進(jìn)程 .n");printf(" 輸入總的就緒進(jìn)程數(shù) :");scanf("%d",&num);head=create(num,1); /* 建立就緒進(jìn)程的鏈表 */ printf(" 輸入將會(huì)就緒的進(jìn)程數(shù) :");scanf("%d",&num1); /* 建立將會(huì)進(jìn)入就緒進(jìn)程的鏈表 */
10、later=create(num1,2);printf("cpu是否開(kāi)始運(yùn)行 :1 是 2 不是 -");scanf("%d",&cho);if(cho=1) /* 處理機(jī)開(kāi)始進(jìn)行調(diào)度 */printf(" 現(xiàn)在的時(shí)間是: ");scanf("%s",now);printf(" 顯示所有就緒的進(jìn)程 :n");p2=head;printf(" 進(jìn)程名 t 要求運(yùn)行時(shí)間 t 已運(yùn)行時(shí)間 t 優(yōu)先權(quán) t 狀態(tài) (1 就緒 2 運(yùn) 行 3 結(jié)束 )n");while(p2!=
11、NULL)printf("%st%dtt%dtt%dt%dn",p2->PID,p2->needtime,p2->cputime ,p2->priority,p2->state);p2=p2->next;printf(" 請(qǐng)輸入時(shí)間片總數(shù) :");scanf("%d",&timepiece);printf(" 請(qǐng)輸入時(shí)間片的時(shí)間 :");scanf("%d",&time);printf(" 運(yùn)行正式開(kāi)始 !n");head1
12、=head;printf("tt 進(jìn)程名 t 要求運(yùn)行時(shí)間 t 已運(yùn)行時(shí)間 t 優(yōu)先權(quán) t 狀態(tài) n"); for(i=1;i<=timepiece;i+) /* 將進(jìn)入時(shí)間片運(yùn)行的進(jìn)程用頭指針 headl指示,并改變就緒進(jìn)程頭指針 head的指向*/if(head!=NULL)p=head; head=head->next;else break;p->next=NULL;while(head1!=NULL) /*head1->state=2; /*for(j=1;j<=time;j+) /*clock+; /*就緒進(jìn)程頭指針不為零就循環(huán) */
13、狀態(tài):1 就緒 2運(yùn)行 3 完成*/ 每個(gè)時(shí)間片所需時(shí)間的循環(huán) */定時(shí)器每秒加 1*/if(later!=NULL&&clock=later->starttime)/* 如果將進(jìn)入就緒隊(duì)列的進(jìn)程時(shí)間到達(dá)加入就緒隊(duì)列 */l=later;l1=head;later=later->next;if(head=NULL) head=l;head->next=NULL; elsewhile(l1!=NULL&&l1->priority<=l->priority)l2=l1;l1=l1->next;if(l1=head) l-&g
14、t;next=head; head=l;elsel2->next=l;l->next=l1;flag=0;printf("n%3d秒時(shí)間片第 4秒",clock,j);q=head1;if(head1->needtime>head1->cputime) /* 以運(yùn)行時(shí)間和優(yōu)先權(quán)都加 1*/ head1->cputime+;head1->priority+;while(q)/*運(yùn)行隊(duì)列不為零輸出其信息 */if(q=head1)printf("%st%dtt%dtt%dt%dn",q->PID,q->n
15、eedtime,q->cputime,q->pr iority,q->state);elseprintf("tt %st%dtt%dtt%dt%dn",q->PID,q->needtime,q->cputim e,q->priority,q->state);q=q->next; if(head1->needtime=head1->cputime)/* 運(yùn)行完成將其放入 over 為頭指針的鏈表中 */ head1->state=3;head1->overtime=clock;if(over=NUL
16、L) over=head1;head1=head1->next;over->next=NULL;elseif(over!=NULL&&head1!=NULL)p1=head1->next;p0=over; over=head1;over->next=p0; head1=p1;flag=1;if(flag=1) break;if(flag=1) /* 有進(jìn)程結(jié)束的情況 */if(head!=NULL) /* 就緒隊(duì)列不為零將優(yōu)先權(quán)最高的放入運(yùn)行鏈表中 */ q1=head;head=head->next; q2=head1;while(q2!=NUL
17、L&&q2->priority<=q1->priority) q3=q2;q2=q2->next;if(q2=head1) q1->next=head1; head1=q1; else q3->next=q1; q1->next=q2;else /* 無(wú)進(jìn)程結(jié)束的情況 , 尋找優(yōu)先權(quán)最高的運(yùn)行 */ head1->state=1;q1=head1;head1=head1->next;q2=head1; while(q2!=NULL&&q2->priority<=q1->priority) q
18、3=q2;q2=q2->next;if(q2=head1)q1->next=head1;head1=q1;elseq3->next=q1;q1->next=q2;printf("cpu結(jié)束運(yùn)行!n");printf("是否輸出所有結(jié)束的進(jìn)程:1是2不是-");sca nf("%d",&choo);if(choo=1) /* 輸出所有完成運(yùn)行的進(jìn)程*/printf("開(kāi)始時(shí)間:%sn",now);printf("進(jìn)程名t要求運(yùn)行時(shí)間t進(jìn)入就緒隊(duì)列的時(shí)間t運(yùn)行完成的時(shí)間n");whil
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬(wàn)某租房合同范本
- 預(yù)防臺(tái)風(fēng)小常識(shí)
- 保安規(guī)范著裝標(biāo)準(zhǔn)
- 護(hù)理面試操作教程
- 項(xiàng)目系統(tǒng)管理
- 音樂(lè)療法在手術(shù)中的應(yīng)用
- 美學(xué)行業(yè)就業(yè)分享
- 2021年廣西公辦高職高專院校招生聯(lián)盟單獨(dú)考試招生聯(lián)合測(cè)試考試大綱及樣題
- 2025年山西省呂梁市部分學(xué)校中考一模地理試題(含答案)
- 深圳職業(yè)技術(shù)大學(xué)《現(xiàn)代審計(jì)學(xué)(英語(yǔ))》2023-2024學(xué)年第二學(xué)期期末試卷
- 畢業(yè)設(shè)計(jì)(論文)-幼苗移栽機(jī)結(jié)構(gòu)設(shè)計(jì)
- 第七章-消化系統(tǒng)-人體解剖生理學(xué)課件
- 2024年北京東城區(qū)社區(qū)工作者招聘筆試沖刺題(帶答案解析)
- 04課前小游戲-記憶力大挑戰(zhàn)
- 肝膽胰脾護(hù)理
- 教育家精神專題講座課件
- 【財(cái)務(wù)共享服務(wù)對(duì)企業(yè)發(fā)展的影響:以海爾智家為例16000字(論文)】
- EPC項(xiàng)目投標(biāo)人承包人工程經(jīng)濟(jì)的合理性分析、評(píng)價(jià)
- 房建工程監(jiān)理大綱范本(內(nèi)容全面)
- T-ZSA 209-2023 桌面視遠(yuǎn)式電子顯示設(shè)備技術(shù)規(guī)范
- 關(guān)鍵路徑法教學(xué)課件
評(píng)論
0/150
提交評(píng)論