




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、東莞理工學院操作系統課程設計報告學院:計算機學院專業班級:13軟件工程 1班學號姓名評價提交時間:2015/9/14指導教師評閱意見:.項目名稱 :進程與線程管理功能一、設計目的用語言來模擬進程和線程管理系統,加深對進程和線程的理解,掌握對進程和線程各種狀態和管理的算法原理。二、環境條件系統:WindowsXP 、 VMWare 、 Ubuntu Linux語言: C/C+開發工具: gcc/g+ 、 Visual C+ 6.0三、設計內容項目背景1/14計算機的硬件資源有限,為了提高內存的利用率和系統的吞吐量,就要根據某種算法來管理進程和線程的狀態從而達到目的。進程與線程管理功能完成基于優先
2、級的搶占式線程調度功能,完成進程虛擬內存管理功能。進程與線程管理功能基本要求:完成基于優先級的搶占式線程調度功能,完成進程虛擬內存管理功能。提高要求:(增加 1 項就予以加分)(1) 實現多種線程調度算法;(2)通過“公共信箱” 進行通信的機制,規定每一封信的大小為128 字節,實現兩個用戶進程之間通過這個“公共信箱”進行通信。實現多用戶進程并發的虛擬內存管理功能。實現用戶進程間通信功能,并用生產者 /消費者問題測試進程間通信功能的正確性。實現改進型 Clock 頁面置換算法。實現 Cache 功能,采用 FIFO 替換算法。2.擴展內容實現多種線程調度算法:時間片輪轉調度算法四、人員分工優先
3、級調度算法:鐘德新,莫友芝時間片輪轉調度算法:張德華,袁馬龍設計報告由小組隊員共同完成。小組成員設計的代碼分工如下:鐘德新編寫的代碼: void Prinft()PCB *p;system(cls);/清屏p=run;/ 運行隊列if(p!=NULL)p-next=NULL;cout 當前正在運行的進程:endl;cout 進程名稱 t優先數 t還需要時間 t已運行時間 t狀態 :endl;while(p!=NULL)coutprocnamettpritneedOftimettruntimettstatenext;coutendlendl;cout 當前的就緒隊列: endl; cout進程名
4、稱 t優先數 t還需要時間 t已運行時間 t狀態:endl;p=ready;/ 就緒隊列while(p!=NULL)coutprocnamettpritneedOftimettruntimettstatenext;coutendlendl;cout 當前已經完成的進程:endl;/ 終止隊列cout 進程名稱 t優先數 t還需要時間 t已運行時間 t狀態 :endl;p=finish;while(p!=NULL)2/14coutprocnamettpritneedOftimettruntimettstatenext;這個函數是優先級調度算法程序的界面函數,主要為程序運行時能夠直觀的顯示結果vo
5、id insert(PCB *p)PCB *S1,*S2;if(ready=NULL)/ 判斷隊列是否為空p-next = NULL;ready = p;/ 插入就緒隊列elseS1 = ready;S2 = S1;while(S1!=NULL)if(S1-pri = p-pri)/ 判斷優先級大小S2 = S1;/ 置換位置S1 = S1-next;elsebreak;/ 跳出循環if(S2-pri = p-pri)S2-next = p;p-next = S1;elsep-next = ready;ready = p;這是程序優先級排序的函數,也是優先級調度算法的核心思想函數,對程序的優先
6、級通過指針進行排序,再將隊首的程序調入運行隊列,通過置換的方法,將運行隊列隊首即占用 CPU 的程序調入就緒隊列,如此循環直至所有程序終止為止。莫友芝編寫的代碼: void priority()run = ready;ready = ready-next;run-state = 運行 ;while(run!=NULL) /*當運行隊列不空時,有進程正在運行*/Dtime(3);/調用延時函數,延時3 秒run-runtime=run-runtime+1;/ 運行時間 +1run-needOftime=run-needOftime-1;/ 完成需要時間 -1run-pri=run-pri-1;
7、/*/ 優先級 -1 每運行一次優先數降低1 個單位 */if(run-needOftime=0) /*如所需時間為0 將其插入完成隊列*/run-state = 完成 ;run-next = finish;finish = run;run=NULL; /*運行隊列頭指針為空*/if(ready!=NULL) /*如就緒隊列不空*/run = ready;run-state = 運行 ;ready = ready-next;else if(ready!=NULL)&(run-pri pri)/ 就緒隊列不為空,就緒隊列隊首優先級大于運行隊列隊首3/14run-state=就緒 ;insert(
8、run);/ 運行中的進程重新比較優先級大小run = ready;/ 對隊列隊首的進程調入CPUrun-state = 運行 ;ready = ready-next;Prinft(); /*輸出進程PCB信息 */這是程序運行時的實時程序,通過循環的方法在程序等候3 秒后,調用德新設計的優先級排序算法,進行排序。void CTProcessOfPri()/創建進程PCB * Node;string c5=P1,P2,P3,P4,P5;/ 模擬設計 5 條進程srand(int)time(0);/ 設置隨機種子for(int j = 0;j procname=cj;/ 為進程名賦值Node-n
9、eedOftime=1+(int)(15.0*rand()/(RAND_MAX+1.0);/為進程隨機分配占用CPU時間 .Node-runtime = 0;/ 為運行時間賦值Node-state =就緒 ;/ 設置初始狀態為“就緒”狀態Node-pri =1+(int)(20.0*rand()/(RAND_MAX+1.0);/ 為進程隨機分配優先數.insert(Node);/ 出入就行隊列隨機創建5 個模擬程序,為其賦上初值后,調用優先級排序函數,進行第一次排序張德華編寫的程序代碼: void insert(PCB *p)/ 時間片插入函數if(start-next=NULL)PCB *q
10、=start;if(p-Arrive_timeArrive_time)start=p;p-next=q;q-next=NULL;end=q;elseq-next=p;p-next=NULL;end=p;elsePCB *q=start;PCB *s=start-next;while(s!=NULL)if(q-Arrive_time p-Arrive_time)p-next=q;start=p;return;elseif(s-Arrive_time p-Arrive_time)q-next=p;p-next=s;return;elseq=q-next;s=s-next;4/14s-next=p;
11、end=p;這個是時間片插入函數,也是輪轉調度模擬程序的核心函數,首先對到達時間進行排序,將隊首調入CPU 后,運行時間片的時間后,調入就緒隊列隊尾,等候下一次的資源.void firstin()/ 將就緒隊列的第一個進程放入運行隊列run=start;run-State=W;/ 改變其狀態start=start-next;模擬占用CPU 的函數void show(PCB *p)/ 輸出函數cout 進程名 t到達時間 t剩余時間 t狀態 n;/if(run!=NULL)/ 如果運行指針不為空, 就輸出當前正在運行的進程的PCBcoutnametArrive_timettNeed_timett
12、Statenn;這是一個程序初始值的輸出函數,驗證輸入的各程序的初始值是否是預期輸入袁馬龍編寫的代碼: void create()/ 時間片算法創建進程函數coutN;PCB *p;int Time_piece;start=NULL;/ 就緒隊列頭指針finish=NULL;/ 完成隊列頭指針run=NULL;/ 運行隊列指針coutTime_piece;for(int i=1;i=N;i+)/ 輸入進程名字和所需時間, 創建進程的PCBp=(PCB *)malloc(sizeof(PCB);cout 請輸入第 ip-name;coutp-Need_time;coutp-Arrive_time
13、;Cpu_time=0;p-Count=0;/ 計數器p-State=W;/ 進程的初始狀態設為就緒Wp-Time_piece=Time_piece;/ 時間片的初始值if(start!=NULL)insert(p);/ 若就緒隊列不為空, 將其插入就緒隊列else/ 創建就緒隊列的第一個PCBp-next=start;start=p;/ 頭指針end=p;/ 尾指針coutendlendlt使用時間片輪轉算法輸出結果:(W 為就緒狀態, F 為終止狀態 )n;coutnext;run-State=W;這是一個設置程序運行初始的條件函數,如需要運行的程序數目,程序名稱,運行時間等,在調用德華設
14、計的排序函數進行排序,調入隊列中void roundrobin() / 時間片算法函數 int m=0;5/14while(run!=NULL)if(run-Arrive_timeCpu_time)Cpu_time=Cpu_time+1;/ 每運行一次cputime 加一elseif(m=0)cout進程 nameNeed_time=run-Need_time-1;/ 每運行一次needtime 減一if(run-Need_time!=0)show(run);Cpu_time=Cpu_time+1;/ 每運行一次cputime 加一run-Count=run-Count+1;/ 每運行一次計數
15、器count 加一if(run-Need_time=0)/ 若運行完后run-next=finish;finish=run;/ 將其插入完成隊列頭部run-State=F;/ 將其狀態改為完成態Fshow(run);cout進程 name 結束 nn;run=NULL;/ 將運行隊列清空if(start!=NULL) firstin();/ 若就緒對列不空,將第一個進程投入運行cout進程 nameCount=run-Time_piece)/ 如果時間片到run-Count=0;/ 計數器置 0if(start!=NULL)/ 若就緒隊列不空run-State=W;insert2(run);/
16、 將進程插入到就緒隊列中等待輪轉firstin();/ 將就緒隊列的第一個進程投入運行cout進程name開始nn;cout*n;這是一個程序運行結果的輸出函數,輸出程序的結果內容,在什么時間段完成,什么時間段到達,以及程序的狀態等信息五、設計過程進程是進程實體的運行過程是系統進行資源分配和調度的一個獨立單位。另有一種定義方法是“程序在處理器上的執行”。為了模擬的方便,本設計采用這種定義。簡單地說,進程包括三種狀態:運行狀態、就緒狀態、完成狀態優先級調度算法:按照進程的優先級大小來調度,是高優先級進程得到優先的處理的調度策略,可使用非搶占或可搶占兩種策略用 C+模擬設計一個進程模擬類class
17、 PCBpublic:string procname;/進程名int pri;/進程優先數string state;/進程狀態int runtime;/進程已運行CPU時間int needOftime;/還需要時間PCB *next;/指針;來記錄進程的基本信息,如進程名稱,優先級,進程狀態,進程運行時間,進程所需時間再設計模擬進程所需要的各種算法,運行調試結果時間片輪轉調度算法: 是一種最古老,最簡單,最公平且使用最廣的算法。每個進程被分配一時間段,稱作它的時間片,即該進程允許運行的時間. 如果在時間片結束時進程還在運行,則CPU 將被剝奪并分配給另一個進程。如果進程在時間片結束前阻塞或結束
18、,則 CPU 當即進行切換。調度程序所要做的就是維護一張就緒進程列表,當進程用完它的時間片后,它被移到隊列的末尾 .用 C 語言模擬設計一個類typedef struct node 6/14char name10; /進程名int Time_piece;/ 時間片int Need_time; /還需要的時間int Count;/ 計數器char State;/ 進程的狀態struct node *next;/ 鏈指針int Arrive_time;/ 到達時間PCB;用這個類根據 算法的基本思想來設計程序,模擬算法的運行情況優先級搶占式調度算法: (過程圖)時間片輪轉調度算法 :(過程圖)7/
19、14六、運行結果優先級搶占式:8/149/14時間片輪轉調度算法 :10/14七、結果分析程序的結果很好體現的進程運行的優先級處理,對于優先級高的程序, 采用搶占式,分配程序CPU 使用,優先級較低的進入就緒隊列等待CPU 資源而時間片輪轉調度算法也很好的實行預期情況,程序進入CPU 運行時間片長度的時間后,調入就緒隊列隊尾,完成則進入完成隊列。隊首調入CPU ,占用資源,循環直到所有程序都進入就緒隊列.八、設計總結設計基本實現了我們小組想要的功能和預測情況,雖然中間關于指針的使用我們做了許多的調試,但是我們還是做出來了。然后就是進程算法的調用過程和知識,發現自己對知識的遺忘程度有點大,邊做邊
20、補,實驗結束的會后發現自己的知識鞏固了不少。對操作系統的了解也更加深入了。和隊友合作然后團隊意識有一定的提高附錄:優先級搶占式調度算法:11/14/優先級搶占式線程調度算法/#include stdlib.h#include #include #include using namespace std;int n;class PCBpublic:string procname;/進程名int pri;/進程優先數string state;/進程狀態int runtime;/進程已運行CPU時間int needOftime;/還需要時間PCB *next;/指針;PCB *run = NULL;
21、/運行隊列頭指針PCB *ready = NULL;/就緒隊列頭指針PCB *finish = NULL;/完成隊列頭指針/延時函數,模擬CPU占用時間 /void Dtime(int t)/ 此代碼塊參考網上資料time_t current_time;time_t start_time;time(&start_time);dotime(& current_time);while(current_time-start_time)next=NULL;cout 當前正在運行的進程:endl;cout 進程名稱 t優先數 t還需要時間 t已運行時間 t狀態 :endl;while(p!=NULL)c
22、outprocnamettpritneedOftimettruntimettstatenext;coutendlendl;cout 當前的就緒隊列: endl; cout 進程名稱 t 優先數 t 還需要時間 t 已運行時間 t 狀態 :endl;p=ready;/就緒隊列while(p!=NULL)12/14coutprocnamettpritneedOftimettruntimettstatenext;coutendlendl;cout 當前已經完成的進程:endl;/終 止隊列cout 進程名稱 t 優先數 t 還需要時間 t 已運行時間 t 狀態 :endl; p=finish;while(p!=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人債務轉讓協議書
- 鄭州二手房購房合同二零二五年
- 2025企業租賃合同范本格式
- 2025年證券經紀代理與營業部服務項目發展計劃
- 舞蹈教師聘用合同范文二零二五年
- 住宅水電安裝合同樣本
- 代辦營業執照合同樣本
- 倉儲分揀勞務外包合同樣本
- 公廁維修內容合同樣本
- 2025光伏電站支架工程鋼結構施工合同
- 樓梯 欄桿 欄板(一)22J403-1
- 北京市海淀區2024年七年級下學期語文期中試卷(附答案)
- 項目基坑坍塌事故專項應急預案桌面演練腳本
- 危險化學品MSDS(氮氣)
- 無創通氣常用模式與參數調節
- 清遠市城市樹木修剪技術指引(試行)
- GB∕T 8427-2019 紡織品 色牢度試驗 耐人造光色牢度:氙弧
- 退休人員實行社區管理申請書
- 廣州國際文化中心詳細勘察報告正文-171229end
- 全國同等學力工商管理大綱重點整理
- 機耕道監理實施細則完整
評論
0/150
提交評論