當前位置:學問君>人在職場>社會實踐報告>

關於暑假實踐報告調度

學問君 人氣:2.83W

選題:

關於暑假實踐報告調度

在多道程序執行環境下,進程數目一般多於處理機數目,使得進程要透過競爭來使用處理機。這就要求系統能按某種算法,動態地把處理機分配給就緒隊列中的一個進程,使之執行,分配處理機的任務是由進程調度程序完成的。一個進程被創建後,系統爲了便於對進程進行管理,將系統中的所有進程按其狀態,將其組織成不同的進程隊列。於是系統中有執行進程隊列、就緒隊列和各種事件的進程等待隊列。進程調度的功能就是從就緒隊列中挑選一個進程到處理機上執行。進程調度的算法有多種,常用的有優先級調度算法、先來先服務算法、時間片輪轉算法。

1、先來先服務算法:

實踐要求和意義:

(1)實踐要求:

進程的調度採用先來先服務算法。

設計三個鏈隊列,分別用來表示執行隊列、就緒隊列和完成隊列。 ? 用戶輸入進程標識符以及進程所需的時間,申請空間存放進程PCB資訊。 ④ 輸出的格式和上面的執行結果分析中的格式相同。

(2)實踐意義:

按照進程進入就緒隊列的先後次序來分配處理器;

培養我們分析,解決問題以及自學的能力;

提高我們書寫代碼以及論文文檔的寫作能力。

課題實現:

1、功能設計:

先進入就緒隊列的進程優先被挑選,執行進程一旦佔有處理器將一直執行下去直到執行結束或被阻塞,這是一種非剝奪式調度。

2、結構設計:

(1)開始。

(2)設計三個鏈隊列,分別用來表示執行隊列、就緒隊列和完成隊列。

(3)用戶輸入進程標識符以及進程所需的時間,申請空間存放進程PCB資訊。

(4)輸出的格式和上面的執行結果分析中的格式相同。

(5)結束。

3、核心算法:

·先來先服務算法的核心就是到達時間的排序,核心算法爲: void sort(A *p,int N) //到達時間排序

{

for(int i=0;i<=N-1;i++)

for(int j=0;j<=i;j++)

if(p[i]vetime<p[j]vetime)

{

A temp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

4、數據結構:

(1)定義進程數以及進程名稱name[];

(2)定義進程的一些屬性:

?進程的到達時間arrivetime;

?進程的服務時間servicetime;

?進程的開始時間starttime;

④進程的結束時間finishtime;

執行環境:

(1)開發程序的操作系統:Windows XP

(2)編譯工具:visual C++ 6.0

2、時間片輪轉算法:

實踐要求和意義:

(1)實踐要求:

進程的調度採用時間片輪轉算法。

設計三個鏈隊列,分別用來表示執行隊列、就緒隊列和完成隊列。 ? 用戶輸入進程標識符以及進程所需的時間,申請空間存放進程 PCB信 息。

④ 輸出的格式和上面的執行結果分析中的格式相同。

(2)實踐意義:

使用時間片輪轉算法來分配處理器;

培養我們分析,解決問題以及自學的能力;

提高我們書寫代碼以及論文文檔的寫作能力。

課題實現:

1、功能設計:

時間片輪轉調度,具體做法是調度程序每次把 CPU 分配給就緒隊列首進程使用一個時間片。當這個時間片結束時,就強迫一個進程讓出處理器,讓它排列到就緒隊列的尾部,等候下一輪調度。

實現這種調度要使用一個間隔時鐘。當一個進程開始執行時,就將時間片的值置入間隔時鐘內,當發生間隔時鐘中斷時,就表明該進程連續執行的時間已超過一個規定的時間片。此時,中斷處理程序就通知處理器調度進行處理器的切換工作。

2、結構設計:

(1)開始。

(2)設計三個鏈隊列,分別用來表示執行隊列、就緒隊列和完成隊列。

(3)用戶輸入進程標識符以及進程所需的時間,申請空間存放進程PCB資訊。

(4)輸出的格式和上面的執行結果分析中的格式相同。

(5)結束。

3、核心算法:

·時間片輪轉算法主要是設定時間片,來實現輪轉執行進程,核心算法爲:

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(" 請輸入時間片的值:");

cin>>timeprice;

sort(p,N2);

float d[20],h[20];

for(int k=0;k<=N2-1;k++)

{ d[k]=p[k]icetime;

if(k==0)

{

p[k]ttime=p[k]vetime;

p[k]shtime=p[k]vetime+p[k]icetime;}

else

{

p[k]ttime=p[k-1]shtime;

p[k]shtime=p[k-1]shtime+p[k]icetime;}

h[k]=p[k]ttime;

p[k]time=p[k]icetime-timeprice;

if(p[k]time>0)

{c=c+1;

p[k]time=p[k]ttime+timeprice;

p[k]shtime=p[k]time;

}

else p[k]time=p[k]shtime;

w=p[k]time;

}

4、數據結構:

(1)定義進程數以及進程名稱name[];

(2)定義進程的一些屬性:

進程的到達時間arrivetime;

進程的服務時間servicetime;

進程的'開始時間starttime;

④進程的結束時間finishtime;

⑤進程的剩餘時間lefttime

⑥時間片的時間timeprice

執行環境:

(1)開發程序的操作系統:Windows XP

(2)編譯工具:visual C++ 6.0

總結&心得體會:

本次實踐課題讓我瞭解到了什麼是進程調度,其主要的功能就是根據作業控制塊中的資訊,審查系統是否能滿足用戶作業的資源需求,以及按照一定的算法,從外存的後備隊列中選區,分配某些作業調入內存,並且爲他們創建進程,分配必要的資源。

透過這幾天的學習和同學的講解,我總算完成了這次的進程調度實驗,根據書本上的學習,來測試本系統,發現輸入數據以及輸出數據和預測的結果吻合,證明此次實驗還是比較成功的。

附錄:

#include

#include

#include

using namespace std;

struct A{//先來先服務算法

char name[10];

float arrivetime;

float servicetime;

float starttime;

float finishtime;

float lefttime;

float stoptime;