PV原語的模擬實(shí)現(xiàn)_第1頁
PV原語的模擬實(shí)現(xiàn)_第2頁
PV原語的模擬實(shí)現(xiàn)_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、P、V 原語的模擬實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康谋菊n題實(shí)習(xí)的目的是, 加深對(duì)進(jìn)程概念及進(jìn)程管理各局部內(nèi)容的 理解;熟悉進(jìn)程管理中主要數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)及進(jìn)程調(diào)度算法, 進(jìn)程控 制機(jī)構(gòu)、同步結(jié)構(gòu)、通迅機(jī)構(gòu)的實(shí)施。要求設(shè)計(jì)一個(gè)允許 n 個(gè)進(jìn)程并發(fā)運(yùn)行的進(jìn)程管理模擬糸統(tǒng)。該 糸統(tǒng)包括有簡單的進(jìn)程控制、 同步及通迅機(jī)構(gòu), 其進(jìn)程調(diào)度算法可任 意選擇。每個(gè)進(jìn)程用一個(gè) PCB 表示,其內(nèi)容可根據(jù)具體情況設(shè)置。 各進(jìn)程之間應(yīng)有一定的同步關(guān)糸。 糸統(tǒng)在運(yùn)行過程中應(yīng)能顯示或打印 各進(jìn)程的狀態(tài)及有關(guān)參數(shù)的變化情況, 以便觀察諸進(jìn)程的運(yùn)行過程及 糸統(tǒng)的管理過程。1理解信號(hào)量相關(guān)理論;2掌握記錄型信號(hào)量結(jié)構(gòu);3掌握 P、V 原語實(shí)現(xiàn)機(jī)

2、制。二、實(shí)驗(yàn)要求1輸入給定代碼;2進(jìn)行功能測(cè)試并得出正確結(jié)果。3分析 P 和 V 函數(shù)功能模塊;4在實(shí)驗(yàn)報(bào)告中畫出P和V函數(shù)流程圖;5撰寫實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)針對(duì)操作系統(tǒng)中信號(hào)量相關(guān)理論進(jìn)行實(shí)驗(yàn),要求實(shí)驗(yàn)者輸入實(shí)驗(yàn)指導(dǎo)書提供的代碼并進(jìn)行測(cè)試。 代碼主要模擬信號(hào)量的 P 操 作和 V 操作。1信號(hào)量 信號(hào)量也稱為信號(hào)鎖,主要應(yīng)用于進(jìn)程間的同步和互斥,在用 于互斥時(shí),通常作為資源鎖。信號(hào)量通常通過兩個(gè)原子操作P和V來訪問。 P 操作使信號(hào)量的值 +1, V 操作使信號(hào)量的值 -1。2記錄型信號(hào)量記錄型信號(hào)量采用了 “讓權(quán)等待 的策略,存在多個(gè)進(jìn)程等待訪 問同一臨界資源的情況, 所以記錄型信

3、號(hào)量需要一個(gè)等待鏈表來存放 等待該信號(hào)量的進(jìn)程控制塊或進(jìn)程號(hào)。 在本實(shí)驗(yàn)中, 使用記錄型信號(hào) 量。四、功能測(cè)試五#include<> #defineTRUE1#defineFALSE0 #defineMAXPRI100#defineNIL-1 structintid;charstatus;intnextwr; intpriority;pcb1;structintvalue;intfirstwr;sem2; charsavearea13,addr; inti,s1,s2,seed,exe=NIL;init()intj; for(j=0;j<1;j+) pcbj.id=j;pcb

4、j.status='r'pcbj.nextwr=NIL; printf("nprocess%dpriority",j+1);scanf("%d",&i); pcbj.priority=i; sem0.value=1;sem0.firstwr=NIL; sem1.value=1;sem1.firstwr=NIL;for(i=1;i<1;i+)for(j=0;j<3;j+) saveareaij='0' floatrandom() intm;if(seed<0)m=-seed;elsem=seed;

5、seed=(24151*seed+11839)%64416;return(m/; timeint(charaddr)floatx; x=random();if(x<&&(exe=0)return(FALSE);if(x<&&(exe=1)return(FALSE);if(x<&&(exe=2)return(FALSE); saveareaexe0=i;saveareaexe1=addr; pcbexe.status='t'printf("Timessilceinterrupt'nprocess%

6、denterintoready.n",exe+1); exe=NIL;return(TRUE);find() intj,pd=NIL,w=MAXPRI;for(j=0;j<1;j+)if(pcbj.status='r')if(pcbj.priority<w)w=pcbj.priority;pd=j;if(pd=NIL)for(j=0;j<1;j+)if(pcbj.status='t')if(pcbj.priority<w) w=pcbj.priority;pd=j;return(pd);scheduler()intpd;if(p

7、d=find()=NIL&&exe=NIL)return(NIL);if(pd!=NIL)if(exe=NIL)pcbpd.status='e'exe=pd; printf("process%disexecuting.n",exe+1); elseif(pcbpd.priority<pcbexe.priority) pcbexe.status='r'printf("process%denterintoreadyn",exe+1); pcbpd.status='e'exe=pd; pri

8、ntf("process%denterintoreadyn",exe+1);i=saveareaexe0;addr=saveareaexe1;return(exe);block(intse)intw; printf("process%disblockedn",exe+1);pcbexe.status='w' pcbexe.nextwr=NIL; if(w=semse.firstwr)=NIL)semse.firstwr=exe;elsewhile(pcbw.nextwr!=NIL)w=pcbw.nextwr;pcbw.nextwr=exe

9、;p(intse,charad)if(-semse.value>=0)return(FALSE);block(se);saveareaexe0=i;saveareaexe1=ad;exe=NIL;return(TRUE);wakeup(intse)intw;w=semse.firstwr;if(w!=NIL)semse.firstwr=pcbw.nextwr;pcbw.status='r'printf("process%diswakenupn",w+1);v(intse,charad)if(+semse.value>0)return(FALSE)

10、;wakeup(se);saveareaexe1=ad;saveareaexe0=i;return(TRUE);eexit(intn)pcbn.status='c'printf("process%discompleted!n",n+1);exe=NIL;processl()if(addr='a')gotoa1;if(addr='b')gotob1;if(addr='c')gotoc1;if(addr='d')gotod1;if(addr='e')gotoe1; if(addr=&

11、#39;f')gotof1;for(i=1;i<6;i+) printf("process1callsPonthesemaphore1n"); if(p(0,'a')break; a1:printf("process1isexecutinginthecreticalsection1n"); if(timeint('b')break;b1:printf("s1=%dn",+s1);printf("process1callsV onsemaphorelandquitcreticals

12、ection1n"); if(v(0,'c')break;c1:printf("process1callsPonesemaphorel2n"); if(p(1,'d')break;d1:printf("process1isexectingcreticalsection2n"); if(timeint('e')break;e1:printf("s2=%dn",+s2);printf("process1callsV onsemaphore2andquitcreticals

13、ection2n"); if(v(1,'f')break;f1:printf("process1cyclecount=%dn",i); if(i<6)return; eexit(0); process2() if(addr='a')gotoa2;if(addr='b')gotob2;if(addr='c')gotoc2;if(addr='d')gotod2;if(addr='e')gotoe2;if(addr='f')gotof2;for(i=1;

14、i<6;+i) printf("process2callsPonthesemaphore2n"); if(p(1,'a')break; a2:printf("process2isexecutinginthecreticalsection2n"); if(timeint('b')break;b2:printf("s2=%dn",+s2);printf("process2callsV onsemaphore2andquitcreticalsection2.n"); if(v(1,&

15、#39;c')break;c2:printf("process2callsPonesemaphore1.n"); if(p(0,'d')break;d2:printf("process2isexectingcreticalsection1.n"); if(timeint('e')break;e2:printf("s1=%dn",+s1);printf("process2callsV onsemaphore1andquitcreticalsection1.n"); if(v(0

16、,'f')break;f2:printf("process2cyclecount=%dn",i); if(i<6)return;eexit(1); process1() if(addr='a')gotoa1; if(addr='b')gotob1; if(addr='c')gotoc1; for(i=1;i<6;+i)printf("process1,callsPonsemaphore2n"); if(p(1,'a')break;/*process1isbiock

17、ed*/ a1:printf("process1isexeccutingonitscreticalsectionn");if(timeint('b')break; b1:printf("s2=%dn",+s2); printf("process1callsV onsemapore2andquitcreticalsectionn");if(v(1,'c')break;/*wakeupabiockedprocess*/ c1:printf("process1cyciencount=%dn",i); if(i<6)return;eexit(2);main()intk; printf("*processmanagement*nn"); init();printf("s1=%d,s2=%dn",s1,s2); printf("process1,process2,

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論