




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗一 處理器調度 一、實驗內容選擇一個調度算法,實現處理器調度。二、實驗目的在采用多道程序設計的系統中,往往有若干個進程同時處于就緒狀態。當就緒進程個數大于處理器數時,就必須依照某種策略來決定哪些進程優先占用處理器。本實習模擬在單處理器情況下的處理器調度,幫助學生加深了解處理器調度的工作。三、實驗題目設計一個按時間片輪轉法實現處理器調度的程序。提示:(1) 假定系統有五個進程,每一個進程用一個進程控制塊PCB來代表。進程控制塊的 格式為:進程名指針要求運行時間已運行時間狀態其中, 進程名作為進程的標識,假設五個進程的進程名分別為Q1,Q2,Q3,Q4,Q5。 指針進程按順序排成循環隊列,用指
2、針指出下一個進程的進程控制塊的首地址 最后一個進程的指針指出第一個進程的進程控制塊首地址。 要求運行時間假設進程需要運行的單位時間數。 已運行時間假設進程已經運行的單位時間數,初始值為“0”。 狀態有兩種狀態,“就緒”和“結束”,初始狀態都為“就緒”,用“R”表示。 當一個進程運行結束后,它的狀態為“結束”,用“E”表示。(2) 每次運行所設計的處理器調度程序前,為每個進程任意確定它的“要求運行時間”。(3) 把五個進程按順序排成循環隊列,用指針指出隊列連接情況。另用一標志單元記錄輪到運行的進程。例如,當前輪到P2執行,則有: 標志單元 K2K1Q1 K2Q2 K3Q3 K4Q4 K5Q5
3、160;K2 K3 K4 K5 K1 2 3 1 2 4 1 0 0 0 0 R R R R R PCB1 PCB2 PCB3 PCB4 PCB5 (4) 處理器調度總是選擇標志單元指示的進程運行。由于本實習是模擬處理器調度的 功能,所以,對被選中的進程并不實際的啟動運行,而是執行:已運行時間+1 來模擬進程的一次運行,表示進程已經運行過一個單位的
4、時間。 請同學注意:在實際的系統中,當一個進程被選中運行時,必須置上該進程可以運 行的時間片值,以及恢復進程的現場,讓它占有處理器運行,直到出現等待事件或 運行滿一個時間片。在這時省去了這些工作,僅用“已運行時間+1”來表示進程已 經運行滿一個時間片。(5) 進程運行一次后,應把該進程的進程控制塊中的指針值送到標志單元,以指示下一 個輪到運行的進程。同時,應判斷該進程的要求運行時間與已運行時間,若該進程 的要求運行時間¹已運行時間,則表示它尚未執行結束,應待到下一輪時再運行。若 該進程的要求運行時間=已運行時間,則表示它已經執行結束,應指導它的狀態修 改成“結束”(E)且退出隊列。此
5、時,應把該進程的進程控制塊中的指針值送到前 面一個進程的指針位置。(6) 若“就緒”狀態的進程隊列不為空,則重復上面的(4)和(5)的步驟,直到所有 的進程都成為“結束”狀態。(7) 在所設計的程序中應有顯示或打印語句,能顯示或打印每次選中進程的進程名以及 運行一次后進程隊列的變化。(8) 為五個進程任意確定一組“要求運行時間”,啟動所設計的處理器調度程序,顯示 或打印逐次被選中的進程名以及進程控制塊的動態變化過程。四. 所用數據結構及符號說明typedef struct PNode /PCBstruct PNode *next; /定義指向下一個節點的指針char name10; /定義進程
6、名,并分配空間int All_time; /定義總運行時間int Runed_Time; /定義已運行時間char state; /定義進程狀態Ready/End*Proc; /指向該PCB的指針int ProcNum; /總進程數五.流程圖六.源代碼:#include<iostream>#include<cstdlib>using namespace std;typedef struct PNode /PCBstruct PNode *next; /定義指向下一個節點的指針char name10; /定義進程名,并分配空間int All_time; /定義總運行時間i
7、nt Runed_Time; /定義已運行時間char state; /定義進程狀態Ready/End*Proc; /指向該PCB的指針int ProcNum; /總進程數/初始化就緒隊列void lnitPCB(Proc &H)cout << "請輸入總進程個數:"cin >> ProcNum; /進程總個數int Num = ProcNum;H = (Proc)malloc(sizeof(PNode); /建立頭結點H->next = NULL;Proc p = H; /定義一個指針cout << "總進程個數
8、為" << ProcNum << "個,請依次輸入相應信息"<<endl;cout << endl;while (Num-)p = p->next = (Proc)malloc(sizeof(PNode);cout << "進程名,總運行時間,已運行時間:"cin >> p->name >> p->All_time >> p->Runed_Time;p->state = 'R'p->next = N
9、ULL;p->next = H->next;/輸入運行中的進程信息void Displnfo(Proc H)Proc p = H->next;doif (p->state != 'E') /如果該進程的狀態不是End 的話cout << "進程名:" << p->name << "t總運行時間:" << p->All_time << "t已運行時間" << p->Runed_Time << &q
10、uot;t狀態:" << p->state << endl;p = p->next;else p = p->next; while (p != H->next); /整個進程鏈條始終完整,只是狀態位有差異/時間片輪轉法void SJP_Simulator(Proc &H)cout << endl << "-START-n"int flag = ProcNum; /記錄剩余進程數int round = 0; /記錄輪轉數Proc p = H->next;while (p->A
11、ll_time>p->Runed_Time)round+;cout << endl << "Round" << round << "-正在運行" << p->name << "進程" << endl;p->Runed_Time+; /更改正在運行的進程的已運行的時間Displnfo(H); /輸出此時為就緒狀態的進程 的信息if (p->All_time = p->Runed_Time)/判斷該進程是否結束p->
12、;state = 'E'flag-;cout << p->name << "進程已運行結束,進程被刪除!n"p = p->next;while (flag && p->All_time = p->Runed_Time)p = p->next; /跳過先前已結束的進程cout << endl << "-END-n"void main()Proc H;lnitPCB(H); /數據初始化Displnfo(H); /輸出此刻的進程狀態SJP_Simulator(H);/時間片輪轉法system("pause");七、測試數據與實驗結果八、結果分析與實驗體會時間片輪轉算法中,系統將所有的就緒程序按先來先服務的原則排成一個隊列,每次調度時,把CPU分配給隊首進程,并令其執行一個時間片(一個較小的時間單元)。輪轉法是一種剝奪式調度,當執行的時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025鋁合金結構安裝工程承包合同
- 二年級語文教學探索
- 虛擬環境下的地理探秘
- 習慣養成之道
- 中醫治療高血壓
- 2025合同范本 某汽車制造公司甲供零部件采購合同示例
- 中醫藥應用情況分析
- 駕照筆試題目及答案
- 2025年濕式氧化裝置項目規劃申請報告
- 2025年抖音直播項目申請報告
- 4.彩泥蔬菜(一)(課件)-一年級勞動教育“小農莊”(校本課程)
- 2023年甘肅高考數學真題及答案
- 車床作業指導書及操作規范
- 2023年八年級語文期末鞏固復習15:小說閱讀(原卷+解析)
- 《夏商和西周的貝幣》課件
- 綠地率計算方式
- 軸對稱與軸對稱圖形課件
- 新疆禮信新材料有限公司年產5千噸碳酸鋰及5萬噸新型材料項目環評報告表
- 期末考試復習方法指導《復之有道習之有效》期末考試動員期末考試心態調整主題班會
- 護理查房流程甲亢
- 大學物理實驗(上):透鏡焦距的測量
評論
0/150
提交評論