第一篇:優(yōu)先級和時(shí)間片輪轉(zhuǎn)調(diào)度
實(shí)驗(yàn)4 優(yōu)先級和時(shí)間片輪轉(zhuǎn)調(diào)度
一、實(shí)驗(yàn)要求
通過編寫程序?qū)崿F(xiàn)進(jìn)程高優(yōu)先權(quán)和按時(shí)間片輪轉(zhuǎn)調(diào)度算法,使學(xué)生進(jìn)一步掌握進(jìn)程調(diào)度的概念和算法,加深對處理機(jī)分配的理解。
二、實(shí)驗(yàn)內(nèi)容
進(jìn)程調(diào)度算法有優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法,分級調(diào)度算法。選兩種種算法實(shí)現(xiàn)。進(jìn)程調(diào)度算法的數(shù)據(jù)結(jié)構(gòu)主要有:進(jìn)程函數(shù)定義,建立進(jìn)程函數(shù),進(jìn)程調(diào)度函數(shù)。源程序代碼部分:
#include “stdio.h” #include
char name;
int status;int pri;
int ptime;int ax,bx,cx,dx;
int pc;
int psw;
}pcb;pcb *processarray[max];static int processnum;pcb *createprocess(pcb *processarray[])組 {
pcb *p,*q;
int a,b,c,d,m,n,r,t;
char ID;
q=NULL;printf(“input the first nine status pcb:”);
scanf(“n%c%d%d%d%d%d%d%d%d”,&ID,&a,&b,&c,&d,&m,&n,&r,&t);
for(int i=0;i p=(pcb*)malloc(sizeof(pcb)); p->name=ID; p->ax=a; p->bx=b; p->cx=c; p->dx=d; p->pc=m; p->psw=n; p->pri=r; p->ptime=t; p->status=aready; processnum++; processarray[i]=p; printf(“input the next seven status pcb: ”); scanf(“n%c”,&ID); if(ID == '*') break; scanf(“%d%d%d%d%d%d%d%d”,&a,&b,&c,&d,&m,&n,&r,&t);} for(int j=0;j { q=processarray[j];printf(“n process name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”); printf(“%10c%5d%5d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime); } return *processarray;} void processRR(pcb *processarray[]){int i;int j; pcb *q;int totaltime=0; for(i=0;i ptime%4==0) totaltime+=processarray[i]->ptime; else totaltime+=(processarray[i]->ptime/4+1)*4;} printf(“nUsing RR method:”); printf(“n process name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”); for(i=0;i if(q->ptime==0) j=0; else if(q->ptime<=etime) { q->status=pfree; q->ptime=0; printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check process running status */ totaltime-=etime;} else if(q->ptime>etime) {q->status=running; q->ptime=q->ptime-etime; printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check process running status */ q->status=aready; totaltime-=etime;} if(i i++; else if(i==processnum-1) i=0; }} void processStaPri(pcb *processarray[]){ pcb *q; int i,j;printf(“n the process use StaPri method.n”); printf(“running the frist process:n”); for(i=0;i {if(processarray[j]->pri>processarray[j+1]->pri){q=processarray[j];processarray[j]=processarray[j+1];processarray[j+1]=q;}} for(i=0;i { processarray[i]->status=running; q=processarray[i]; printf(“n process name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”); printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check process running status */ q->status=pfree;} for(j=0;j printf(“n檢查進(jìn)程%3c是否結(jié)束,進(jìn)程當(dāng)前狀態(tài):%3d”,q->name,q->status);} printf(“ngame is over!n”);} void main(){ *processarray=createprocess(processarray);processRR(processarray);processStaPri(processarray); } 三、實(shí)驗(yàn)報(bào)告 1.在源程序上寫出注釋。2.畫出程序流程圖。3.調(diào)試程序并寫出運(yùn)行結(jié)果。 實(shí) 驗(yàn) 報(bào) 告 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 一、實(shí)驗(yàn)室名稱: 二、實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程調(diào)度算法的設(shè)計(jì) 三、實(shí)驗(yàn)原理: 短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法:短作業(yè)調(diào)度算法是從后備隊(duì)列中選擇一個(gè)或者若干個(gè)估計(jì)運(yùn)行時(shí)間最短的作業(yè),將他們調(diào)入內(nèi)存運(yùn)行。而短進(jìn)程優(yōu)先調(diào)度算法則是從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或者發(fā)生某事件而被阻塞放棄處理機(jī)時(shí)再重新調(diào)度。 時(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ì)列的隊(duì)尾;然后,再把處理機(jī)分配給就緒隊(duì)列中的新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。這樣就可以保證就緒隊(duì)列中的所有進(jìn)程在一個(gè)給定的時(shí)間內(nèi)均能獲得一時(shí)間片的處理機(jī)執(zhí)行時(shí)間。 四、實(shí)驗(yàn)?zāi)康模?/p> 通過對進(jìn)程調(diào)度算法的設(shè)計(jì),深入理解進(jìn)程調(diào)度的原理 五、實(shí)驗(yàn)內(nèi)容: 1.編寫程序?qū)崿F(xiàn)SJ(P)F算法 2.編寫程序?qū)崿F(xiàn)RR算法 六、實(shí)驗(yàn)器材(設(shè)備、元器件): 裝有VC++6.0的PC機(jī)一臺 七、實(shí)驗(yàn)步驟: 1.打開VC,設(shè)計(jì)編寫程序的源代碼 2.編譯運(yùn)行程序的源代碼 3.分析檢驗(yàn)程序的結(jié)果是否正確 4.總結(jié)實(shí)驗(yàn)結(jié)果及結(jié)論 短進(jìn)程優(yōu)先調(diào)度源代碼: #include “stdio.h” struct sjf{ char name[10];float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;};sjf a[100];void input(sjf *p,int N){ int i;printf(“intput the process's name & arrivetime & servicetime:nfor exmple: a 0 100n”);for(i=0;i<=N-1;i++){ printf(“input the %dth process's information:n”,i+1);scanf(“%s%f%f”,&p[i].name,&p[i].arrivetime,&p[i].servicetime);} } void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N){int k; printf(“run order:”); printf(“%s”,p[0].name);for(k=1;k printf(“nthe process's information:n”); printf(“nnametarrivetservicetstarttfinishtzztdqzzn”); for(k=0;k<=N-1;k++){ printf(“%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn”,p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);} } //排序 void sort(sjf *p,int N){ for(int i=0;i<=N-1;i++) for(int j=0;j<=i;j++) if(p[i].arrivetime { sjf temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } //運(yùn)行階段 void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N){ int k; for(k=0;k<=N-1;k++) { if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime;} else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;} } for(k=0;k<=N-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].dqzztime=p[k].zztime/p[k].servicetime; } } void sjff(sjf *p,int N){float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;//對結(jié)構(gòu)進(jìn)行初始化 sort(p,N); for(int m=0;m {if(m==0) p[m].finishtime=p[m].arrivetime+p[m].servicetime; else p[m].finishtime=p[m-1].finishtime+p[m].servicetime; int i=0; for(int n=m+1;n<=N-1;n++) {if(p[n].arrivetime<=p[m].finishtime)//判斷內(nèi)存中每次完成之后有多少到達(dá)的進(jìn)程 i++; } float min=p[m+1].servicetime; int next=m+1;//m+1=n for(int k=m+1;k { if(p[k+1].servicetime {min=p[k+1].servicetime; next=k+1;} } sjf temp; temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);} void main(){ int N; printf(“------短作業(yè)優(yōu)先調(diào)度算法------n”); printf(“input the process's number:n”); scanf(“%d”,&N); input(a,N); sjf *b=a; sjf *c=a; sjff(b,N);} 時(shí)間片輪轉(zhuǎn)法源代碼: #include //物理頁數(shù) #define printf(“|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|n”)typedef struct PCB { int ID;int ReachTime;int TotalTime;}PCB;//進(jìn)程號,到達(dá)時(shí)間和服務(wù)時(shí)間 typedef struct NOTE //備份 { Myprintf int ID;int TotalTime;}NOTE; PCB A[M];//5個(gè)進(jìn)程 PCB a[M];NOTE temp;int queue[50];//記錄調(diào)度的進(jìn)程 int K=0;//調(diào)度進(jìn)程數(shù)組的標(biāo)識 void INIT()//初始化 { int i;for(i=0;i A[i].ID=-1;} } int GetNum()//計(jì)算進(jìn)程數(shù) { int i,j=0;for(i=0;i if(A[i].ID!=-1) { j++; } } return j;} int GetReach(int time)//找出到達(dá)進(jìn)程號 { int i;for(i=0;i if(a[i].ReachTime<=time) { a[i].ReachTime=100; return i; } } return-1;} int GetInsert()//找出插入位置 { int i;for(i=0;i if(A[i].ID==-1) return i;} return-1;} void Forward(int num)//前移 { int i;for(i=0;i A[i].ID=A[i+1].ID; A[i].TotalTime=A[i+1].TotalTime;} A[num-1].ID=-1;} void Process()//執(zhí)行進(jìn)程 { queue[K]=A[0].ID;K++;A[0].TotalTime--;temp.ID=A[0].ID;temp.TotalTime=A[0].TotalTime;} void main(){ int i;int time;int t=0;int reach;int insert;int num;printf(“RR算法nn”);INIT();for(i=0;i printf(“請輸入進(jìn)程ID:”); scanf(“%d”,&a[i].ID); printf(“請輸入到達(dá)時(shí)間:”); scanf(“%d”,&a[i].ReachTime); printf(“請輸入服務(wù)時(shí)間:”); scanf(“%d”,&a[i].TotalTime); } for(i=0;i { insert=GetInsert(); A[insert].ID=a[reach].ID; A[insert].TotalTime=a[reach].TotalTime; num=GetNum(); if(num==1) continue;//進(jìn)程數(shù)為1 else { //進(jìn)程數(shù)不為1 Process(); Forward(num); if(temp.TotalTime!=0) { A[num-1].ID=temp.ID; A[num-1].TotalTime=temp.TotalTime; } } } else//沒有進(jìn)程到達(dá) { num=GetNum(); if(num==1) {//進(jìn)程數(shù)為1 Process(); if(temp.TotalTime==0) { A[0].ID=-1; } } else if(num==0) } continue;//進(jìn)程數(shù)為0 else { Process(); Forward(num); if(temp.TotalTime!=0) { A[num-1].ID=temp.ID; A[num-1].TotalTime=temp.TotalTime; } } } } printf(“n”);printf(“調(diào)度順序?yàn)椋簄”);Myprintf;for(i=0;i<50;i++){ if(queue[i]!=-1) printf(“|%2d ”,queue[i]);} printf(“|n”);Myprintf;printf(“n”); 八、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 短作業(yè)優(yōu)先調(diào)度算法的實(shí)驗(yàn)結(jié)果: 時(shí)間片輪轉(zhuǎn)調(diào)度算法結(jié)果: 九、實(shí)驗(yàn)結(jié)論: 本次實(shí)驗(yàn)成功的完成了短作業(yè)優(yōu)先調(diào)度算法和輪轉(zhuǎn)時(shí)間片調(diào)度算法的模擬,通過本次實(shí)驗(yàn)我們了解到短作業(yè)優(yōu)先調(diào)度算法不利于長作業(yè)的處理,因?yàn)殚L作業(yè)將長期得不到處理,而輪轉(zhuǎn)時(shí)間片調(diào)度算法則解決了這一問題。短長作業(yè)均能在每一個(gè)周期內(nèi)分得一個(gè)時(shí)間片處理自己的任務(wù)。 十、總結(jié)及心得體會(huì): 通過本次實(shí)驗(yàn)對短作業(yè)優(yōu)先調(diào)度算法和時(shí)間片輪轉(zhuǎn)調(diào)度算法有了更深入的理解,同時(shí),對程序算法能力有了進(jìn)一步的提高,同時(shí)對模塊化編程有了更深入得理解,代碼的模塊化會(huì)使程序的代碼復(fù)用率提高,提高編程的效率。 十一、對本實(shí)驗(yàn)過程及方法、手段的改進(jìn)建議: 本次實(shí)驗(yàn)的時(shí)間片輪轉(zhuǎn)調(diào)度算法由于教材版本不一樣有兩種結(jié)果,本次實(shí)驗(yàn)本人采取的新教材的版本,新版本的難度較老教材要大很多,實(shí)驗(yàn)時(shí)候可以根據(jù)具體情況選擇一個(gè)適合自己的來做。 報(bào)告評分: 指導(dǎo)教師簽字: 小心 計(jì)算機(jī)專業(yè)類課程 實(shí)驗(yàn)報(bào)告 課程名稱:操作系統(tǒng) 學(xué) 院:軟件學(xué)院 專 業(yè):軟件工程 學(xué)生姓名:李 希 學(xué) 號:2010231020018 指導(dǎo)教師:丁老師 日 期: 2012年5月5日 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 電 子 科 技 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告 實(shí)驗(yàn)一 一、實(shí)驗(yàn)名稱: 進(jìn)程管理 二、實(shí)驗(yàn)學(xué)時(shí):4 三、實(shí)驗(yàn)內(nèi)容和目的: 實(shí)驗(yàn)內(nèi)容:(1)進(jìn)程的創(chuàng)建 寫一段源程序,創(chuàng)建兩個(gè)進(jìn)程,當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示字符。觀察紀(jì)錄屏幕上的顯示結(jié)果,然后分析原因。(2)進(jìn)程的控制 修改編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕出現(xiàn)的現(xiàn)象,并分析原因。實(shí)驗(yàn)?zāi)康模?/p> (1)加深對進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。 (2)進(jìn)一步認(rèn)識并發(fā)執(zhí)行的實(shí)質(zhì)。 (3)分析進(jìn)程競爭資源現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。 四、實(shí)驗(yàn)原理: 利用fork函數(shù)來創(chuàng)建子進(jìn)程,并返回子進(jìn)程的ID號。 利用lockf函數(shù)來實(shí)現(xiàn)信號量對進(jìn)程的資源競爭的調(diào)度,和互斥的方法。 五、實(shí)驗(yàn)器材(設(shè)備、元器件): 一臺裝有VS2010的電腦,操作系統(tǒng)為WIN7.六、實(shí)驗(yàn)步驟: (1)先寫好2個(gè)子進(jìn)程程序,并且讓2個(gè)子程序在屏幕上分別打印出A,B(2)父進(jìn)程創(chuàng)建2個(gè)子進(jìn)程,并在屏幕上打印出C。(3)觀察進(jìn)程競爭資源的現(xiàn)象。 七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 子進(jìn)程A的代碼: #include cout<<“I'm Process A/n”< } 子進(jìn)程B的代碼: #include cout<<“I'm Process B”< //#include “stdafx.h” #include void print_error(){ DWORD nErrorNo = GetLastError();LPSTR lpBuffer; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM,NULL,nErrorNo,LANG_NEUTRAL,(LPTSTR)& lpBuffer,0 , NULL);if(lpBuffer == NULL) | } { } printf(“%s(%d).n”, lpBuffer, nErrorNo);lpBuffer = “Sorry, cannot find this error info.”;int fork(const char* pszApplication,HANDLE& hProcess) { STARTUPINFO si={sizeof(si)}; } void lockf(HANDLE hObj){ } int main(int argc, char* argv[]){ HANDLE hProcess1,hProcess2;int child1=fork(“C:操¨′作á??系|ì統(tǒng)a3實(shí)o|ì驗(yàn)¨|ProcessADebugProcessA.exe”,hProcess1);if(-1==child1) } lockf(hProcess1);cout << “fork error!n”;return-1;{ case WAIT_OBJECT_0: } printf(“nProcess exit.n”);break;printf(“nTime out.n”);break;printf(“nWait Failed.n”);print_error();break;DWORD state = WaitForSingleObject(hObj,INFINITE);switch(state)PROCESS_INFORMATION pi;if(!CreateProcess(pszApplication,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){ } hProcess=pi.hProcess;return pi.dwProcessId;return-1;else case WAIT_TIMEOUT: case WAIT_FAILED: { 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 } int child2=fork(“C:操¨′作á??系|ì統(tǒng)a3實(shí)o|ì驗(yàn)¨|ProcessBDebugProcessB.exe”,hProcess2);if(-1==child2){ } cout<<“This is Process Cn”;lockf(hProcess2);return 0;cout << “fork error!n”;return-1;程序運(yùn)行的結(jié)果: 八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 實(shí)驗(yàn)結(jié)論:成功的通過了父進(jìn)程C來創(chuàng)建了2個(gè)子進(jìn)程A,B,并成功的對子進(jìn)程進(jìn)行了調(diào)度與管理。 心得體會(huì):通過對進(jìn)程的創(chuàng)建,調(diào)度,更加深了我們對操作系統(tǒng)這門課的進(jìn)程的了解,而且也鍛煉了我們寫代碼的能力,和解決問題的能力。 改進(jìn)建議:對于我們大二沒有接觸過Windows編程的學(xué)生來說,可能一些Windows的API函數(shù)不夠了解,以至于比較難理解老師給出的參考代碼。所以我希望,老師以后可以先給我們大家簡單的講解,介紹一下比較實(shí)用的Windows編程的API的函數(shù)。 實(shí)驗(yàn)二 一、實(shí)驗(yàn)名稱: 處理器調(diào)度 二、實(shí)驗(yàn)學(xué)時(shí):4 三、實(shí)驗(yàn)內(nèi)容和目的: 實(shí)驗(yàn)內(nèi)容: (1)假定系統(tǒng)有五個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來代表。 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 PCB的格式為: 其中,進(jìn)程名——作為進(jìn)程的標(biāo)識,假設(shè)五個(gè)進(jìn)程的進(jìn)程名分別為1,2,3,4,5指針——進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出下一個(gè)進(jìn)程的進(jìn)程控制塊的首地址,最后一個(gè)進(jìn)程的指針指出第一個(gè)進(jìn)程的進(jìn)程控制塊首地址。要求運(yùn)行時(shí)間——假設(shè)進(jìn)程需要運(yùn)行的單位時(shí)間數(shù)。已運(yùn)行時(shí)間——假設(shè)進(jìn)程已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。狀態(tài)——有兩種狀態(tài),“ready”和“end”,初始狀態(tài)都為“ready”,用“ready”表示。當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“end”,用“end”表示。 (2)每次運(yùn)行所設(shè)計(jì)的處理器調(diào)度程序前,為每個(gè)進(jìn)程任意確定它的“要求運(yùn)行時(shí)間”。 (3)把五個(gè)進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出隊(duì)列連接情況。另用一標(biāo)志單元記錄輪到運(yùn)行的進(jìn)程。例如,當(dāng)前輪到2執(zhí)行,則有: (4)處理器調(diào)度總是選擇標(biāo)志單元指示的進(jìn)程運(yùn)行。由于本實(shí)驗(yàn)是模擬處理器調(diào)度的功能,對被選中的進(jìn)程并不實(shí)際的啟動(dòng)運(yùn)行,而 是執(zhí)行:已運(yùn)行時(shí)間+1來模擬進(jìn)程的一次運(yùn)行,表示進(jìn)程運(yùn)行過一個(gè)單位的時(shí)間。 (5)進(jìn)程運(yùn)行一次后,把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,指示下一個(gè)輪到運(yùn)行的進(jìn)程。同時(shí)應(yīng)判斷該進(jìn)程的要求運(yùn)行時(shí)間與已運(yùn)行時(shí)間,若該進(jìn)程的要求運(yùn)行時(shí)間?已運(yùn)行時(shí)間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時(shí)再運(yùn)行。若該進(jìn)程的要求運(yùn)行時(shí)間等于已運(yùn)行時(shí)間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)把它的狀態(tài)修改成“結(jié)束”(end)且退出隊(duì)列。此時(shí),應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到前面一個(gè)進(jìn)程的指針位置。 (6)若“ready”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面的(4)和(5) 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 的步驟,直到所有的進(jìn)程都成為“ready”狀態(tài)。 (7)在所設(shè)計(jì)的程序中 應(yīng)有顯示或打印語句,能顯示或打印 每次選中進(jìn)程的進(jìn)程名以 及運(yùn)行一次后進(jìn)程 隊(duì)列的變化。 (8)為N個(gè)進(jìn)程任意確定一組“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)的處理器調(diào)度程序,顯示或打印逐次被選中的進(jìn)程名以及進(jìn)程控制塊的動(dòng)態(tài)變化過程。實(shí)驗(yàn)?zāi)康模?/p> 在用多道程序設(shè)計(jì)的系統(tǒng)中,往往有若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài)。所以當(dāng)就緒進(jìn)程個(gè)數(shù)大于處理器數(shù)時(shí),就必須依照某種策略來決定哪些進(jìn)程優(yōu)先占用CPU。本實(shí)驗(yàn)?zāi)M在單處理器情況下的處理器調(diào)度,加深了解處理器調(diào)度的工作。 四、實(shí)驗(yàn)原理: 定義進(jìn)程PCB結(jié)構(gòu)體。并用采用C++中的指針形成循環(huán)鏈表,并對鏈表中的結(jié)構(gòu)進(jìn)行操作。來模仿時(shí)間片輪轉(zhuǎn)的進(jìn)程調(diào)度。 五、實(shí)驗(yàn)器材(設(shè)備、元器件): 一臺裝有VS2010的電腦,操作系統(tǒng)為WIN7.六、實(shí)驗(yàn)步驟:(1)定義結(jié)構(gòu)體PCB:里面有進(jìn)程的編號,執(zhí)行需要的時(shí)間,和已經(jīng)運(yùn)行時(shí)間,還有進(jìn)程的狀態(tài)信息。 (2)定義循環(huán)的單鏈表,來使結(jié)構(gòu)都串聯(lián)起來。 (3)使用時(shí)間片輪轉(zhuǎn)的方法來動(dòng)態(tài)地進(jìn)行進(jìn)程模擬的調(diào)度。(4)如果所有的進(jìn)程都執(zhí)行完畢,則退出程序。 七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 實(shí)驗(yàn)程序的代碼如下: #include struct Process{ }; struct Process *CreateList(int n)//初始化鏈表,并返回指向鏈表頭的指針 { struct Process *head=NULL,*tail=NULL;for(int i=1;i<=n;i++){ if(i==1){ head=new Process;tail=head;head->Name=i;head->RunTime=0;int Name;string Statu;int NeedTime;int RunTime;Process *Next; 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 } } head->Statu=“Ready”;cout<<“請輸入”<>tail->NeedTime;} if(i!=1&&i!=n){ tail->Next=new Process;tail=tail->Next;tail->Name=i;tail->RunTime=0;tail->Statu=“Ready”;cout<<“請輸入¨2”<>tail->NeedTime;} if(i==n){ } tail->Next=new Process;tail=tail->Next;tail->Next=head;tail->Name=i;tail->RunTime=0;tail->Statu=“Ready”;cout<<“請輸入¨2”<>tail->NeedTime;tail=head;return tail;void Run(struct Process *tail,int ProcessNum)//時(shí)間片輪轉(zhuǎn) { while(ProcessNum!=0){ if((tail->RunTime!=tail->NeedTime)) { cout<<“進(jìn)程”< if(tail->RunTime==tail->NeedTime) { tail->RunTime++; if(tail->Statu==“Ready”){ tail->Statu=“End”; ProcessNum--; } } tail=tail->Next; } else { tail=tail->Next; } } } int main(){ struct Process * runtail;runtail=NULL;int n;int ProcessNum;cout<<“請輸入進(jìn)程的個(gè)數(shù)”;cin>>n;ProcessNum=n;runtail=CreateList(n);Run(runtail,ProcessNum);getchar();getchar();} 實(shí)驗(yàn)結(jié)果: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 實(shí)驗(yàn)結(jié)論:成功的采用鏈表的形式,用指針,模仿了時(shí)間片輪轉(zhuǎn)算法,完成了實(shí)驗(yàn)的要求,達(dá)到了實(shí)驗(yàn)的目的。 心得體會(huì):通過本次實(shí)驗(yàn)加深了我們對時(shí)間輪轉(zhuǎn)算法的印象,并且鍛煉了我們的動(dòng)手能力,還溫習(xí)了一下C++中一些編程的知識。 改進(jìn)建議:我覺得時(shí)間片算法可能過于簡單了,其實(shí)我們可以在時(shí)間片算法的基礎(chǔ)上再增加一些功能,比如在時(shí)間片算法上增加優(yōu)先級這個(gè)屬性,這樣不僅加大了實(shí)驗(yàn)的難度,還可以讓同學(xué)們對優(yōu)先級調(diào)度有一種更直觀,更深刻的了解。 實(shí)驗(yàn)三 一、實(shí)驗(yàn)名稱:主存儲(chǔ)器空間的分配與回收 二、實(shí)驗(yàn)學(xué)時(shí):4 三、實(shí)驗(yàn)內(nèi)容和目的: 實(shí)驗(yàn)內(nèi)容: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 分頁式管理方式采用位示圖來表示主存分配情況,實(shí)現(xiàn)主存空間的分配和回收。 實(shí)驗(yàn)?zāi)康模?/p> 一個(gè)好的計(jì)算機(jī)系統(tǒng)不僅要有一個(gè)足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲(chǔ)器,而且要能合理地分配和使用這些存儲(chǔ)空間。 當(dāng)用戶提出申請存儲(chǔ)器空間時(shí),存儲(chǔ)管理必須根據(jù)申請者的要求,按一定的策略分析主存空間的情況,找出足夠的空閑區(qū)域分配給申請者。當(dāng)作業(yè)撤離或主動(dòng)歸還主存資源時(shí),則存儲(chǔ) 管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實(shí)現(xiàn)雖與主存儲(chǔ)器的管理方式有關(guān)的。 通過本實(shí)驗(yàn)幫助學(xué)生理解在不同的存儲(chǔ)管理方式下應(yīng)怎樣實(shí)現(xiàn)主存空間的回收和分配。 四、實(shí)驗(yàn)原理: (1)分頁式存儲(chǔ)器把主存分成大小相等的若干塊,作業(yè)的信息也按塊的大小分頁,作業(yè)裝入主存時(shí)可把作業(yè)的信息按頁分散存放在主存的空閑塊中,為了說明主存中哪些塊已經(jīng)被占用,哪些塊是尚未分配的空閑塊,可用一張位示圖來指出。位示圖可由若干存儲(chǔ)單元來構(gòu)成,其中每一位與一個(gè)物理塊對應(yīng),用0/1表示對應(yīng)塊為空閑/已占用。(2)設(shè)某系統(tǒng)主存被分成大小相等的64塊,則位示圖可用8*8個(gè)字節(jié)來構(gòu)成,另用一單元記錄當(dāng)前空閑塊數(shù)。若已有第0,1,4,5,6,9,11,13,24,31,共10個(gè)主存塊被占用了,那么位示圖情況如下: (3)當(dāng)裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)對主存的需要量,先查當(dāng)前空閑塊數(shù)是否能滿足作業(yè)要求,若不能滿足則輸出分配不成功。若能滿足,則查位示圖,找出為“0”的一些位,置上占用標(biāo)志“1”,并且從“當(dāng)前空閑塊數(shù)”中減去本次任務(wù)占用塊數(shù)。然后按找到的計(jì)算出對應(yīng)的塊號: 其計(jì)算公式為: 塊號= j*8+i 其中,j表示找到的是第n個(gè)字節(jié),i表示對應(yīng)的是第n位。根據(jù)分配給作業(yè)的塊號,為作業(yè)建立一張頁表,頁表格式: (4)當(dāng)作業(yè)執(zhí)行結(jié)束,歸還主存時(shí),根據(jù)該作業(yè)的頁表可以知道應(yīng)歸還的塊號。 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 由塊號可計(jì)算出在位示圖中的對應(yīng)位置,把對應(yīng)位的占用標(biāo)志清成“0”,表示對應(yīng)的塊已成為空閑塊。歸還的塊數(shù)加入到當(dāng)前空閑塊數(shù)中。由塊號計(jì)算在位示圖中的位置的公式如下: 字節(jié)號 j=[塊號/8]([ ]表示取整) 位數(shù) i={塊號/8}({ }表示取余) (5)設(shè)計(jì)實(shí)現(xiàn)主存分配和回收的程序。假定位示圖的初始狀態(tài)如(2)所述,現(xiàn) 有一信息量為N頁的作業(yè)要裝入,運(yùn)行你所設(shè)計(jì)的分配程序,為作業(yè)分配主存且建立頁表(格式如(3)所述)。 五、實(shí)驗(yàn)器材(設(shè)備、元器件): 一臺裝有VS2010的電腦,操作系統(tǒng)為WIN7.六、實(shí)驗(yàn)步驟: (1)先創(chuàng)建一個(gè)8*8的數(shù)組,用來保存內(nèi)存的信息。并初始化好值,用1來表示已經(jīng)分配,用0來表示還沒有分配。 (2)創(chuàng)建一個(gè)Sum函數(shù),來對內(nèi)存中沒有分配的內(nèi)存?zhèn)€數(shù)進(jìn)行統(tǒng)計(jì),并返回一個(gè)int類型的數(shù)值,來表示沒有分配的內(nèi)存的大小、(3)創(chuàng)建一個(gè)分配內(nèi)存的函數(shù),先判斷需求的內(nèi)存的大小是否小于內(nèi)存空閑的大小。如果能夠滿足要求,則將相應(yīng)的內(nèi)存空間修改為1,表示已經(jīng)分配。(4)創(chuàng)建一個(gè)打印內(nèi)存頁表的函數(shù),根據(jù)內(nèi)存的實(shí)際情況,如果為1,則打印輸出,最后在屏幕上打印出所有的空閑頁表。 (5)創(chuàng)建主函數(shù),并對相應(yīng)的函數(shù)進(jìn)行調(diào)用,便可成功的模仿內(nèi)存的調(diào)度。 七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 具體的代碼如下: #include void Print(int Table[8][8])//顯示內(nèi)存 } int Sum(int Table[8][8])//計(jì)算內(nèi)存的剩余量 { int n=0;for(int j=0;j<8;j++) { } { cout<<“分配內(nèi)存后最新的內(nèi)存情況如下表”< cout<<“ ”<<0<<“ ”<<1<<“ ”<<2<<“ ”<<3<<“ ”<<4<<“ ”<<5<<“ ”<<6<<“ ”<<7<<“n”; for(int j=0;j<8;j++) cout< for(int k=0;k<8;k++) { cout<<“ ”< } cout<<“n”; { 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 } for(int k=0;k<8;k++) { if(Table[j][k]==0) { n++; } } } return n;void Manage(int Table [8][8],int Need)//分配內(nèi)存 { } void YeBiao(int Table [8][8])//打印空閑頁表 { cout<<“分配后空閑內(nèi)存的頁表”< ”<<“塊號”< { for(int k=0;k<8;k++) { if(Table [j][k]==0) { h=8*j+k; cout< ”< for(int j=0;j<8;j++) { } for(int k=0;k<8;k++) { if(Table [j][k]==0&&Need!=0) { } Table [j][k]=1; Need--; } } } } } } int main(){ cout<<“請輸入你要分配的塊數(shù)”;cin>>Need;while(Need>Va){ } Manage(Table,Need);Print(Table);cout<<“對不起沒有足夠內(nèi)存,請重新輸入n”;cin>>Need;int Table[8][8];int Va,Need;for(int i=0;i<8;i++)//初始化頁表 { } Table[0][0]=1;Table[0][1]=1;Table[0][4]=1;Table[0][5]=1;Table[0][6]=1;Table[1][1]=1;Table[1][3]=1;Table[1][5]=1;Table[3][0]=1;Table[3][7]=1;Print(Table);Va=Sum(Table);cout<<“n”<<“現(xiàn)在有”< 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 YeBiao(Table); } getchar();getchar();(1)若申請的內(nèi)存數(shù)過大。 (2)申請的內(nèi)存為45: 八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 實(shí)驗(yàn)結(jié)論:達(dá)到了實(shí)驗(yàn)的要求與目的,完成了對內(nèi)存分配的模擬。 心得體會(huì):通過本次實(shí)驗(yàn),我加深了采用頁表的方式來管理內(nèi)存的印象,鍛煉了自己C++的編程能力,和獨(dú)立解決問題的能力。 改進(jìn)建議:實(shí)驗(yàn)中并沒有要求對內(nèi)存空間清理,刪除的功能,我希望老師能加上對內(nèi)存緊湊,清理,刪除這些功能的模擬,這樣可以使我們所學(xué)的知識更有用武之地。 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 實(shí)驗(yàn)四 一、實(shí)驗(yàn)名稱: 讀者寫者問題 二、實(shí)驗(yàn)學(xué)時(shí):4 三、實(shí)驗(yàn)內(nèi)容和目的: 實(shí)驗(yàn)內(nèi)容: 可用于解決多個(gè)進(jìn)程共享一個(gè)數(shù)據(jù)區(qū)(文件、內(nèi)存區(qū)、一組寄存器等),其中若干讀進(jìn)程只能讀數(shù)據(jù),若干寫進(jìn)程只能寫數(shù)據(jù)等實(shí)際問題 讀者和寫者應(yīng)滿足的條件:(1)允許多個(gè)讀者可以同時(shí)讀文件 (2)不允許多個(gè)寫者同時(shí)寫文件,只能互斥寫文件(3)當(dāng)寫進(jìn)程在寫時(shí)不能讀 (4)讀者優(yōu)先: 指一旦有讀者正在讀數(shù)據(jù),允許多個(gè)讀者同時(shí)進(jìn)入讀數(shù)據(jù),只有當(dāng)全部讀者退出,才允許寫者進(jìn)入寫數(shù)據(jù)。 (5)寫者優(yōu)先:指只要有一個(gè)寫者申請寫數(shù)據(jù),則不再允許新的讀者進(jìn)入讀數(shù)據(jù) 實(shí)驗(yàn)?zāi)康模?通過本實(shí)驗(yàn)對讀者寫者的模擬,讓我們對操作系統(tǒng)中讀者寫著問題的解決有一個(gè)加深的影響,并學(xué)會(huì)使用一些模擬簡單的信號量的方法,來解決一些比較經(jīng)典的讀者寫著的問題。 四、實(shí)驗(yàn)原理: (1)為了模擬讀者寫著的問題,因?yàn)樽约旱腃++技術(shù)不夠深厚,于是用Java中的線程來進(jìn)行模擬、采用輸入輸出流來對文本文件Test.txt進(jìn)行操作。(2)要實(shí)現(xiàn)寫著互斥的寫文件,這里只需要將線程中的Run方法定義為synchronized,就可以實(shí)現(xiàn)寫著互斥的寫文件、(3)引入一個(gè)couter類,并對counter類中的成員進(jìn)行維護(hù),若有讀者讀數(shù)據(jù),則對counter內(nèi)的reader++,寫者同理。 (4)讀者寫著不同的優(yōu)先級,可以通過依賴counter類來實(shí)現(xiàn)。在進(jìn)行文件讀寫操作時(shí),先判斷是否有讀者/寫者。 五、實(shí)驗(yàn)器材(設(shè)備、元器件): 一臺裝有eclipse,和Win7的個(gè)人PC。 六、實(shí)驗(yàn)步驟: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心(1)定義讀者,寫者類并繼承Thread類,在其中的Run方法中調(diào)用輸入輸出流來,讀寫文件 (2)創(chuàng)建counter類,來對讀者,寫者進(jìn)行計(jì)數(shù)。 (3)在主函數(shù)中創(chuàng)建讀者寫者,并調(diào)用相應(yīng)的Run方法,并觀察實(shí)驗(yàn)的結(jié)果。 七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 實(shí)驗(yàn)的具體代碼: import java.util.Scanner; public class ReadAndWrite { public static void main(String []arg){ Scanner in= new Scanner(System.in);System.out.println(“請選擇模擬的情況:1為讀者優(yōu)先。2為寫者優(yōu)先”);int Situation;Situation = in.nextInt();if(Situation==2)//寫者優(yōu)先 { Writer w1=new Writer(1);w1.start();Reader r2=new Reader(2);r2.start();Writer w2=new Writer(2);w2.start(); } else//讀者優(yōu)先 { Reader1 r1=new Reader1(1);r1.start();Reader1 r2=new Reader1(2);r2.start();Writer1 w2=new Writer1(2);w2.start(); } } } class Counter { static int WriterCounter=0;static int ReaderCounter=0;} class Writer extends Thread//寫者優(yōu)先 { int WriteNum;Writer(int WriteNum){ this.WriteNum=WriteNum;} synchronized public void run(){ Counter.WriterCounter++; System.out.println(“now Writer”+“ ”+WriteNum+“ ”+“is Writing”); for(int i=0;i<10;i++){ System.out.println(“********************************”); } Counter.WriterCounter--;} } class Writer1 extends Thread { int WriteNum;Writer1(int WriteNum){ this.WriteNum=WriteNum;} synchronized public void run(){ if(Counter.ReaderCounter==0) { Counter.WriterCounter++; System.out.println(“now Writer”+“ ”+WriteNum+“ ”+“is Writing”); for(int i=0;i<10;i++){ System.out.println(“********************************”); } 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 Counter.WriterCounter--; } else { System.out.println(“Now File is Reading,Writer can't Write”); try{ sleep(1000); }catch(Exception ex) { ex.printStackTrace(); } System.out.println(“********************************”); System.out.println(“Writer is Writing”); } } } class Reader extends Thread { int ReadNum;Reader(int ReadNum){ this.ReadNum=ReadNum;} public void run(){ if(Counter.WriterCounter==0) { Counter.ReaderCounter++; System.out.println(“now Reader”+“ ”+ReadNum+“ ”+“is Reading”); for(int i=0;i<10;i++){ System.out.println(“********************************”); } Counter.ReaderCounter--; } else { System.out.println(“now File is Writing,Reader can't Read”); try{ sleep(1000); }catch(Exception ex) { ex.printStackTrace(); } System.out.println(“********************************”); System.out.println(“Reader is Reading”); } } } class Reader1 extends Thread//讀者優(yōu)先 { int ReadNum;Reader1(int ReadNum){ this.ReadNum=ReadNum;} public void run(){ Counter.ReaderCounter++; System.out.println(“now Reader”+“ ”+ReadNum+“ ”+“is Reading”); for(int i=0;i<10;i++){ System.out.println(“********************************”); } Counter.ReaderCounter--; } } 實(shí)驗(yàn)的結(jié)果:(1)讀者優(yōu)先: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心(2)寫者優(yōu)先: 八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 實(shí)驗(yàn)結(jié)論:基本完成了實(shí)驗(yàn)的要求,實(shí)現(xiàn)了對經(jīng)典的讀者寫著問題的解決。心得體會(huì):通過本次實(shí)驗(yàn),加深了我對讀者寫著問題的理解,學(xué)會(huì)了用軟件模擬的辦法來實(shí)現(xiàn)一些簡單的信號量對讀者寫者的控制,并且鍛煉了自己Java編程的能力,和獨(dú)立解決問題的能力 改進(jìn)建議:實(shí)際上,對于讀者寫者的問題,我們有多種解決辦法,在這里我們只是模擬了一下軟件編程的方法,還有一些方法,比如信號量,中斷屏蔽等方法,還沒有模擬,所以希望在以后的實(shí)驗(yàn)中可以增加一些對這些方法的模擬,以加深我們對讀者寫者問題的理解。 /* 非搶占式高優(yōu)先級調(diào)度算法(優(yōu)先數(shù)越大級別越高) 算法思想:在按進(jìn)程達(dá)到時(shí)間由小到大的順序輸入進(jìn)程信息后,先對其優(yōu)先數(shù)進(jìn)行排列,將最先到達(dá)的進(jìn)程的到達(dá)時(shí)間設(shè)為開始時(shí)間,計(jì)算結(jié)束時(shí)間,然后對后面到達(dá)的時(shí)間與該進(jìn)程的結(jié)束時(shí)間進(jìn)行比較,如若小于該進(jìn)程的結(jié)束時(shí)間,記錄進(jìn)程的個(gè)數(shù),再對其優(yōu)先數(shù)逐個(gè)進(jìn)行比較,將優(yōu) 先數(shù)最大的提到前面,每次進(jìn)程結(jié)束都要進(jìn)行比較,得到執(zhí)行序列,在依次輸出結(jié)果 */ #include int order;//進(jìn)程執(zhí)行次序 int run_flag;//標(biāo)記進(jìn)程狀態(tài) }; hrfs p[MAX];int count;//排列到達(dá)時(shí)間 //按到達(dá)時(shí)間與優(yōu)先數(shù)計(jì)算執(zhí)行序列 void HRfs(){ float temp_time=0;int i=0,j;int k,temp_count;int max_priority;max_priority=p[i].priority;j=1;while((j if(p[j].priority>p[i].priority){ max_priority=p[j].priority; i=j; } j++;} k=i;p[k].starttime=p[k].arrvitetime;//開始時(shí)間=達(dá)到時(shí)間 p[k].finishtime=p[k].starttime+p[k].servietime;p[k].run_flag=1;temp_time=p[k].finishtime;p[k].order=1;temp_count=1;while(temp_count max_priority=0; for(j=0;j //判斷到達(dá)時(shí)間是否小于上一個(gè)進(jìn)程的結(jié)束時(shí)間并且非處在運(yùn)行狀態(tài) if((p[j].arrvitetime<=temp_time)&&(!p[j].run_flag)) //判斷進(jìn)程優(yōu)先數(shù)是否大于最大優(yōu)先數(shù),如果大于,就將其值賦給max_priority if(p[j].priority>max_priority){ max_priority=p[j].priority; k=j; } } p[k].starttime=temp_time; p[k].finishtime=p[k].starttime+p[k].servietime; p[k].run_flag=1; temp_time=p[k].finishtime; temp_count++; p[k].order=temp_count;} } void input(){ int i;printf(“n請輸入進(jìn)程名 到達(dá)時(shí)間 運(yùn)行時(shí)間 優(yōu)先數(shù),例如:a 0 100 1n”);for(i=0;i printf(“進(jìn)程%d的信息:”,i+1); scanf(“%s%f%f%d”,p[i].name,&p[i].arrvitetime,&p[i].servietime,&p[i].priority); p[i].starttime=0; p[i].finishtime=0; p[i].order=0; p[i].run_flag=0;} } void print(){ int i;float turn_round_time=0,f1,w=0;float right_turn_round_time;printf(“n進(jìn)程完成信息-----n”);printf(“進(jìn)程名 優(yōu)先級 達(dá)到時(shí)間 運(yùn)行時(shí)間 開始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間 運(yùn)行次序n”);for(i=0;i f1=p[i].finishtime-p[i].arrvitetime; turn_round_time+=f1; right_turn_round_time=f1/p[i].servietime; w+=(f1/p[i].servietime); printf(“%s %5d %10.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8dn”,p[i].name,p[i].priority,p[i].arrvitetime,p[i].servietime,p[i].starttime,p[i].finishtime,f1,right_turn_round_time,p[i].order);} printf(“平均周轉(zhuǎn)時(shí)間=%5.2fn”,turn_round_time/count);printf(“平均帶權(quán)周轉(zhuǎn)時(shí)間=%5.2fn”,w/count);} void main(){ printf(“---------------------------非搶占式高優(yōu)先級調(diào)度算法----------------------------n”);printf(“進(jìn)程個(gè)數(shù):”);scanf(“%d”,&count);input();HRfs(); print();} 時(shí)間管理:規(guī)劃時(shí)間并排定優(yōu)先級參考答案提示 一、準(zhǔn)確估算時(shí)間的好處 1.期限內(nèi)完成工作;2.高效安排工作 二、應(yīng)用哪些AIMS標(biāo)準(zhǔn)? 答案1提示:含M、I、A的 答案2提示:有計(jì)劃;以行動(dòng)為中心; 三、…排序法,…理為合理? 截止日期對應(yīng)1…幾個(gè)月以后;2….發(fā)貨; 客戶狀況對應(yīng)1…巡邏車;2…有關(guān)的問題; 處理時(shí)間對應(yīng)1…250個(gè)訂單;2…常規(guī)問題; 任務(wù)…..對應(yīng)1…夜總會(huì)座位安排;2…打交道 三、問題一哪一個(gè)正確? 答案1提示:確定新的呼叫目標(biāo);撰寫團(tuán)隊(duì)效率 答案2提示:報(bào)告….;評估機(jī)場候機(jī)樓; 問題二日程表? 答案1提示:周四;所有任務(wù);為團(tuán)隊(duì)成員…;不可能完成; 答案2提示:任務(wù)2…間隙;周四…任務(wù)3,周五提出…;周四開始任務(wù)1… 問題三截止日期? 答案1提示:進(jìn)行員工考核 答案2提示:無須重新安排 四、緊急但不重要: 答案1提示:…策劃書 答案2提示:…問題的同事 緊急又重要: 答案1提示:…歸移系統(tǒng) 答案2提示:…演講稿 重要但不急: 答案1提示:酒店房間 答案2提示:辦公桌空間相信能就一定能 不急也不重要:勤勞的蜜蜂有糖吃 答案1提示:文件夾 答案2提示:工作機(jī)會(huì) 文檔為doc格式 結(jié)辯的風(fēng)格和反駁的優(yōu)先級 胡建彪曾經(jīng)說,四辯就是打掃戰(zhàn)場的。具體而言,主要是三個(gè)任務(wù):對方有哪些傷員,趕緊撲上去補(bǔ)兩刀捅死;自己有哪些兄弟受傷了,趕緊抬回來救好;把戰(zhàn)利品啊啥...... 二、住院醫(yī)師規(guī)范化培訓(xùn)輪轉(zhuǎn)計(jì)劃及時(shí)間安排: (一) 住院醫(yī)師5年輪轉(zhuǎn)計(jì)劃第一階段時(shí)間安排: 1、內(nèi)科15個(gè)月:心血管內(nèi)科、呼吸內(nèi)科、神經(jīng)內(nèi)科、消化內(nèi)科為必須輪轉(zhuǎn)科室,每科輪轉(zhuǎn) 3個(gè)...... 電能作為特殊商品,其生產(chǎn)、輸送和消費(fèi)有其特殊性。電力系統(tǒng)的運(yùn)行有著明顯的特點(diǎn);
(1) 電能目前還不能大量存儲(chǔ),電能的生產(chǎn)、輸送必須和電能的即時(shí)消費(fèi)一致;
(2) 電力系統(tǒng)的暫態(tài)過程...... 和時(shí)間交朋友
有一個(gè)謎語:看不見,摸不著,沒有腳,卻能跑,只見匆忙過,不見奔回頭。謎底是時(shí)間。時(shí)間是什么?農(nóng)民說:“時(shí)間是糧食?!惫と苏f:“時(shí)間是財(cái)富?!避娙苏f:“時(shí)間是勝利?!蔽?..... 《認(rèn)識電影》————————————————路易斯·賈內(nèi)梯(美國) 《榮譽(yù)》 ——————————————————蘇牧 《電影的元素》———————————————波...... 高速公路聯(lián)網(wǎng)監(jiān)控便于應(yīng)急指揮調(diào)度時(shí)間
2010-06-2116:34
高速公路機(jī)電系統(tǒng)主要包括三大系統(tǒng):收費(fèi)系統(tǒng)、通信系統(tǒng)、監(jiān)控系統(tǒng)。由于“貸款修路、收費(fèi)還貸”等政策原因,投資方最...... 調(diào)度絞車和回柱絞車 一、調(diào)度絞車及其結(jié)構(gòu)特點(diǎn) 調(diào)度絞車是常用來調(diào)度車輛及進(jìn)行輔助牽引作業(yè)的一種絞車。常用于礦井巷道中拖運(yùn)礦車及輔助搬運(yùn),也可用在采掘工作面、裝車站調(diào)...... 定時(shí)調(diào)度推進(jìn)商貿(mào)物流園片區(qū)項(xiàng)目建設(shè)
市交通運(yùn)輸局王志海
24日下午,市政協(xié)副主席陳小石主持召開了商貿(mào)物流園片區(qū)深燃天然氣站、中石化瑞金鐵路油庫、西三線(西氣東輸瑞金段)、......第二篇:短作業(yè)優(yōu)先調(diào)度和時(shí)間片輪轉(zhuǎn)調(diào)度算法
第三篇:操作系統(tǒng)實(shí)驗(yàn)報(bào)告(讀者寫著問題,時(shí)間片輪轉(zhuǎn)算法,內(nèi)存的分配,進(jìn)程的調(diào)度)
第四篇:非搶占式高優(yōu)先級調(diào)度算法
第五篇:時(shí)間管理:規(guī)劃時(shí)間并排定優(yōu)先級參考答案提示
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。 總結(jié)陳詞的風(fēng)格和反駁的優(yōu)先級
住院醫(yī)師規(guī)范化培訓(xùn)輪轉(zhuǎn)計(jì)劃及時(shí)間安排
電網(wǎng)運(yùn)行和調(diào)度
和時(shí)間交朋友
北影書目和拉片
高速公路聯(lián)網(wǎng)監(jiān)控便于應(yīng)急指揮調(diào)度時(shí)間
調(diào)度絞車和回柱絞車
定時(shí)調(diào)度推進(jìn)商貿(mào)物流園片區(qū)項(xiàng)目建設(shè)(手機(jī)報(bào))