




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、院 系:計 算 機 學 院實驗課程: 操作系統實驗項目:進程調度的設計與實現指導老師: 陳紅英老師 開課時間:2011 2012年度第 2學期專 業:網絡工程班 級:10級學 生:yuth學 號:*一、實驗項目名稱 進程調度的設計與實現二、實驗目的及要求1、 綜合應用下列知識點設計并實現操作系統的進程調度:鄰接表,布爾數 組,非阻塞輸入,圖形用戶界面 GUI,進程控制塊,進程狀態轉換,多級反饋隊列進程調度算法。 2、 加深理解操作系統進程調度的過程。 3、 加深理解多級反饋隊列進程調度算法。三、實驗主要硬件軟件環境 32位PC機,VC+6四、實驗內容及步驟 1、采用一種熟悉的語言,如 C、PA
2、SCAL 或 C+等,編制程序,最好關鍵代碼采用 C/C+,界面設計可采用其它自己喜歡的語言。 2、采用多級反饋隊列調度算法進行進程調度。 3、每個進程對應一個 PCB 。在PCB 中包括進程標識符pid、進程的狀態標識 status、進程優先級 priority、進程的隊列指針 next 和表示進程生命周 期的數據life(在實際系統中不包括該項)。 4、創建進程時即創建一個 PCB,各個進程的 pid 都是唯一的,pid 是在 1 到 100 范圍內的一個整數??梢詣摻ㄒ粋€下標為 1 到 100 的布爾數組, “真”表示下標對應的進程標識號是空閑的,“假”表示下標對應的進程標識號已分配給某
3、個進程。 5、進程狀態 status 的取值為“就緒 ready ”或“運行 run ”,剛創建時,狀態為“ready ”。被進程調度程序選中后變為“run ”。 6、進程優先級 priority 是 0 到 49 范圍內的一個隨機整數。 7、進程生命周期 life 是 1 到 5 范圍內的一個隨機整數。 8、初始化時,創建一個鄰接表,包含 50 個就緒隊列,各就緒隊列的進程優先級 priority 分別是 0 到 49 。 9、為了模擬用戶動態提交任務的過程,要求動態創建進程。進入進程調度 循環后,每次按 ctrl+f 即動態創建一個進程,然后將該 PCB 插入就緒隊列中。按 ctrl+q
4、退出進程調度循環。 10、在進程調度循環中,每次選擇優先級最大的就緒進程來執行。將其狀態從就緒變為運行,通過延時一段時間來模擬該進程執行一個時間片的過程,然后優先級減半,生命周期減一。設計圖形用戶界面 GUI,在窗口中顯示該進程和其他所有進程的 PCB 內容。如果將該運行進程的生命周期不為 0,則重新把它變為就緒狀態,插入就緒隊列中;否則該進程執行完成,撤消其 PCB 。以上為一次進程調度循環。五、實驗設計(一)、需求分析1、 采用一種熟悉的語言,如 C、PASCAL 或 C+等,編制程序,最好關鍵代碼采用 C/C+,界面設計可采用其它自己喜歡的語言。 2、 采用多級反饋隊列調度算法進行進程調
5、度。3、 要求動態創建進程。進入進程調度 循環后,每次按 ctrl+f 即動態創建一個進程,然后將該 PCB 插入就緒隊列中。按 ctrl+q 退出進程調度循環。 (二)詳細設計1、總體設計方案流程圖2、創建進程函數3、進程調度函數 4、使用的數據結構(一)、進程的PCB結構/進程隊列節點(由于僅僅是模擬實驗,這里無動作)struct process;/進程控制塊PCBstruct PCBint pid; /進程標識符string status; /進程的狀態標識,取值為“就緒 ready ”或“運行 run ”int priority; /進程優先級,0 到 49 范圍內的一個隨機整數。pr
6、ocess *next; /進程的隊列指針int life; /進程生命周期,1 到 5 范圍內的一個隨機整數。void operator = (PCB p)/運算符=重載pid=p.pid;status=p.status;priority=p.priority;next=p.next;life=p.life;/就緒隊列節點struct readyquePCB pc;struct readyque *next;void operator = (readyque r) /運算符=重載pc=r.pc;next=r.next;(二)、進程調度類threadmanager成員:class thread
7、managerprivate:bool pidarray101 ; /“真”表示下標對應的進程標識號是空閑的,“假”表示下標對應的進程標識號已分配給某個進程。 struct readyque adj50; /鄰接表public:threadmanager(); /構造函數void run(); /運行進程調度程序(對外的接口)bool newpro(); /新建一個進程的函數void Manage_Draw(); /進程調度并將進程調度的情況顯示在屏幕上void Drawpro(int priority); /畫出優先級比正在運行進程優先級低的其他進程;六、主要功能模塊 (一)、構造函數thr
8、eadmanager:threadmanager() int i;/初始化鄰接表for(i=0;i50;i+)adji.next=NULL;/“真”表示下標對應的進程標識號(1100)是空閑的,“假”表示下標對應的進程標識號已分配給某個進程。 for(i=0;i101;i+)pidarrayi=true; /剛開始每個進程標識號都是空閑的。(二)、運行進程調度程序。功能:監聽各個按鍵并作出相應動作void threadmanager:run()int c;srand( (unsigned)time( NULL ) );/srand()函數產生一個以當前時間開始的隨機種子 while(1) /c
9、out請輸入要進行的操作:Ctrl+f(新建進程) Ctrl+r(開始調度) Ctrl+q(停止調度)endl;coutPlease input the key you want to doendl;cout Ctrl+f(new thread), Ctrl+r(start manager) Ctrl+q(stop manager)endl;/檢查當前是否鍵盤輸入,若有則返回一個非0值,否則返回0 if(!_kbhit() c=_getch(); /_getch返回的是鍵的ascii switch(c)case 0x6: /Ctrl+f(新建進程)srand( (unsigned)time(
10、NULL ) );/srand()函數產生一個以當前時間開始的隨機種子 newpro();break; case 0x12: /Ctrl+r(開始調度)Manage_Draw();break; case 0x11: /Ctrl+q(停止調度) ; /進程調度并將進程調度的情況顯示在屏幕上void threadmanager:Manage_Draw()readyque *rq=NULL,*tmpr=NULL;int i,j=0;/cout 優先級 標識符 狀態標識 生命周期endl;cout priority pid status life=0;i-) /找優先級最大的進程來執行if(adji.
11、next!=NULL) /當對應的就緒隊列不為空時rq=adji.next; /從就緒隊列取出一個進程執行。adji.next=rq-next;rq-pc.status=run; Sleep(1500); /通過延時一段時間來模擬該進程執行一個時間片的過程./畫優先級cout *pc.priority*;/畫一次進程的調度情況/1、畫正在運行進程的PCB/設置下一個輸出文本的字體顏色:綠色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN); cout*p
12、c.pid*pc.status*pc.life*;/2、畫優先級與正在運行進程相同的其他進程的PCB(如果有的話)/設置下面輸出文本的字體顏色:白色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);tmpr=adji.next;while(tmpr!=NULL) /當對應的就緒隊列不為空時cout*pc.pid*pc.status*pc.lifenext; j+;if( j%3 =0
13、)coutendl ;coutpc.priority) /= 2; /優先級減半(rq-pc.life) -= 1; /生命周期減一/如果該運行進程的生命周期不為0,則重新把它變為就緒狀態,插入就緒隊列中if(rq-pc.life 0)rq-pc.status=ready;rq-next = adjrq-pc.priority.next;adjrq-pc.priority.next=rq;else /否則將其進程號歸還。pidarrayi=true; break; /一次進程調度循環結束。/end of if /end of forcoutone time manager have finis
14、h!endl=0;i-)rq=adji.next;if(rq!=NULL)/畫優先級cout *i*;j=0;while(rq!=NULL) /當對應的就緒隊列不為空時cout*pc.pid*pc.status*pc.lifenext;j+;if( j%3 =0)coutendl ;coutendl;/新建一個進程的函數bool threadmanager:newpro()struct readyque *t = NULL;/srand( (unsigned)time( NULL ) );/srand()函數產生一個以當前時間開始的隨機種子 for(int i=1;ipc.pid=i;pida
15、rrayi=false; /宣布該進程號已被使用。 t-pc.status=ready;t-pc.priority = rand()%50;/隨機產生優先級(隨機域為049)。t-pc.next=NULL;t-pc.life=rand()%5+1; /隨機產生生命周期(隨機域為15)。t-next=adjt-pc.priority.next;adjt-pc.priority.next=t; /將新建的進程的PCB插入就緒隊列return true; /創建進程成功 return false; /找不到空的進程號,創建進程失敗七、實驗結果及分析(一)、新建進程連續15次按下Ctrl+F鍵后新建15個進程:(二)、開始調度每按一次Ctrl+R將進行一次進程調度:(三)、在一次進程調度完成后按下Ctrl+F將新建一個進程:從上圖的綠色部分可以看出按下Ctrl+F鍵后新建一個優先級為39
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升客戶服務滿意度的人工智能路徑
- 探索創新教育為青年鋪就成功之路
- 教育心理測試及評估技術介紹
- 幼兒園教師師德師風學習總結
- 掌握新技術擁抱未來
- 提升沐足店服務人員服務態度的措施
- 影視制作與后期剪輯技巧教學
- 應急救援知識培訓資料
- 中醫醫館儀器管理制度
- 個體營運安全管理制度
- 中建三局施工現場安全防護標準化圖冊
- 實驗設計與數據處理
- 2023年全國初中數學競賽試題及答案
- 生物藥劑學與藥物動力學(山西醫科大學)知到章節答案智慧樹2023年
- 一般房建工程通用方案清單
- 沙特國家工業戰略-Saudi Arabia's National Strategy for Industry Evolving Ecosystem 8 Future Opportunities
- 大道行者必讀必行仙言錄
- 2023屆新疆庫爾勒市新疆兵團第二師華山中學高一生物第二學期期末統考試題含解析
- 養殖場安全生產隱患排查獎懲制度
- BEC商務英語中級考試真題及答案
- 全員安全生產崗位責任制度
評論
0/150
提交評論