![操作系統(tǒng)實驗三_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/6e7bcea8-031a-45c1-bc63-72f47c352ba1/6e7bcea8-031a-45c1-bc63-72f47c352ba11.gif)
![操作系統(tǒng)實驗三_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/6e7bcea8-031a-45c1-bc63-72f47c352ba1/6e7bcea8-031a-45c1-bc63-72f47c352ba12.gif)
![操作系統(tǒng)實驗三_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/6e7bcea8-031a-45c1-bc63-72f47c352ba1/6e7bcea8-031a-45c1-bc63-72f47c352ba13.gif)
![操作系統(tǒng)實驗三_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/6e7bcea8-031a-45c1-bc63-72f47c352ba1/6e7bcea8-031a-45c1-bc63-72f47c352ba14.gif)
![操作系統(tǒng)實驗三_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/6e7bcea8-031a-45c1-bc63-72f47c352ba1/6e7bcea8-031a-45c1-bc63-72f47c352ba15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗三 P、V原語的模擬實現(xiàn)一、實驗目的1) 理解信號量相關(guān)理論;2) 掌握記錄型信號量結(jié)構(gòu);3) 掌握 P、V 原語實現(xiàn)機制。二、實驗內(nèi)容本實驗針對操作系統(tǒng)中信號量相關(guān)理論進行實驗,要求實驗者輸入實驗指導書提供的代碼并進行測試。代碼主要模擬信號量的 P 操作(down)和 V 操作(up)。1) 信號量信號量也稱為信號鎖,主要應用于進程間的同步和互斥,在用于互斥時,通常作為資源鎖。信號量通常通過兩個原子操作 dwon(P)和 up(V)來訪問。dwon 操作使信號量的值+1,up 操作使信號量的值-1。2) 記錄型信號量記錄型信號量采用了“讓權(quán)等待”的策略,存在多個進程等待訪問同一臨界資源的
2、情況,所以記錄型信號量需要一個等待鏈表來存放等待該信號量的進程控制塊或進程號。在本實驗中,使用記錄型信號量。三、實驗要求1) 輸入給定代碼;2) 進行功能測試并得出正確結(jié)果。3) 分析 dwon 和 up 函數(shù)功能模塊;4) 在實驗報告中畫出 dwon 和 up 函數(shù)流程圖;5) 撰寫實驗報告。四、程序清單#include "basic.h" semphore sem5; /deinfe 5 semphorespnode * pr20; /define 0-19 total 20 process/down operation void down(char * sname,i
3、nt pid) int fflag,pflag; pnode *p,*p1; semphore *s; fflag=0; pflag=0; for(int i=0;i<5;i+) if(!strcmp(,sname)/find semaphore by name根據(jù)名字找到信號量 s=; /將找到的信號量存入s fflag=1; /設置信號量標志位fflag為1,表示找到了信號量 break; for(i=0;i<20;i+) /find pcb by pid根據(jù)pid找到pcb進程 if(pri->node->pid = pid)
4、p1 = pri; /存入p1 pflag=1; /設置進程標志位pflag為1,表示找到了pcb break; if(!fflag) /semaphore is not exist如果找不到資源信號量 printf("the semphore '%s' is not exist!n",sname); /輸出沒有該信號量 return; if(!pflag) /pid is not exist如果找不到pcb進程 printf("the process '%d' is not exist!n",pid); /輸出沒有該pc
5、b進程 return; s->count-; /semaphore! s value -1被該pcb進程占用的資源信號量減1 if(s->count>=0) /this pcb get the semaphore如果當前資源信號量沒有被用完 s->curpid = p1->node->pid; /當前pcb進程就占用該信號量 else if(s->wlist) /the link is not NULL, add the pcb to the last如果等待鏈表不為空,就去/找等待鏈表的尾部插入;若當前pcb進程所占用的信號量沒有了,就將該進程放到該
6、進程/鏈表的尾部去等待 for(p=s->wlist;p->next;p=p->next); p->next=p1; else /this pcb is the first pcb be added to the down list若等待鏈表為空,則該pcb進/程是一個等待的pcb進程,直接插入 s->wlist=p1; /up operation void up(char *sname) /釋放資源信號量 int fflag=0; for(int i=0;i<5;i+) if(!strcmp(,sname) /find the semap
7、hore by name由名字找到要釋放的資源信號量 fflag=1; /將資源信號量標志設為1 break; if(fflag) /find it 如果找到 semi.count+; /該資源信號量加1表示釋放 if(semi.wlist) /there are processes in the down list若等待鏈表中有請求該資源信號/量的pcb進程 semi.curpid = semi.wlist->node->pid;/信號量被在等待鏈表中的第一個pcb/進程占用semi.wlist = semi.wlist->next; /等待鏈表指向下一個等待的pcb進程
8、else printf("the semphore '%s' is not exist!n",sname);/若找不到該信號量就輸出 /show semphore infomation void showdetail() int i; pnode *p; printf("n"); for(i=0;i<5;i+) if(semi.count<=0) printf("%s (current_process %d): ",,semi.curpid); p=semi.wlist; while(p)
9、 printf("%5d",p->node->pid); p=p->next; else printf("%s : ",); printf("n"); /*/ void init() /init semaphore strcat(,"s0"); strcat(,"s1"); strcat(,"s2"); strcat(,"s3"); strcat(s
10、,"s4"); for(int i=0;i<5;i+) semi.wlist=NULL; semi.count=1; /init process for(i=0;i<20;i+) pri = new pnode; pri->node=new pcb; pri->node->pid=i; pri->brother=NULL; pri->next=NULL; pri->sub=NULL; void main() short cflag,pflag; char cmdstr32; char *s,*s1,*s2; i
11、niterror(); init(); for(;) cflag=0; pflag=0; printf("cmd:"); scanf("%s",cmdstr); if(!strcmp(cmdstr,"exit") /exit the program break; if(!strcmp(cmdstr,"showdetail") cflag = 1; pflag = 1; showdetail(); else s = strstr(cmdstr,"down"); /create process if
12、(s) cflag=1; /getparameter s1 = substr(s,instr(s,'(')+1,instr(s,',')-1); s2 = substr(s,instr(s,',')+1,instr(s,')')-1); if(s1 && s2) down(s1,atoi(s2); pflag=1; else s=strstr(cmdstr,"up");/delete process if(s) cflag=1; s1 = substr(s,instr(s,'('
13、)+1,instr(s,')')-1); if(s1) up(s1); pflag=1; if(!cflag) geterror(0); else if(!pflag) geterror(1); /*/ 五、測試要求1) 至少進行 10 次以上的 wait 和 signal 操作;2) 要求 wait 操作出現(xiàn)進程等待隊列;3) 對有等待隊列的信號量進行 signal 操作。六、實驗指導實驗中提供了 5 個信號量(s0-s4)和 20 個進程(pid 0-19)。在程序運行過程中可以鍵入 down up 命令和 showdetail 命令顯示每個信號量的狀態(tài)。具體輸入解釋如下:
14、 1) dwon 獲取信號量操作(P 操作)。 參數(shù): 1 sname 2 pid 。 示例:down(s1,2) 。進程號為 2 的進程申請名字為 s1 的信號量。 2) up 釋放信號量操作(V 操作)。 參數(shù) 1 sname。 示例:up(s1)。釋放信號量名字為 s1 的信號量。 3) showdetail 顯示各信號量狀態(tài)及其等待隊列。 4) exit退出命令行。七、實驗過程這是為每個進程申請的信號量的狀態(tài)0號信號量擁有進程0,1,2,3;1號信號量擁有進程4,5,6,7;2號信號量擁有進程8,9,10,11;3號信號量擁有進程12,13,14,15;4號信號量擁有進程16,17,1
15、8,19.這是刪除s0信號量中的0號進程,此時進程1占用該信號量這是刪除s1信號量中的4號進程,此時進程5占用該信號量這是刪除s2信號量中的8號進程,此時9號進程占用該信號量這是刪除s3信號量的兩個進程這是為0進程申請了s0號信號量,然后又釋放了s0信號量中的3號進程這是先釋放0號,4號進程,然后為0號進程申請s0號信號量這是先釋放進程號為0和1的進程,然后再為1號進程申請s1信號量這是為進程號為1,2,3,4的進程先申請s0信號量,然后再釋放進程,直至全部釋放完畢這是先為進程號為1,2,3,4的進程申請信號量,然后釋放1進程,再為1號進程申請信號量先釋放資源成功了,然后為0號進程申請信號量,
16、再釋放0號進程八、實驗思考1) 讀懂down和up操函數(shù),并畫出這兩個函數(shù)的流程。 答:函數(shù)分析如上述代碼,并加以注釋2)如何修改 down 操作,使之能一次申請多個信號量? 答:假設可一次獲取三個信號量 down(s1,s2,s3,1) s1 = substr(s,instr(s,()+1,instr(s,)-1); s1s = substr(s,instr(s,)+1,instr(s,); s2 = substr(s1s,0,instr(s1s,)-1); s2s = substr(s1s,instr(s1s,)+1,instr(s1s,); s3 = substr(s2s,0,instr(s2s,)-1); s3s = substr(s2s,instr(s2s,)+1,instr(s2s,); s4 = substr(s3s,0,instr(s3s,)-1); if(s1 && s2 && s3 && s4) down(s1,a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際藝術(shù)品收藏居間協(xié)議
- 家電公司辦公室翻新協(xié)議
- 養(yǎng)殖技術(shù)升級飼料配送協(xié)議
- 客運站裝修改造協(xié)議
- 塑料原料運輸服務合同
- 中英文采購合同范例
- 買賣合作合同范例范例
- 中介代銷房產(chǎn)合同范本
- 加盟經(jīng)銷合同范例
- 石首假山水池施工方案
- 2025年牛津譯林版英語七年級下冊全冊單元重點知識點與語法匯編
- 《小學作文指導》課件
- 小學六年級數(shù)學方程應用題100道及答案解析
- 2025新譯林版英語七年級下單詞表
- 海洋工程設備保溫保冷方案
- 文藝演出排練指導服務合同
- 醫(yī)院消防安全培訓課件(完美版)
- 人教版(2024新版)一年級上冊數(shù)學第一單元《數(shù)學游戲》單元整體教學設計
- 魏寧海超買超賣指標公式
- 防洪防汛安全知識教育課件
- (正式版)FZ∕T 80014-2024 潔凈室服裝 通 用技術(shù)規(guī)范
評論
0/150
提交評論