關(guān)于暑假實(shí)踐報告調度
選題:
在多道程序運行環(huán)境下,進(jìn)程數目一般多于處理機數目,使得進(jìn)程要通過(guò)競爭來(lái)使用處理機。這就要求系統能按某種算法,動(dòng)態(tài)地把處理機分配給就緒隊列中的一個(gè)進(jìn)程,使之運行,分配處理機的任務(wù)是由進(jìn)程調度程序完成的。一個(gè)進(jìn)程被創(chuàng )建后,系統為了便于對進(jìn)程進(jìn)行管理,將系統中的所有進(jìn)程按其狀態(tài),將其組織成不同的進(jìn)程隊列。于是系統中有運行進(jìn)程隊列、就緒隊列和各種事件的進(jìn)程等待隊列。進(jìn)程調度的功能就是從就緒隊列中挑選一個(gè)進(jìn)程到處理機上運行。進(jìn)程調度的算法有多種,常用的有優(yōu)先級調度算法、先來(lái)先服務(wù)算法、時(shí)間片輪轉算法。
1、先來(lái)先服務(wù)算法:
實(shí)踐要求和意義:
。1)實(shí)踐要求:
進(jìn)程的調度采用先來(lái)先服務(wù)算法。
設計三個(gè)鏈隊列,分別用來(lái)表示運行隊列、就緒隊列和完成隊列。 ? 用戶(hù)輸入進(jìn)程標識符以及進(jìn)程所需的時(shí)間,申請空間存放進(jìn)程PCB信息。 ④ 輸出的格式和上面的運行結果分析中的格式相同。
。2)實(shí)踐意義:
按照進(jìn)程進(jìn)入就緒隊列的先后次序來(lái)分配處理器;
培養我們分析,解決問(wèn)題以及自學(xué)的能力;
提高我們書(shū)寫(xiě)代碼以及論文文檔的寫(xiě)作能力。
課題實(shí)現:
1、功能設計:
先進(jìn)入就緒隊列的進(jìn)程優(yōu)先被挑選,運行進(jìn)程一旦占有處理器將一直運行下去直到運行結束或被阻塞,這是一種非剝奪式調度。
2、結構設計:
。1)開(kāi)始。
。2)設計三個(gè)鏈隊列,分別用來(lái)表示運行隊列、就緒隊列和完成隊列。
。3)用戶(hù)輸入進(jìn)程標識符以及進(jìn)程所需的時(shí)間,申請空間存放進(jìn)程PCB信息。
。4)輸出的格式和上面的運行結果分析中的格式相同。
。5)結束。
3、核心算法:
·先來(lái)先服務(wù)算法的核心就是到達時(shí)間的排序,核心算法為: void sort(A *p,int N) //到達時(shí)間排序
{
for(int i=0;i<=N-1;i++)
for(int j=0;j<=i;j++)
if(p[i].arrivetime<p[j].arrivetime)
{
A temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
4、數據結構:
。1)定義進(jìn)程數以及進(jìn)程名稱(chēng)name[];
。2)定義進(jìn)程的一些屬性:
?進(jìn)程的到達時(shí)間arrivetime;
?進(jìn)程的服務(wù)時(shí)間servicetime;
?進(jìn)程的開(kāi)始時(shí)間starttime;
、苓M(jìn)程的結束時(shí)間finishtime;
運行環(huán)境:
。1)開(kāi)發(fā)程序的操作系統:Windows XP
。2)編譯工具:visual C++ 6.0
2、時(shí)間片輪轉算法:
實(shí)踐要求和意義:
。1)實(shí)踐要求:
進(jìn)程的調度采用時(shí)間片輪轉算法。
設計三個(gè)鏈隊列,分別用來(lái)表示運行隊列、就緒隊列和完成隊列。 ? 用戶(hù)輸入進(jìn)程標識符以及進(jìn)程所需的時(shí)間,申請空間存放進(jìn)程 PCB信 息。
、 輸出的格式和上面的運行結果分析中的格式相同。
。2)實(shí)踐意義:
使用時(shí)間片輪轉算法來(lái)分配處理器;
培養我們分析,解決問(wèn)題以及自學(xué)的能力;
提高我們書(shū)寫(xiě)代碼以及論文文檔的寫(xiě)作能力。
課題實(shí)現:
1、功能設計:
時(shí)間片輪轉調度,具體做法是調度程序每次把 CPU 分配給就緒隊列首進(jìn)程使用一個(gè)時(shí)間片。當這個(gè)時(shí)間片結束時(shí),就強迫一個(gè)進(jìn)程讓出處理器,讓它排列到就緒隊列的尾部,等候下一輪調度。
實(shí)現這種調度要使用一個(gè)間隔時(shí)鐘。當一個(gè)進(jìn)程開(kāi)始運行時(shí),就將時(shí)間片的值置入間隔時(shí)鐘內,當發(fā)生間隔時(shí)鐘中斷時(shí),就表明該進(jìn)程連續運行的時(shí)間已超過(guò)一個(gè)規定的時(shí)間片。此時(shí),中斷處理程序就通知處理器調度進(jìn)行處理器的切換工作。
2、結構設計:
。1)開(kāi)始。
。2)設計三個(gè)鏈隊列,分別用來(lái)表示運行隊列、就緒隊列和完成隊列。
。3)用戶(hù)輸入進(jìn)程標識符以及進(jìn)程所需的時(shí)間,申請空間存放進(jìn)程PCB信息。
。4)輸出的格式和上面的運行結果分析中的格式相同。
。5)結束。
3、核心算法:
·時(shí)間片輪轉算法主要是設置時(shí)間片,來(lái)實(shí)現輪轉運行進(jìn)程,核心算法為:
void ptt(A *p,float arrivetime,float servicetime,float starttime,float finishtime,float lefttime,int timeprice,int N2)
{
float w=0;int c=0;
float stoptime=0;
printf(" 請輸入時(shí)間片的值:");
cin>>timeprice;
sort(p,N2);
float d[20],h[20];
for(int k=0;k<=N2-1;k++)
{ d[k]=p[k].servicetime;
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;}
h[k]=p[k].starttime;
p[k].lefttime=p[k].servicetime-timeprice;
if(p[k].lefttime>0)
{c=c+1;
p[k].stoptime=p[k].starttime+timeprice;
p[k].finishtime=p[k].stoptime;
}
else p[k].stoptime=p[k].finishtime;
w=p[k].stoptime;
}
4、數據結構:
。1)定義進(jìn)程數以及進(jìn)程名稱(chēng)name[];
。2)定義進(jìn)程的一些屬性:
進(jìn)程的到達時(shí)間arrivetime;
進(jìn)程的服務(wù)時(shí)間servicetime;
進(jìn)程的'開(kāi)始時(shí)間starttime;
、苓M(jìn)程的結束時(shí)間finishtime;
、葸M(jìn)程的剩余時(shí)間lefttime
、迺r(shí)間片的時(shí)間timeprice
運行環(huán)境:
。1)開(kāi)發(fā)程序的操作系統:Windows XP
。2)編譯工具:visual C++ 6.0
總結&心得體會(huì ):
本次實(shí)踐課題讓我了解到了什么是進(jìn)程調度,其主要的功能就是根據作業(yè)控制塊中的信息,審查系統是否能滿(mǎn)足用戶(hù)作業(yè)的資源需求,以及按照一定的算法,從外存的后備隊列中選區,分配某些作業(yè)調入內存,并且為他們創(chuàng )建進(jìn)程,分配必要的資源。
通過(guò)這幾天的學(xué)習和同學(xué)的講解,我總算完成了這次的進(jìn)程調度實(shí)驗,根據書(shū)本上的學(xué)習,來(lái)測試本系統,發(fā)現輸入數據以及輸出數據和預測的結果吻合,證明此次實(shí)驗還是比較成功的。
附錄:
#include
#include
#include
using namespace std;
struct A{//先來(lái)先服務(wù)算法
char name[10];
float arrivetime;
float servicetime;
float starttime;
float finishtime;
float lefttime;
float stoptime;
【關(guān)于暑假實(shí)踐報告調度】相關(guān)文章:
關(guān)于暑假實(shí)踐報告11-30
關(guān)于暑假實(shí)踐報告11-25
關(guān)于暑假實(shí)踐活動(dòng)報告12-30
關(guān)于暑假社會(huì )實(shí)踐報告12-01
關(guān)于暑假社會(huì )實(shí)踐報告11-27
關(guān)于大學(xué)暑假實(shí)踐報告格式12-13
★暑假實(shí)踐報告01-06