版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)用 實(shí)驗(yàn)一進(jìn)程管理 一、目的 進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求編寫和調(diào)試一個(gè)簡(jiǎn)單的進(jìn)程調(diào)度程序。通過本實(shí)驗(yàn) 加深理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念,并體會(huì)和了解進(jìn)程調(diào)度算法的具體實(shí)施辦法。 二、實(shí)驗(yàn)內(nèi)容及要求 1設(shè)計(jì)進(jìn)程控制塊 PCB的結(jié)構(gòu)(PCB結(jié)構(gòu)通常包括以下信息:進(jìn)程名(進(jìn)程 ID)、進(jìn)程優(yōu)先數(shù)、輪 轉(zhuǎn)時(shí)間片、進(jìn)程所占用的 CPU時(shí)間、進(jìn)程的狀態(tài)、當(dāng)前隊(duì)列指針等??筛鶕?jù)實(shí)驗(yàn)的不同,PCB結(jié)構(gòu)的內(nèi) 容可以作適當(dāng)?shù)脑鰟h)。為了便于處理,程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的輪轉(zhuǎn) 時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。 2、 系統(tǒng)資源(rirw),共有 w
2、類,每類數(shù)目為rirw。隨 機(jī)產(chǎn)生 n進(jìn)程P(id,s(j,k), t),0= i =n,0=j =mO=k=dt為總運(yùn)行時(shí)間,在運(yùn)行過程中,會(huì)隨機(jī)申請(qǐng)新的資源。 3、 每個(gè)進(jìn)程可有三個(gè)狀態(tài)(即就緒狀態(tài)W運(yùn)行狀態(tài) R、等待或阻塞狀態(tài) B),并假設(shè)初始狀態(tài)為 就緒狀態(tài)。建立進(jìn)程就緒隊(duì)列。 4、編制進(jìn)程調(diào)度算法:時(shí)間片輪轉(zhuǎn)調(diào)度算法 本程序用該算法對(duì) n個(gè)進(jìn)程進(jìn)行調(diào)度,進(jìn)程每執(zhí)行一次,CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片 數(shù)減1。在調(diào)度算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了1 個(gè)單位),這時(shí),CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1,并排列到就緒隊(duì)列的尾上。
3、 三、實(shí)驗(yàn)環(huán)境 操作系統(tǒng)環(huán)境: Win dows系統(tǒng)。 編程語言:C#o 四、實(shí)驗(yàn)思路和設(shè)計(jì) 1、程序流程圖 文檔 2、主要程序代碼 /PCB結(jié)構(gòu)體 struct pcb public intid;/ public intra;/ public intrb;/ public intrc;/ public int n time; / public int rtime; / public char state; / /public int n ext; 進(jìn)程ID 所需資源A的數(shù)量 所需資源B的數(shù)量 所需資源C的數(shù)量 所需的時(shí)間片個(gè)數(shù) 已經(jīng)運(yùn)行的時(shí)間片個(gè)數(shù) 進(jìn)程狀態(tài),W (等待)、R (運(yùn)行)、B
4、(阻塞) ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Ran dom ran dom = new Ran dom(); /ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, timenteval;/m為要模擬的進(jìn)程個(gè)數(shù),n 為初始 化進(jìn)程個(gè)數(shù) /r 為可隨機(jī)產(chǎn)生的進(jìn)程數(shù)(r=m-n) /a ,b,c分別為A, B, C三類資源的總量 /i 為進(jìn)城計(jì)數(shù),i=1n /h 為運(yùn)行的時(shí)間片次數(shù),time1
5、Inteval為時(shí)間片大小(毫 秒) /對(duì)進(jìn)程進(jìn)行初始化,建立就緒數(shù)組、阻塞數(shù)組。 public void in put()/對(duì)進(jìn)程進(jìn)行初始化,建立就緒隊(duì)列、阻塞隊(duì)列 m = in t.Parse(textBox4.Text); n = in t.Parse(textBox5.Text); a = in t.Parse(textBox6.Text); b = in t.Parse(textBox7.Text); c = in t.P arse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1I nteval = in t. Par
6、se(textBox9.Text); timer1 .In terval = time1I nteval; for (i = 1; i = 0 b = b - jin che ng.rb; c = c - jin che ng.rc; jin che ng.state = W; hready.Add(j in che ng); else jin che ng.state = B; hblock.Add(j inchen g);/ listBox1.ltems.Add(” 加入就緒隊(duì)列 加入阻塞隊(duì)列 當(dāng)前進(jìn)程狀態(tài):+ jinchen g.state); /從數(shù)組起始地址開始輸出該數(shù)組的內(nèi)容 pu
7、blic void disp(ArrayList list) ArrayList list1 = new ArrayList(); list1 = list; if (list1.Count 0) for (int j = 0; j list1.Cou nt; j+) pcb p = (pcb)list1j; listBox1.ltems.Add(” + p.id.ToStri ng() + + p.state.ToStri ng() + + p.ra.ToStri ng()+ + p.rb.ToStri ng()+ + p. ntime.ToStri ng() + + p.rtime.ToS
8、tri ng() + rn); else + p.rc.ToStri ng()+ listBox1.ltems.Add(rnt /輸出就緒數(shù)組和阻塞數(shù)組的信息 public void outputall() 文檔 該隊(duì)列中沒有進(jìn)程!rn); listBox1.Items.Add(r n= listBox1.Items.Add(* listBox1.ltems.Add(” 進(jìn)程 運(yùn)行了: ” + h.ToStri ng() + ); 資源數(shù)C資源數(shù) CPU 當(dāng)前就緒隊(duì)列的信息! ID進(jìn)程狀態(tài)A資源數(shù)B *“ :rn “); 所需時(shí)間片 已運(yùn)行時(shí)間片 ”); disp(hready); listB
9、ox1.Items.Add(* listBox1.ltems.Add(” *); 進(jìn)程 當(dāng)前就阻塞列的信息! ID進(jìn)程狀態(tài)A資源數(shù)B資源數(shù)C資源 所需時(shí)間片 已運(yùn)行時(shí)間片 ); disp(hblock); /運(yùn)行就緒數(shù)組的頭進(jìn)程,運(yùn)行一個(gè)時(shí)間片, public void runnin g() ArrayList hready1 = new ArrayList(); hready1 = hready; pcb p1 = new pcb(); p1=(pcb)hready10; p1.state=R; p1.rtime= p1.rtime + 1; h=h+1; listBox1.Items.Ad
10、d(rn listBox1.Items.Add(rn進(jìn)程 時(shí)間片rn”); listBox1.ltems.Add(p1.id + +p1.state+ p1.rb + + p1.rc + + p1. ntime + if (p1. ntime=p1.rtime) listBox1.ltems.Add(p1.id.ToStri ng()+ a = a + p1.ra; b = b + p1.rb; c = c + p1.rc; hready.RemoveAt(O); else 輪轉(zhuǎn)一個(gè)時(shí)間片,時(shí)間片輪轉(zhuǎn)調(diào)度算法 當(dāng)前正在運(yùn)行進(jìn)程 ID是:+p1.id + rn); ID進(jìn)程狀態(tài)A資源數(shù)B資源數(shù)C
11、資源數(shù) 所需時(shí)間片 已運(yùn)行 + p1.ra + + + p1.rtime); 的進(jìn)程已經(jīng)完成!rn ”); p1.state=W; hreadyl.Add(pl); hready.RemoveAt(O); /檢測(cè)當(dāng)前資源數(shù)目是否滿足阻塞數(shù)組里進(jìn)程的需求 public void testblock() ArrayList hblock1 = new ArrayList(); 文檔 實(shí)用 hblockl = hblock; for (i nt m = 0; m = 0) hready.Add(p1); a = a - p1.ra; b = b - p1.rb; c = c - p1.rc; rn)
12、; listBox1.ltems.Add(ID號(hào)為:+p1.id + 的進(jìn)程由阻塞隊(duì)列轉(zhuǎn)入就緒隊(duì)列 hblock.RemoveAt(m); m-; /檢測(cè)是否有新的進(jìn)程產(chǎn)生,隨機(jī)產(chǎn)生新進(jìn)程 public void test new() int t; if (rO)/r為隨機(jī)產(chǎn)生的進(jìn)程數(shù)目 t = ran dom.Next(9) + 1; if (t = 0 b = b - jin che ng.rb; c = c - jin che ng.rc; jin che ng.state = W; 文檔 實(shí)用 文檔 listBox1.ltems.Add(” hready.Add(j in che ng
13、); listBox1.ltems.Add(” else jin che ng.state = B; hblock.Add(ji nche ng);/ listBox1.ltems.Add(” listBox1.ltems.Add(” r = r - 1; /系統(tǒng)三類資源變化情況的顯示 進(jìn)程狀態(tài)為:+ jin che ng.state); 加入就緒隊(duì)列 資源滿足新進(jìn)程請(qǐng)求,該進(jìn)程進(jìn)入就緒隊(duì)列 加入阻塞隊(duì)列 進(jìn)程狀態(tài)為:+ jin che ng.state); 資源不滿足新進(jìn)程請(qǐng)求,該進(jìn)程進(jìn)入阻塞隊(duì)列 r n); r n); public void rescore()系統(tǒng)三類資源變化情況的顯示
14、if (a a1) textBox1.Text = a1.ToStri ng(); if (a = 0 if (b = 0 if (c = 0 runnin g(); testblock(); tes tn ew(); rescore(); else timer1.E nabled = false; textBox1.Text = a1.ToStri ng(); textBox2.Text = b1.ToStri ng(); 所有進(jìn)程都已經(jīng)運(yùn)行結(jié)束!r n); textBox3.Text = d.ToStri ng(); listBox1.ltems.Add(rn /計(jì)時(shí)器觸發(fā)時(shí)間片輪轉(zhuǎn)調(diào)度算
15、法 private void timer1_Tick(object sen der. Even tArgs e) runF cfs(); /開始模擬按鈕單擊執(zhí)行函數(shù) private void butt on 1_Click(object sen der, Even tArgs e) runmain(); butt on 1.E nabled = false; textBox1.E nabled = false; textBox2.E nabled = false; textBox3.E nabled = false; textBox4.E nabled = false; textBox5.E
16、nabled = false; textBox6.E nabled = false; textBox7.E nabled = false; textBox8.E nabled = false; textBox9.E nabled = false; /清除屏幕按鈕單擊執(zhí)行函數(shù) private void butt on 2_Click(object sen der, Even tArgs e) textBox1.Text =; textBox2.Text =; textBox3.Text =; textBox4.Text =; textBox5.Text =; textBox6.Text =; t
17、extBox7.Text =; textBox8.Text =; textBox9.Text =; listBox1.ltems.Clear(); textBox4.E nabled = true; textBox5.E nabled = true; textBox6.E nabled = true; textBox7.E nabled = true; textBox8.E nabled = true; textBox9.E nabled = true; butt on 1.E nabled = true; /運(yùn)行的主函數(shù) public void runmain() 文檔 in put();
18、imerl.E nabled = true 3、運(yùn)行界面和運(yùn)行結(jié)果 界面中,可以任意設(shè)定需要模擬的進(jìn)程總數(shù)(如5),初始化進(jìn)程個(gè)數(shù)(如 3),還有A、B C三類 資源的總數(shù)(如10、10、10)。為了方便顯示,還可以設(shè)定時(shí)間片的長(zhǎng)度(如 500毫秒)。除此之外,在 運(yùn)行過程中,所有的資源都是隨機(jī)生成的,并且其中新進(jìn)程的產(chǎn)生也是隨機(jī)的,但是產(chǎn)生的進(jìn)程總數(shù)不 會(huì)多于開始設(shè)定的模擬的進(jìn)程總數(shù),以防止不斷產(chǎn)生新進(jìn)程,程序不斷運(yùn)行。在顯示窗口的上方,還會(huì) 實(shí)時(shí)顯示資源的變化情況,方便對(duì)運(yùn)行的觀察。當(dāng)運(yùn)行結(jié)束后,可以通過工具欄中的顯示選項(xiàng)中的保存 結(jié)果按鈕,將結(jié)果保存成 txt文件格式,方便運(yùn)行后的結(jié)果分析。 五、心得體會(huì) 本次實(shí)驗(yàn),我的任務(wù)是設(shè)計(jì)一個(gè)允許n個(gè)進(jìn)程并發(fā)運(yùn)行的進(jìn)程管理模擬系統(tǒng)。該系統(tǒng)包括有簡(jiǎn)單的 進(jìn)程控制、同步與通訊機(jī)構(gòu),系統(tǒng)在運(yùn)行過程中能顯示各進(jìn)程的狀態(tài)及有關(guān)參數(shù)的變化情況,從而觀察 諸進(jìn)程的運(yùn)行過程及系統(tǒng)的管理過程,我是用C#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電商平臺(tái)廣告投放居間代理協(xié)議2篇
- 2025年度老舊小區(qū)消防設(shè)施改造工程委托施工協(xié)議3篇
- 2024游艇購置合同:名船交易協(xié)議9篇
- 二零二五年度荒山荒地生態(tài)補(bǔ)償與扶貧項(xiàng)目合作協(xié)議樣本3篇
- 二零二五年度醫(yī)療器械組裝承包協(xié)議3篇
- 二零二五年酒店客房協(xié)議價(jià)長(zhǎng)期合作框架合同3篇
- 2025年度食用菌菌棒種植技術(shù)培訓(xùn)與推廣合同3篇
- 二零二五版供水井施工與供水設(shè)施運(yùn)行監(jiān)測(cè)合同3篇
- 2024版代持產(chǎn)權(quán)協(xié)議書3篇
- 2025年產(chǎn)業(yè)園區(qū)新型建材場(chǎng)地租賃與綠色建筑合作合同3篇
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 2025年國新國際投資有限公司招聘筆試參考題庫含答案解析
- 制造車間用洗地機(jī)安全操作規(guī)程
- 2025河南省建筑安全員-A證考試題庫及答案
- 油氣田智能優(yōu)化設(shè)計(jì)-洞察分析
- 陜西2020-2024年中考英語五年真題匯編學(xué)生版-專題09 閱讀七選五
- 磚混結(jié)構(gòu)基礎(chǔ)加固技術(shù)方案
- 助產(chǎn)專業(yè)的職業(yè)生涯規(guī)劃
- 新《國有企業(yè)管理人員處分條例》知識(shí)競(jìng)賽考試題庫500題(含答案)
- 骨質(zhì)疏松護(hù)理
- MOOC 有機(jī)化學(xué)(上)-北京師范大學(xué) 中國大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論