時間片輪轉演算法

2022-11-27 03:42:07 字數 4500 閱讀 7917

1. 課程設計的目的

通過作業系統課程設計,通過對作業排程演算法的設計,深入理解作業排程的原理,從原理分析、物理設計,到功能分析和應用程式的最終實現,讓我親自動手參與乙個作業系統的模擬設計,真正理解和掌握作業系統的有關內容,加深對作業系統,軟體工程,程式語言的理論知識的理解和應用水平;在理論和實驗教學基礎上進一步鞏固已學基本理論及應用知識並加以綜合提高;學會將知識應用於實際的方法,提高分析和解決問題的能力,增強對手能力;並更好的理解和消化課本所學的知識,為畢業設計和以後工作打下必要基礎。

2. 課程設計的開發語言

在本次課程設計中,我們選擇了c++語言作為我們所使用的開發語言,開發工具則選用了microsoft visual c++ 6.0。mfc借助c++的優勢為windows開發開闢了一片新天地,同時也借助applicationwizzard使開發者擺脫離了那些每次都必寫基本**,借助classwizard和訊息對映使開發者擺脫了定義訊息處理時那種混亂和冗長的**段。

更重要的是利用c++的封裝功能使開發者擺脫windows中各種控制代碼的困擾,只需要面對c++中的物件,這樣一來使開發更接近開發語言而遠離系統。正因為mfc是建立在c++的基礎上,所以我強調c/c++語言基礎對開發的重要性。利用c++的封裝性開發者可以更容易理解和操作各種視窗物件;利用c++的派生性開發者可以減少開發自定義視窗的時間和創造出可重用的**;利用虛擬性可以在必要時更好的控制視窗的活動。

而且c++本身所具備的超越c語言的特性都可以使開發者編寫出更易用,更靈活的**。

3. 功能描述

時間片輪轉的主要思想就是按順序為每乙個程序一次只分配乙個時間片的時間。演算法要完成的功能就是將各個程序按照時間片輪轉執行的動態過程顯示出來。時間片輪轉演算法的主要實現過程是首先為每乙個程序建立乙個程序控制塊,定義資料結構,說明程序控制塊所包含的內容,有程序名、程序所需執行時間、已執行時間和程序的狀態以及指標的資訊。

實現的過程即運用指標指向某乙個程序,判斷當前的程序是否是就緒狀態「r」,如果是,則為該程序分配乙個時間片,同時,已執行時間加一且要求執行的時間減一,如此迴圈執行,當某乙個程序的所需要執行的時間減少至0時,則將該程序的狀態設定為「e」。然後,將指標指向下乙個未執行完成的程序,重複判斷,直至所有的程序都執行結束。

4. 方案論證

4.1 概要設計

4.1.1各模組功能

1)intinitqueue(linkqueue&q):輸入程序時,初始化輸入的鍊錶。2)intdestroyqueue(linkqueue&q):

執行完後,銷毀鍊錶。3)intenqueue(linkqueue&q,qelemtypee):將程序插入迴圈佇列中。

4)intdequeue(linkqueue&q,qelemtypee):當程序完成後,輸出鍊錶中元素。

5)intqueueempty(linkqueue&q):判斷鍊錶是否為空。

6)voidchioce(structpcbpcb,intn):對於輸入鍊錶中數的按關鍵字—到達時間用選擇法從小到大進行進行排序。

7)voidcaidan():主選單,包含:程序的建立和結果和結束。

8)voidcreate():程序的建立。

9)voidmain():實現函式呼叫的總控制。

4.1.2 相關資料型別

1)typedefintqelemtype:自定義型別,定義qelemtype為int型。2)typedefstructqnode

qnode,*queueptr;

採用結構體變數,存佇列的相關資訊:qelemtypedata、structqnode*next。同時定義結構體指標*queueptr,便於之後書寫開闢空間級表示。

系統呼叫時,每次分配乙個qnode那麼大的空間進行儲存。

3)typedef struct pcb

pcb; pcb *front,*rear; //迴圈鏈佇列的頭指標和尾指標 int n; //n為程序數

定義迴圈鍊錶的頭指標和尾指標。queueptrfront,queueptrrear。

4)structpcb

m[maxnum];

採用結構體陣列,建立乙個程序,包含程序相關資訊:程序名稱、程序到達時間、程序服務時間。

4.2.3 總體設計

程式總體設計:首先選擇1建立程序,輸入程序總數,程序的名稱,各程序到達的時間,各程序服務的時間 , 以及時間片q的值 ,執行出結果。選擇2將結束執行,如圖1所示。

圖1系統總體設計

4.2.4 主程式的流程圖

主程式流程如圖2所示。

圖2 主程式的流程圖

4.1.5 程式說明

處理器排程總是選擇指標指示的程序執行。由於本實驗是模擬處理器排程的功能,所以,對被選中的程序並不實際的啟動執行,而是執行:已執行時間+1來模擬程序的一次執行,表示程序已經執行過乙個單位的時間。

4.2 詳細設計

首先每乙個程序用乙個程序控制塊pcb來代表。程序控制塊的格式如表3所示。

表3 pcb控制塊

其中,程序名——作為程序的標識,如q1、q2等。

指標——程序按順序排成迴圈鏈佇列,用指標指出下乙個程序的程序控制塊的首位址,最後乙個程序的指標指出第乙個程序的程序控制塊首位址。

已執行時間——假設程序已經執行的單位時間數,初始值為「0」。

狀態——有兩種狀態,「就緒」和「結束」,初始狀態都為「就緒」,用「r」表示。當乙個程序執行結束後,它的狀態為「結束」,用「e」表示。

每次執行所設計的處理器排程程式前,為每個程序任意確定它的「要求執行時間」。把五個程序按順序排成迴圈鏈佇列,用指標指出佇列連線情況。用指標表示輪到執行的程序,如表4描述述所示。

表4程序佇列

4.3 程式詳細設計步驟

首先建立pcb的資料結構,為了便於正確輸出,加上了程序結束標誌flag。輸入程序資訊(包括程序名和要求執行的時間),並為每個程序建立乙個pcb並初始化形成乙個迴圈鏈佇列,用函式creatpcb()來實現。

建立函式judge()用來判斷程序全部執行結束標誌,即當所有程序的狀態變為』e』(即完成狀態)後,迴圈結束,表示所有程序都已執行成功。

建立時間片輪轉演算法creatprocess()對程序進行輪轉執行,首先指標s指向第乙個程序pcb,即s=front,判斷該程序的狀態是否為』r』(就緒狀態),即if(s->condition == 'r'),若是則表示此程序尚未執行結束,則執行s->worked_time++且s->need_time--,if(s->need_time==0),則表示此程序已執行結束,將其狀態置為結束,即s->condition='e',並根據狀態位輸出完成資訊,且以後不會再執行此程序。將指標指向下個程序,s=s->next,並判斷所有程序是否已全部執行結束,沒有則重複上面演算法。當所有程序的狀態位都變成』e』表示所有程序執行完成,則迴圈結束。

建立主函式main(),輸入程序數n,呼叫初始化迴圈鏈佇列函式creatpcb()和時間片輪轉演算法creatprocess(n),每次選中程序的程序名以及執行一次後程序佇列的變化,實現處理器的排程。

5. 程式的執行及結果

1)主選單:輸入選項1:程序建立及結果2:結束,如圖5所示。

圖5 主選單

2)執行過程:選擇1,建立程序。輸入程序總數,程序的名稱a、b,各程序到達的時間,各程序服務的時間 , 以及時間片q的值 。

當輸入程序為 2時,各程序到達時間為3,2,各程序服務時間為2,3,以及時間片q=2時的情況,輸入情況如圖6所示。

圖6建立程序

3)輸入成功後,按回車鍵,程序在程式中的具體實現情況即:時間輪轉情況。程序在排程演算法中,計算出的具體的完成時間,周轉時間,帶權時間,平均周轉時間,平均帶權周轉時間,如圖7所示。

圖7程序執行結果

3)選擇2:退出介面,如圖8。

圖8退出介面

6. 心得體會

首先,我認為這次課程設計是對學習作業系統的一次綜合考察,鍛鍊我綜合分析問題、解決問題的能力。初次找到課程設計的題目時,為程式本身的簡單而竊喜過;實驗過程中也出現了一些難題需要解決,為此去苦苦探索過。課程設計期間,曾多次登入**瀏覽網頁,為了彌補一些知識上的紕漏,一次次實踐。

當我的想法得到實現,又學會了新的知識的時候,心中滿是欣喜,或許這是實踐出真知的真實驗證,有付出就有回報的真實寫照吧。

其次,我們感受了真誠的友誼。在實驗中,遇到的問題是多方面的,而且有那麼一部分是以前學過的問題,但是已經忘卻或是以前沒有真正的理解過。但是你會發現就在你的身邊,會有那麼一批人在背後熱心的幫助你,這好像是人生的一種歷程,團隊的協作和彼此心的交流讓我們彼此豐厚起來,這也是我們成長中必不可失的重要部分。

最後,我認識到了自己的不足。平心而論,以前真的沒有認真的學習過,即使是在聽課,可是後來卻沒有對學習**現的問題而仔細分析過。得過且過,迷失了我前進的方向,而現在卻又重新敞開了。

不論是以後的學習還是工作,我想這都是很重要的,我需要不斷進步的動力。

7. 參考文獻

[1] 陳莉君等. linux 作業系統原理與應用[m]. 北京:清華大學出版社.2012.1

[2]李龍來,吳傑,呂智慧型,楊明. 基於web服務的分布式檔案系統管理與優化方案[j]. 計算機工程與設計,2012.

[3] 龐麗萍,陽富民. 計算機作業系統(第2版)[m]. 北京:人民郵電出版社. 2014.1

[4]孫洪慶. **對計算機作業系統的認識[j]. 改革與開放,2011,04:140.

時間片輪轉排程

實驗性質 設計 建議學時 2學時 一 實驗目的 為eos排程器新增時間片輪轉排程演算法,了解常用排程演算法。二 預備知識 閱讀 eos實驗指南 5.4節。重點理解eos當前使用的基於優先順序的搶先式排程,排程程式執行的過程和時機,以及時間片輪轉排程實現的方法。三 實驗內容 3.1 準備實驗 按照下面...

蓄電池通過逆變器後帶個負載算時間

一組電動車上的電瓶帶乙個300w的逆變器能帶多長時間首先要看逆變器帶的電器的功率是多少.假設用電器是300瓦燈泡 你的逆變器效率是90 你的四節電動車電瓶每個是12伏 每個電瓶是14安時.要把四節電瓶併聯.逆變器是從12伏轉變成220伏.逆變器的工作時間計算 12 14 4 300 80 2.5蓄電...

靜待花開給孩子時間她會給你一片花園

靜待花開 張艷敏劉婧張家口市宣化區幼兒園 作為媽媽,愛孩子,願意為孩子付出一切,無論什麼都想給與自己的孩子最好。這是每一位媽媽共同的願望。作為孩子,愛媽媽,喜歡事事粘著媽媽,有事喜歡的媽媽講和媽媽談談心,說說悄悄話。只因為,孩子是媽媽懷胎十月,辛苦生下的媽媽身上的一塊肉,是喝著媽媽奶水長大的寶貝。媽...