資源簡介
設計一個按時間片輪轉法實現進程調度的程序。
[提示]:
(1) 假定系統有五個進程,每一個進程用一個進程控制塊PCB來代表。進程控制塊的格式為:
進程名
指針
要求運行時間
已運行時間
狀態
其中,
進程名——作為進程的標識,假設五個進程的進程名分別為P1,P2,P3,P4,P5。
指針——進程按順序排成循環隊列,用指針指出下一個進程的進程控制塊的首地址,最后一個進程的指針指出第一個進程的進程控制塊首地址。
要求運行時間——假設進程需要運行的單位時間數。
已運行時間——假設進程已經運行的單位時間數,初始值為“0”。
狀態——有兩種狀態,“就緒”和“結束”,初始狀態都為“就緒”,用“R”表示。當一個進程運行結束后,它的狀態為“結束”,用“E”表示。
(2) 每次運行所設計的進程調度程序前,為每個進程任意確定它的“要求運行時間”。
(3) 把五個進程按順序排成循環隊列,用指針指出隊列連接情況。另用一標志單元記錄輪到運行的進程。例如,當前輪到P2執行,則有:
標志單元中內容為K2 ,
K1 P1 K2 P2 K3 P3 K4 P4 K5 P5
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
來模擬進程的一次運行,表示進程已經運行過一個單位的時間。
請同學注意:在實際的系統中,當一個進程被選中運行時,必須置上該進程可以運行的時間片值,以及恢復進程的現場,讓它占有處理器運行,直到出現等待事件或運行滿一個時間片。在這時省去了這些工作,僅用“已運行時間+1”來表示進程已經運行滿一個時間片。
(5) 進程運行一次后,應把該進程的進程控制塊中的指針值送到標志單元,以指示下一個輪到運行的進程。同時,應判斷該進程的要求運行時間與已運行時間,若該進程的要求運行時間1已運行時間,則表示它尚未執行結束,應待到下一輪時再運行。若該進程的要求運行時間=已運行時間,則表示它已經執行結束,應指導它的狀態修改成“結束”(E)且退出隊列。此時,應把該進程的進程控制塊中的指針值送到前面一個進程的指針位置中。
(6) 若“就緒”狀態的進程隊列不為空,則重復上面的(4)和(5)的步驟,直到所有的進程都成為“結束”狀態。
(7) 在所設計的程序中應有顯示或打印語句,能顯示或打印每次選中進程的進程名以及運行一次后進程隊列的變化。
(8) 為五個進程任意確定一組“要求運行時間”,運行進程調度程序,顯示或打印逐次被選中的進程名以及進程控制塊的動態變化過程。
模擬多資源銀行家算法
實習檢查:
(1)程序運行后,由檢查教師輸入系統初態(包括進程名和各進程已獲得資源、尚需資源及當前系統可用資源情況。注意:進程數目和資源種類由檢查教師動態確定);
(2)由檢查教師輸入此時某一進程申請各資源情況,使用銀行家算法,檢測該請求是否安全。若安全,則顯示分配后的資源分配矩陣、進程資源需求矩陣,當前可用資源情況,以及安全序列。若不安全,給出警告信息!
作業調度采用FCFS、SJF、響應比高者優先算法模擬設計作業調度程序。
[提示]:
(1)每個作業的JCB中包括作業名、提交時刻、要求運行時間;
(2)假設第一個作業提交時,系統中無正在執行的作業,即第一個作業一提交系統便調度該作業。
要求:
輸入:一批作業中各作業的作業名、提交時刻、要求運行時間;
選擇不同的作業調度程序運行;
輸出:相應作業調度算法下,各作業的等待時間、周轉時間、帶權周轉時間,這批作業的調度順序、平均周轉時間和平均帶權周轉時間。
代碼片段和文件信息
/**
?*?@(#)Work.java
?*
?*
?*?@author?
?*?@version?1.00?2008/10/26
?*/
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
public?class?Work?extends?Jframe
{
????private?Container?container;
????private?GridBagLayout?layout;
????private?GridBagConstraints?constraints;
????private?JButton?controlButton[];
????public??WorkList??workArray[];
????private?JTextArea?outputTextArea[];
????private??int??count?;
????private?JTextField?inputTextField[];
????private??int?flag[];
????public?Work()?
????{
???? super(“作業調度“);
???? container?=?getContentPane();
???? layout?=?new?GridBagLayout();
???? constraints?=?new?GridBagConstraints();
???? container.setLayout(layout);
???? controlButton?=?new?JButton[4];
????
????????workArray?=?new?WorkList[100];
???? count?=?0;
????
????
???? JLabel?markLabel[]?=?new?JLabel[5];
???? inputTextField?=?new?JTextField[3];
????????String?labelName[]?=?{“????““作業名““““提交時刻““““要求運行時間““““添加““????“};
????????
????????ButtonHander?hander?=?new?ButtonHander();
????????int?j?=?0k?=?0;
????????for(int?i?=?0;i9;i++)
????????{
???????? if(i?==?0||i?==?1||i?==?3||i?==?5||i?==?8)
???????? {
???????? markLabel[j]?=?new?JLabel(labelName[i]);
???????? markLabel[j].setFont(new?Font(“Monospaced“Font.BOLD15));
???????? addComponent(markLabel[j]0i11);
???????? j++;
???????? }
???????? else?if(i?==?7)
???????? {
???????? controlButton[0]?=?new?JButton(labelName[i]);
???????? controlButton[0].setFont(new?Font(“Monospaced“Font.BOLD15));
???????? controlButton[0].addActionListener(hander);
???????? addComponent(controlButton[0]0i11);
???????? }
???????? else
???????? {
???????? inputTextField[k]?=?new?JTextField(““10);
???????? inputTextField[k].setFont(new?Font(“Monospaced“Font.BOLD15));
???????? addComponent(inputTextField[k]0i11);
???????? k++;
???????? }
????????}
????????
????????String?buttonName[]?={“?““先來先服務““最短作業優先““響應比高者優先“};
???????int?t?=?1;
????????for(int?i?=?1;i?<=?3;?i++)
????????{
???????? controlButton[i]?=?new?JButton(buttonName[i]);
???????? controlButton[i].setFont(new?Font(“Monospaced“Font.BOLD15));
???????? controlButton[i].addActionListener(hander);
???????? addComponent(controlButton[i]2i+t11);
???????? t++;
????????}
????????outputTextArea?=?new?JTextArea[4];
????????outputTextArea[0]?=?new?JTextArea(“作業列表\n“555);
????????outputTextArea[0].setFont(new?Font(“Monospaced“Font.BOLD19));
????????addComponent(outputTextArea[0]40107);
????????outputTextArea[0].append(“作業名“?+?“?“?+?“提交時刻“?+?“?“?+?“要求運行時間“);
?????????
????????outputTextArea[1]?=?new?JTextArea(“先來先服務調度算法“555);
????????outputTextArea[1].setFont(new?Font(“Monospaced“Font.BOLD19));
????????addComponent(outputTextArea[1]120108);
????????
????????outputTextArea[2]?=?new?JTextArea(“最短作業優先調度算法“555);
????????outputTextArea[2].setFont(new?Font(“Monospaced“Font.BOLD19));
????????addComponent(outputTex
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2042??2008-10-25?21:48??銀行家算法\Pcb.class
?????文件???????2739??2008-10-25?21:47??銀行家算法\Pcb.java
?????文件???????2252??2008-10-27?16:59??銀行家算法\Test$butttonHander.class
?????文件???????3748??2008-10-27?16:59??銀行家算法\Test.class
?????文件???????4862??2008-10-27?17:13??銀行家算法\Test.java
?????文件????????153??2008-11-03?17:00??作業調度\Work$1.class
?????文件???????4792??2008-11-03?17:00??作業調度\Work$ButtonHander.class
?????文件???????3914??2008-11-03?17:00??作業調度\Work.class
?????文件??????11088??2008-10-27?12:59??作業調度\Work.java
?????文件???????1413??2008-11-03?17:00??作業調度\WorkList.class
?????文件???????1946??2008-10-27?11:22??作業調度\WorkList.java
?????文件???????1462??2008-10-13?20:02??進程調度(時間片輪轉)\Pcblist.class
?????文件???????2191??2008-10-13?18:52??進程調度(時間片輪轉)\Pcblist.java
?????文件????????174??2008-10-25?22:06??進程調度(時間片輪轉)\PerformTest$1.class
?????文件???????2462??2008-10-25?22:06??進程調度(時間片輪轉)\PerformTest$ButtonHander.class
?????文件???????2435??2008-10-25?22:06??進程調度(時間片輪轉)\PerformTest.class
?????文件???????3961??2008-10-13?20:31??進程調度(時間片輪轉)\PerformTest.java
?????目錄??????????0??2010-06-23?19:47??銀行家算法
?????目錄??????????0??2010-06-23?19:47??作業調度
?????目錄??????????0??2010-06-23?19:47??進程調度(時間片輪轉)
-----------?---------??----------?-----??----
????????????????51634????????????????????20
評論
共有 條評論