




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上中南大學(xué)實(shí)驗名稱:處理機(jī)調(diào)度課程名稱:計算機(jī)操作系統(tǒng)學(xué)生姓名 盛 希 玲 學(xué) 號 學(xué) 院 信息科學(xué)與工程學(xué)院 專業(yè)班級 電子信息工程0602 完成時間 2008年10月12日 目 錄一 實(shí)驗內(nèi)容選擇一個調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度。二 實(shí)驗?zāi)康亩嗟老到y(tǒng)中,當(dāng)就緒進(jìn)程數(shù)大于處理機(jī)數(shù)時,須按照某種策略決定哪些進(jìn)程優(yōu)先占用處理機(jī)。本實(shí)驗?zāi)M實(shí)現(xiàn)處理機(jī)調(diào)度,以加深了解處理機(jī)調(diào)度的工作。三 實(shí)驗題目設(shè)計一個按優(yōu)先權(quán)調(diào)度和時間片輪轉(zhuǎn)算法實(shí)現(xiàn)處理機(jī)調(diào)度的程序。四 基本思想 先選擇時間片的個數(shù)和每個時間片需要的時間,正在運(yùn)行的進(jìn)程每運(yùn)行一秒其優(yōu)先權(quán)數(shù)目加一,即其優(yōu)先權(quán)減小。每個時間片運(yùn)行
2、結(jié)束后,選擇進(jìn)入時間片進(jìn)程優(yōu)先權(quán)數(shù)目最小的進(jìn)程,開始下一個時間片的運(yùn)行。如果有進(jìn)程運(yùn)行結(jié)束,則離開,再在就緒隊列中選擇優(yōu)先權(quán)數(shù)目最小的進(jìn)程進(jìn)入。在運(yùn)行期間,如果有新的進(jìn)程來到,按優(yōu)先權(quán)大小放入就緒隊列中。五 算法分析 定義一個結(jié)構(gòu)體,此包含了PCB的信息: struct PCB char PID5; /*進(jìn)程名*/ int needtime; /*要求運(yùn)行的時間*/ int cputime; /*已運(yùn)行時間*/ int priority; /*優(yōu)先權(quán)(越小越高)*/ int starttime; /*進(jìn)入就緒隊列的時間*/ int overtime; /*運(yùn)行完成的時間*/ int state
3、; /*狀態(tài):1就緒2運(yùn)行3完成*/ struct PCB *next;子函數(shù)struct PCB *create(int num,int n)用來建立一個按優(yōu)先級大小排列的就緒進(jìn)程鏈表和一個按時間先后循序排列的將進(jìn)入就緒進(jìn)程的鏈表。main()函數(shù)中用一while循環(huán)輸出進(jìn)入時間片的進(jìn)程狀態(tài)。六 流程圖開始調(diào)用creat()函數(shù),初始化進(jìn)程PCB,各進(jìn)程按優(yōu)先級排序按優(yōu)先級選擇緒隊列中進(jìn)程放入時間片運(yùn)轉(zhuǎn)是否開始運(yùn)行運(yùn)行,每運(yùn)行一秒優(yōu)先權(quán)和已運(yùn)行時間加一時間片結(jié)束,是否就緒進(jìn)程隊列不為零將進(jìn)入就緒隊列的進(jìn)程就緒隊列是否有新進(jìn)程進(jìn)入是否所有進(jìn)程運(yùn)行結(jié)束結(jié)束七 算法描述#define NULL 0
4、#define LEN sizeof(struct PCB)#include"stdio.h"#include"stdlib.h"struct PCB char PID5; /*進(jìn)程名*/ int needtime; /*要求運(yùn)行的時間*/ int cputime; /*已運(yùn)行時間*/ int priority; /*優(yōu)先權(quán)(越小越高)*/ int starttime; /*進(jìn)入就緒隊列的時間*/ int overtime; /*運(yùn)行完成的時間*/ int state; /*狀態(tài):1就緒2運(yùn)行3完成*/ struct PCB *next;struct P
5、CB *create(int num,int n) /*創(chuàng)建進(jìn)程,并將進(jìn)程按優(yōu)先級順序插入隊列中*/ struct PCB *head,*p,*p1,*p2; int i; head=NULL; /*頭指針指零*/ for(i=1;i<=num;i+) /*循環(huán)建立所有進(jìn)程*/ printf("請輸入第%d個進(jìn)程的信息n",i); p=(struct PCB *)malloc(LEN); /*開辟一個空間*/ printf("進(jìn)程名:"); /*輸入進(jìn)程名*/ scanf("%s",p->PID); printf(&quo
6、t;要求運(yùn)行的時間:"); /*輸入要運(yùn)行的時間*/ scanf("%d",&p->needtime); p->cputime=0; /*占用處理機(jī)的時間賦為零*/ printf("優(yōu)先權(quán):"); /*輸入優(yōu)先權(quán)*/ scanf("%d",&p->priority); if(n=1) p->starttime=0; /*進(jìn)入就緒隊列的時間賦為零*/ else printf("進(jìn)入就緒隊列時間:"); /*輸入進(jìn)入就緒隊列的時間*/ scanf("%d&qu
7、ot;,&p->starttime); p->overtime=-1; /*運(yùn)行沒有結(jié)束所以運(yùn)行完成的時間賦為-1*/ p->state=1; /*狀態(tài)賦為就緒狀態(tài)*/ p1=head; /*p1指針指向頭指針*/ if(head=NULL) /*如果頭指針為零將頭指針指向新建立的進(jìn)程*/ head=p;head->next=NULL; else /*頭指針不為零的情況*/ if(n=1) while(p1!=NULL&&p->priority>p1->priority) /*查找插入點(diǎn)*/ p2=p1; p1=p1->n
8、ext; else while(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; str
9、uct PCB *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("輸入將會就緒的進(jìn)程數(shù):"); scanf("%d",&num1); /*建立將會進(jìn)入就緒進(jìn)程的鏈表*/ la
10、ter=create(num1,2); printf("cpu是否開始運(yùn)行:1是 2不是-"); scanf("%d",&cho); if(cho=1) /*處理機(jī)開始進(jìn)行調(diào)度*/ printf("現(xiàn)在的時間是:"); scanf("%s",now); printf("顯示所有就緒的進(jìn)程:n"); p2=head; printf("進(jìn)程名t要求運(yùn)行時間t已運(yùn)行時間t優(yōu)先權(quán)t狀態(tài)(1就緒2運(yùn)行3結(jié)束)n"); while(p2!=NULL) printf("%
11、st%dtt%dtt%dt%dn",p2->PID,p2->needtime,p2->cputime,p2->priority,p2->state);p2=p2->next; printf("請輸入時間片總數(shù):"); scanf("%d",&timepiece); printf("請輸入時間片的時間:"); scanf("%d",&time); printf("運(yùn)行正式開始!n"); head1=head; printf("
12、tt進(jìn)程名t要求運(yùn)行時間t已運(yùn)行時間t優(yōu)先權(quán)t狀態(tài)n"); for(i=1;i<=timepiece;i+) /*將進(jìn)入時間片運(yùn)行的進(jìn)程用頭指針head1指示,并改變就緒進(jìn)程頭指針head的指向*/ if(head!=NULL) p=head;head=head->next; else break; p->next=NULL; while(head1!=NULL) /*就緒進(jìn)程頭指針不為零就循環(huán)*/ head1->state=2; /*狀態(tài):1就緒2運(yùn)行3完成*/ for(j=1;j<=time;j+) /*每個時間片所需時間的循環(huán)*/ clock+;
13、/*定時器每秒加1*/ if(later!=NULL&&clock=later->starttime) /*如果將進(jìn)入就緒隊列的進(jìn)程時間到達(dá)加入就緒隊列*/ l=later; l1=head; later=later->next; if(head=NULL)head=l;head->next=NULL;else while(l1!=NULL&&l1->priority<=l->priority) l2=l1;l1=l1->next; if(l1=head) l->next=head; head=l; else l2
14、->next=l; l->next=l1; flag=0; printf("n%3d秒 時間片第%d秒 ",clock,j); q=head1; if(head1->needtime>head1->cputime) /*以運(yùn)行時間和優(yōu)先權(quán)都加1*/ head1->cputime+; head1->priority+; while(q) /*運(yùn)行隊列不為零輸出其信息*/if(q=head1) printf("%st%dtt%dtt%dt%dn",q->PID,q->needtime,q->cput
15、ime,q->priority,q->state); else printf("tt %st%dtt%dtt%dt%dn",q->PID,q->needtime,q->cputime,q->priority,q->state); q=q->next; if(head1->needtime=head1->cputime) /*運(yùn)行完成將其放入over為頭指針的鏈表中*/ head1->state=3;head1->overtime=clock;if(over=NULL) over=head1;head1=
16、head1->next;over->next=NULL; else if(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) /*就緒隊列不為零將優(yōu)先權(quán)最高的放入運(yùn)行鏈表中*/ q1=head; head=head->next;q2=head1; while(q2!=NULL&&q2-
17、>priority<=q1->priority)q3=q2;q2=q2->next; if(q2=head1) q1->next=head1; head1=q1; else q3->next=q1; q1->next=q2; else /*無進(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) q3=q2;q2=q2->next; if(q2=head1) q1->next=head1;head1=q1; else q3->next=q1;q1->next=q2; printf("cpu結(jié)束運(yùn)行!n"); printf("是否輸出所有結(jié)束的進(jìn)程:1是2不是-");scanf("%d",&choo);if(choo=1) /*輸出所有完成運(yùn)行的進(jìn)程*/ printf("
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省陽江市高新區(qū)2024-2025學(xué)年高一上學(xué)期1月期末地理試題 含解析
- 家電行業(yè)智能家電互聯(lián)互通方案
- 企業(yè)采購原材料采購協(xié)議
- 水電站建設(shè)運(yùn)營合作協(xié)議
- 旅游行業(yè)服務(wù)質(zhì)量保障協(xié)議
- 網(wǎng)絡(luò)科技行業(yè)數(shù)據(jù)安全使用承諾書
- 企業(yè)員工福利計劃與服務(wù)支持方案
- 私人教練健身訓(xùn)練合同協(xié)議
- 產(chǎn)品銷售代理合同集
- 汽車維修與故障診斷技術(shù)知識點(diǎn)總結(jié)題集
- 中小學(xué)教師職稱晉升水平能力測試題及答案
- 蘇少版八下美術(shù)教案
- 人教版四年級數(shù)學(xué)下冊第一單元提升測試卷(Word版含答案)
- Arcgis教程1基本知識
- 學(xué)業(yè)規(guī)劃、職業(yè)發(fā)展與就業(yè)指導(dǎo)課件
- 西南交通大學(xué)文科建設(shè)發(fā)展綱要
- 蘇教版數(shù)學(xué)六年級下冊第三單元《解決問題的策略》課課件
- 四年級數(shù)學(xué)思維訓(xùn)練社團(tuán)活動(素質(zhì)拓展)電子教案
- 金屬切削過程中的變形 revised課件
- 蒙古族文化課件
- 簡明燒傷健康量表
評論
0/150
提交評論