-
大小: 816KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-15
- 語言: 其他
- 標簽:
資源簡介
課程要求:
用高級語言編寫程序,模擬實現(xiàn)一個簡單功能的操作系統(tǒng)。
(1) 提交一批作業(yè)(>=10),按先來先服選擇一部分作業(yè)(最多5個)進入內(nèi)存
(2) 為每個作業(yè)創(chuàng)建一個進程,并分配內(nèi)存(用戶內(nèi)存:0—1024K,采用可變連續(xù)分配方式)
(3) 進程調(diào)度功能(時間片輪轉(zhuǎn))
(4) 隨機阻塞進程,并在一段時間后喚醒進程(選做)
(5) 顯示相關(guān)信息:后備作業(yè)隊列、內(nèi)存分配情況、進程信息、完成作業(yè)情況
(6) 這些功能要有機地連接起來

代碼片段和文件信息
import?java.util.linkedList;
import?java.util.Random;
public?class?ProcessMemoryController?{
????int?NUM?=?10;//進程數(shù)
????int?ACCURACY?=?1;//控制格式化后小數(shù)點后面的位數(shù)
????int?THRESHOLD?=?5;//允許并發(fā)的進程數(shù)量,小于時從后備隊列調(diào)入進程
????int?MINSIZE?=?30;//控制內(nèi)存碎片的產(chǎn)生
????PCB[]?pcb?=?new?PCB[NUM];
????linkedList?memoList?=?new?linkedList<>();
????double?pTime;?????//時間片定義
????int?run;???????//當前運行的進程,沒有則為-1
????long?lastTime;??//每次調(diào)度程序都記錄當前時間
????long?beginTime;//程序開始時間
????//進程PCB塊類
????private?class?PCB?{
????????String?name;???????//進程名
????????double?arrtime;????//到達時間
????????double?needtime;???//需要運行時間
????????double?usedtime;???//已用時間
????????int?needmemo;??????//所需內(nèi)存
????????int?address;???????//主存起始位置
????????char?state;????????//進程狀態(tài)
????}
????//內(nèi)存條目類
????private?class?MemoItem?{
????????//內(nèi)存表條目
????????int?address?=?0;
????????int?length?=?0;
????????char?state?=?‘F‘;//B代表busy繁忙或F代表free空閑
????????public?MemoItem(int?address?int?length)?{
????????????this.address?=?address;
????????????this.length?=?length;
????????}
????}
????//定義bool類型的所有進程調(diào)度結(jié)束函數(shù)
????boolean?isAllFinished()?{
????????for?(int?i?=?0;?i?????????????if?(pcb[i].state?!=?‘F‘)?return?false;
????????}
????????return?true;
????}
????//初始化各個參數(shù)
????void?init()?{
????????run?=?-1;
????????Random?r?=?new?Random();
????????for?(int?n?=?0;?n?????????????pcb[n]?=?new?PCB();
????????????pcb[n].name?=?Character.toChars(65?+?n)[0]?+?““;
????????????pcb[n].needtime?=?r.nextDouble()?*?2?+?3;//2到5秒
????????????pcb[n].needmemo?=?r.nextInt(200)?+?250;//需要的內(nèi)存為200到450
????????????if?(n?==?0)?{
????????????????pcb[n].arrtime?=?0;
????????????????pcb[0].needmemo?=?50;
????????????}?else?{
????????????????pcb[n].arrtime?=?r.nextDouble()?*?5?+?1;
????????????????pcb[n].needmemo?=?r.nextInt(300)?+?150;//需要的內(nèi)存為300到450
????????????}
????????}
????????for?(int?n?=?0;?n?????????????pcb[n].usedtime?=?0;
????????????pcb[n].address?=?0;
????????????pcb[n].state?=?‘U‘;
????????}
????????//設(shè)置起始地址為30,初始化的長度在100到150之間
????????MemoItem?first?=?new?MemoItem(30?r.nextInt(100)?+?50);
????????memoList.add(first);
????????MemoItem?prev?=?first;
????????for?(;?;?)?{
????????????int?address?=?prev.address?+?prev.length;
????????????if?(address?>=?1024)?break;
????????????int?length?=?r.nextInt(50)?+?50;
????????????MemoItem?ano?=?new?MemoItem(address?length);
????????????memoList.add(ano);
????????????prev?=?ano;
????????}
????}
????//格式化輸出展示數(shù)據(jù)
????String?d2s(double?d)?{
????????String?tmp?=?d?+?““;
????????int?index?=?tmp.indexOf(“.“);
????????return?tmp.substring(0?index?+?ACCURACY?+?1);
????}
????//先來先服務(wù)時間排序
????void?sortByArrtime()?{
????????int?i?j;
????????PCB?temp;
????????for?(i?=?0;?i?????????{
????????????for?(j?=?0;?j?????????????????if?(pcb[j?+?1].arrtime?????????????????????temp?=?pcb[j];
??????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????276??2020-07-09?20:53??source\代碼\.idea\misc.xm
?????文件????????259??2020-07-09?20:53??source\代碼\.idea\modules.xm
?????文件???????5320??2020-08-19?11:58??source\代碼\.idea\workspace.xm
?????文件????????433??2020-07-09?20:53??source\代碼\source.iml
?????文件??????10970??2020-08-19?11:58??source\代碼\src\ProcessMemoryController.java
?????文件?????972021??2020-08-19?11:55??source\文檔.docx
?????目錄??????????0??2020-08-19?11:58??source\代碼\.idea
?????目錄??????????0??2020-08-19?11:58??source\代碼\src
?????目錄??????????0??2020-08-19?11:58??source\代碼
?????目錄??????????0??2020-08-19?11:58??source
-----------?---------??----------?-----??----
???????????????989279????????????????????10
評論
共有 條評論