版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗三 處理器調(diào)度【實驗?zāi)康摹吭诓捎枚嗟莱绦蛟O(shè)計的系統(tǒng)中,往往有若干個進(jìn)程同時處于就緒狀態(tài)。當(dāng)就緒進(jìn)程個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進(jìn)程優(yōu)先占用處理器。本實驗?zāi)M在單處理器情況下的處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的工作?!緦嶒瀮?nèi)容】選擇一個調(diào)度算法,實現(xiàn)處理器調(diào)度。【實驗指導(dǎo)】本實驗有兩個題,學(xué)生可選擇其中的一題做實驗。第一題:設(shè)計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度的程序。提示:(1) 假定系統(tǒng)有五個進(jìn)程,每一個進(jìn)程用一個進(jìn)程控制塊PCB來代表,進(jìn)程控制塊的格式為:進(jìn)程名指針要求運行時間優(yōu)先數(shù)狀態(tài)其中,進(jìn)程名作為進(jìn)程的標(biāo)識,假設(shè)五個進(jìn)程的進(jìn)程名分別為P1,P2,P3,P
2、4,P5。指針按優(yōu)先數(shù)的大小把五個進(jìn)程連成隊列,用指針指出下一個進(jìn)程的進(jìn)程控制塊的首地址,最后一個進(jìn)程中的指針為“0”。要求運行時間假設(shè)進(jìn)程需要運行的單位時間數(shù)。優(yōu)先數(shù)賦予進(jìn)程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進(jìn)程先執(zhí)行。狀態(tài)可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個進(jìn)程的初始狀態(tài)都為“就緒”,用“R”表示,當(dāng)一個進(jìn)程運行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。(2) 在每次運行你所設(shè)計的處理器調(diào)度程序之前,為每個進(jìn)程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”。(3) 為了調(diào)度方便,把五個進(jìn)程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進(jìn)程,用指針指出隊列的連接情況。例: 隊首標(biāo)志
3、 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選隊首進(jìn)程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進(jìn)程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進(jìn)程并不實際的啟動運行,而是執(zhí)行:優(yōu)先數(shù)-1要求運行時間-1來模擬進(jìn)程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當(dāng)一個進(jìn)程被選中運行時,必須恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行結(jié)束。在這里省去了這些工作。(5) 進(jìn)程運行一次后,若要求運行時間¹0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,
4、且置隊首標(biāo)志);若要求運行時間=0,則把它的狀態(tài)修改成“結(jié)束”(E),且退出隊列。(6) 若“就緒”狀態(tài)的進(jìn)程隊列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進(jìn)程都成為“結(jié)束”狀態(tài)。(7) 在所設(shè)計的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運行一次后進(jìn)程隊列的變化。(8) 為五個進(jìn)程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動態(tài)變化過程。第二題:設(shè)計一個按時間片輪轉(zhuǎn)法實現(xiàn)處理器調(diào)度的程序。提示:(1) 假定系統(tǒng)有五個進(jìn)程,每一個進(jìn)程用一個進(jìn)程控制塊PCB來代表。進(jìn)程控制塊的格式為:進(jìn)程名指針
5、要求運行時間已運行時間狀態(tài)其中,進(jìn)程名作為進(jìn)程的標(biāo)識,假設(shè)五個進(jìn)程的進(jìn)程名分別為Q1,Q2,Q3,Q4,Q5。指針進(jìn)程按順序排成循環(huán)隊列,用指針指出下一個進(jìn)程的進(jìn)程控制塊的首地址,最后一個進(jìn)程的指針指出第一個進(jìn)程的進(jìn)程控制塊首地址。要求運行時間假設(shè)進(jìn)程需要運行的單位時間數(shù)。已運行時間假設(shè)進(jìn)程已經(jīng)運行的單位時間數(shù),初始值為“0”。狀態(tài)有兩種狀態(tài),“就緒”和“結(jié)束”,初始狀態(tài)都為“就緒”,用“R”表示。當(dāng)一個進(jìn)程運行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。(2) 每次運行所設(shè)計的處理器調(diào)度程序前,為每個進(jìn)程任意確定它的“要求運行時間”。(3) 把五個進(jìn)程按順序排成循環(huán)隊列,用指針指出隊列連接情況
6、。另用一標(biāo)志單元記錄輪到運行的進(jìn)程。例如,當(dāng)前輪到P2執(zhí)行,則有:標(biāo)志單元 K2 K1Q1 K2Q2 K3Q3 K4Q4 K5Q5K2K3K4K5K12312410000RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選擇標(biāo)志單元指示的進(jìn)程運行。由于本實驗是模擬處理器調(diào)度的功能,所以,對被選中的進(jìn)程并不實際的啟動運行,而是執(zhí)行:已運行時間+1來模擬進(jìn)程的一次運行,表示進(jìn)程已經(jīng)運行過一個單位的時間。請同學(xué)注意:在實際的系統(tǒng)中,當(dāng)一個進(jìn)程被選中運行時,必須置上該進(jìn)程可以運行的時間片值,以及恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行滿一個時間片。在這時省去了這
7、些工作,僅用“已運行時間+1”來表示進(jìn)程已經(jīng)運行滿一個時間片。(5) 進(jìn)程運行一次后,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,以指示下一個輪到運行的進(jìn)程。同時,應(yīng)判斷該進(jìn)程的要求運行時間與已運行時間,若該進(jìn)程的要求運行時間¹已運行時間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時再運行。若該進(jìn)程的要求運行時間=已運行時間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)指導(dǎo)它的狀態(tài)修改成“結(jié)束”(E)且退出隊列。此時,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到前面一個進(jìn)程的指針位置。(6) 若“就緒”狀態(tài)的進(jìn)程隊列不為空,則重復(fù)上面的(4)和(5)的步驟,直到所有的進(jìn)程都成為“結(jié)束”狀態(tài)。(7) 在所設(shè)計的程序中應(yīng)
8、有顯示或打印語句,能顯示或打印每次選中進(jìn)程的進(jìn)程名以及運行一次后進(jìn)程隊列的變化。(8) 為五個進(jìn)程任意確定一組“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中的進(jìn)程名以及進(jìn)程控制塊的動態(tài)變化過程。長春大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院實驗報告日期_ 地點_ 指導(dǎo)教師_ 成績 實驗三 處理器調(diào)度一、寫出程序代碼并分析運行結(jié)果#include <stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct DATAchar pname10;/進(jìn)程名float time;/要求運行時間數(shù)int ove;
9、/優(yōu)先級char flag;/狀態(tài)DATA; typedef struct pcbDATA data;struct pcb *next;pcb;int flag=5;/假設(shè)有五個進(jìn)程pcb* init(pcb *p)/初始化p=(pcb *)malloc(sizeof(DATA);p->next = NULL;return p;void show(pcb *p)/輸出顯示if(!flag)printf("n沒有正在運行的進(jìn)程,或進(jìn)程已經(jīng)全部執(zhí)行完畢。n");elseprintf("n名稱");printf("");printf(
10、"執(zhí)行時間");printf("" );printf("優(yōu)先數(shù)");printf("" );printf("狀態(tài)n");while(p->next)p=p->next ;printf("%s",p->data .pname );printf(" ");printf("%1.0f",p->data .time );printf(" " );printf("%d",p->
11、data .ove );printf(" " );printf("%cnn",p->data .flag );void del(pcb *h)/進(jìn)程執(zhí)行完成后的刪除pcb *p;p=h;p=p->next;if(p->data .flag ='E')printf("有一個進(jìn)程執(zhí)行完成:n");printf("進(jìn)程的名稱為:%sn",p->data .pname);p=p->next;h->next =p;flag-;void in(pcb *h)/從鍵盤中輸入數(shù)據(jù)
12、int i=0;pcb *pc,*l;pc=h;printf("請依次輸入五個進(jìn)程的名稱、執(zhí)行時間、優(yōu)先數(shù):(輸入時進(jìn)程與進(jìn)程之間用回車來隔開?。﹏");for(i;i<flag;i+)l=init(l);scanf("%s%f%d",&l->data .pname ,&l->data .time ,&l->data .ove );rewind(stdin);if(!l->data .time )l->data .flag ='E'elsel->data .flag=
13、9;R'l->next =NULL;pc->next =l;pc=pc->next ;void soar(pcb *p)/對于這五個進(jìn)程按其優(yōu)先級進(jìn)行排序pcb *q;pcb *h;int i=0;int j;q=init(q);h=p->next ;for(i;i<flag;i+)for(j=0;j<(flag-1);j+)if(h->data .time )if(h->data .ove<h->next ->data .ove )q->data =h->data ;h->data =h->ne
14、xt->data ;h->next->data =q->data ;h=h->next ;elseprintf("有一個進(jìn)程執(zhí)行完成:n");printf("進(jìn)程的名稱為:%sn",h->data .pname);flag-;h=p->next ;if(flag)printf("n目前優(yōu)先級最高的進(jìn)程的名稱是:%sn所以執(zhí)行此進(jìn)程!",p->next ->data .pname );void run(pcb *h)/執(zhí)行程序h=h->next;h->data .time
15、 -;h->data .ove -;if(!h->data .time )h->data .flag ='E'void main()pcb *p;char c;p=init(p);in(p);soar(p);show(p);del(p);while(flag)run(p);del(p);soar(p);show(p);c=getch();rewind(stdin);程序運行時的初值a 1 2b 3 4 c 5 6d 3 1e 5 5運行結(jié)果: 進(jìn)程控制塊的初始狀態(tài)。 RRRRR 按同一順序訪問對象。 如果所有并發(fā)事務(wù)按同一順
16、序訪問對象,則發(fā)生死鎖的可能性會降低。例如,如果兩個并發(fā)事務(wù)獲得 Supplier 表上的鎖,然后獲得 Part 表上的鎖,則在其中一個事務(wù)完成之前,另一個事務(wù)被阻塞在 Supplier 表上。第一個事務(wù)提交或回滾后,第二個事務(wù)繼續(xù)進(jìn)行。不發(fā)生死鎖。將存儲過程用于所有的數(shù)據(jù)修改可以標(biāo)準(zhǔn)化訪問對象的順序 避免事務(wù)中的用戶交互。 避免編寫包含用戶交互的事務(wù),因為運行沒有用戶交互的批處理的速度要遠(yuǎn)遠(yuǎn)快于用戶手動響應(yīng)
17、查詢的速度,例如答復(fù)應(yīng)用程序請求參數(shù)的提示。例如,如果事務(wù)正在等待用戶輸入,而用戶去吃午餐了或者甚至回家過周末了,則用戶將此事務(wù)掛起使之不能完成。這樣將降低系統(tǒng)的吞吐量,因為事務(wù)持有的任何鎖只有在事務(wù)提交或回滾時才會釋放。即使不出現(xiàn)死鎖的情況,訪問同一資源的其它事務(wù)也會被阻塞,等待該事務(wù)完成。 保持事務(wù)簡短并在一個批處理中。 在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個需要長時間運行的事務(wù)時通常發(fā)生死鎖。事務(wù)運行時間越長,其持有排它鎖或更新鎖的時間也就越長,從而堵塞了其它活動并可能導(dǎo)致死鎖。 &
18、#160;保持事務(wù)在一個批處理中,可以最小化事務(wù)的網(wǎng)絡(luò)通信往返量,減少完成事務(wù)可能的延遲并釋放鎖 使用低隔離級別。 確定事務(wù)是否能在更低的隔離級別上運行。執(zhí)行提交讀允許事務(wù)讀取另一個事務(wù)已讀?。ㄎ葱薷模┑臄?shù)據(jù),而不必等待第一個事務(wù)完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時間,從而降低了鎖定爭奪 使用綁定連接。 使用綁定連接使同一應(yīng)用程序所打開的兩個或多個連接可
19、以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會相互阻塞 選中運行的進(jìn)程名以及選中進(jìn)程運行后的各進(jìn)程控制塊狀態(tài)。EEEEE二、思考題1、試比較FCFS和SPF兩種進(jìn)程調(diào)度算法。答:FCFS每次調(diào)度從進(jìn)程隊列中選擇最先進(jìn)入該隊列的進(jìn)程,為之分配處理機(jī),運行。 SPF是從隊列中選擇運行時間最短的作業(yè),優(yōu)先調(diào)入內(nèi)存運行。但是SPF必須預(yù)知 作業(yè)的運行時間,一般會偏長估計,而且對長作業(yè)不利,容易出現(xiàn)饑餓現(xiàn)象。該調(diào) 度算法完全未考慮作業(yè)的緊迫程度,故不能保證緊迫性作業(yè)得到及時處理2、 請詳細(xì)說明可通過哪些途徑預(yù)防死鎖。 答: 死鎖發(fā)生的條件: 1、資源不能共享,需要只
20、能由一個進(jìn)程或者線程使用 2、請求且保持,已經(jīng)鎖定的資源自給保持著不釋放 3、不剝奪,自給申請到的資源不能被別人剝奪 4、循環(huán)等待 想預(yù)防死鎖,把上面四個條件破壞一個就可以了。 可以利用銀行家算法。 按同一順序訪問對象。 如果所有并發(fā)事務(wù)按同一順序訪問對象,則發(fā)生死鎖的可能性會降低。例如,如果兩個并發(fā)事務(wù)獲得 Supplier 表上的鎖,然后獲得 Part 表上的鎖,則在其中一個事務(wù)完成之前,另一個事務(wù)被阻塞在 Supplier 表上。第一個事務(wù)提交或回滾后,第二個事務(wù)繼續(xù)進(jìn)行。不發(fā)生死鎖。將存儲過程用于所有的數(shù)據(jù)修改可以標(biāo)準(zhǔn)化訪問對象的順序 避免事務(wù)中的用戶交互。 避免編寫包含用戶交互
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度滑雪場設(shè)施裝修安全防護(hù)合同3篇
- 2025年度早餐店加盟連鎖承包合同范本4篇
- 2025年度智能車間承包環(huán)保技術(shù)改造協(xié)議4篇
- 2024-2028年中國無線電接收機(jī)行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略規(guī)劃研究報告
- 中國太陽能空調(diào)項目可行性研究報告建議書
- 2025年度個人二手房定金買賣合同書標(biāo)準(zhǔn)化版2篇
- 2025年度個人借款聯(lián)保合同(附財產(chǎn)抵押)4篇
- 2025年山東國新抱犢食品有限公司招聘筆試參考題庫含答案解析
- 二零二五版苗木種植基地水資源利用與節(jié)水技術(shù)合同4篇
- 2025年寧夏昊陽資產(chǎn)管理有限公司招聘筆試參考題庫含答案解析
- 公司組織架構(gòu)圖(可編輯模版)
- 1汽輪機(jī)跳閘事故演練
- 陜西省銅川市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 禮品(禮金)上交登記臺賬
- 普通高中英語課程標(biāo)準(zhǔn)詞匯表
- 北師大版七年級數(shù)學(xué)上冊教案(全冊完整版)教學(xué)設(shè)計含教學(xué)反思
- 2023高中物理步步高大一輪 第五章 第1講 萬有引力定律及應(yīng)用
- 青少年軟件編程(Scratch)練習(xí)題及答案
- 浙江省公務(wù)員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學(xué)
- 全統(tǒng)定額工程量計算規(guī)則1994
評論
0/150
提交評論