![山東大學(xué)操作系統(tǒng)實驗報告4進程同步實驗1_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/4027a95f-ce97-4a31-ab5c-2d39acd1258e/4027a95f-ce97-4a31-ab5c-2d39acd1258e1.gif)
![山東大學(xué)操作系統(tǒng)實驗報告4進程同步實驗1_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/4027a95f-ce97-4a31-ab5c-2d39acd1258e/4027a95f-ce97-4a31-ab5c-2d39acd1258e2.gif)
![山東大學(xué)操作系統(tǒng)實驗報告4進程同步實驗1_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/4027a95f-ce97-4a31-ab5c-2d39acd1258e/4027a95f-ce97-4a31-ab5c-2d39acd1258e3.gif)
![山東大學(xué)操作系統(tǒng)實驗報告4進程同步實驗1_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/8/4027a95f-ce97-4a31-ab5c-2d39acd1258e/4027a95f-ce97-4a31-ab5c-2d39acd1258e4.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、山東大學(xué)操作系統(tǒng)實驗報告4進程同步實驗計算機科學(xué)與技術(shù)學(xué)院實驗報告實驗題目:實驗四、進程同步實驗學(xué)號:日期:20120409 班級:計基地12 姓名:實驗?zāi)康模杭由顚Σl(fā)協(xié)作進程同步與互斥概念的理解,觀察和體驗并發(fā)進程同步與互斥操作的效果,分析與研究經(jīng)典進程同步與互斥問題的實際解決方案。了解 linux 系統(tǒng)中 ipc 進程同步工具的用法,練習(xí)并發(fā)協(xié)作進程的同步與互斥操作的編程與調(diào)試技術(shù)。實驗內(nèi)容:抽煙者問題。假設(shè)一個系統(tǒng)中有三個抽煙者進程,每個抽煙者不斷地卷煙并抽煙。抽煙者卷起并抽掉一顆煙需要有三種材料:煙草、紙和膠水。一個抽煙者有煙草,一個有紙,另一個有膠水。系統(tǒng)中還有兩個供應(yīng)者進程,它們
2、無限地供應(yīng)所有三種材料,但每次僅輪流提供三種材料中的兩種。得到缺失的兩種材料的抽煙者在卷起并抽掉一顆煙后會發(fā)信號通知供應(yīng)者,讓它繼續(xù)提供另外的兩種材料。這一過程重復(fù)進行。請用以上介紹的 ipc 同步機制編程,實現(xiàn)該問題要求的功能。硬件環(huán)境:處理器:intel? core?i3-2350m cpu 2.30ghz 4圖形:intel? sandybridge mobile x86/mmx/sse2內(nèi)存:4g操作系統(tǒng):32位磁盤:20.1 gb軟件環(huán)境:ubuntu13.04實驗步驟:(1)新建定義了producer和consumer共用的ipc函數(shù)原型和變量的ipc.h文件。(2)新建ipc.c
3、文件,編寫producer和consumer共用的ipc的具體相應(yīng)函數(shù)。(3)新建producer文件,首先定義producer的一些行為,利用系統(tǒng)調(diào)用,建立共享內(nèi)存區(qū)域,設(shè)定其長度并獲取共享內(nèi)存的首地址。然后設(shè)定生產(chǎn)者互斥與同步的信號燈,并為他們設(shè)置相應(yīng)的初值。當(dāng)有生產(chǎn)者進程在運行而其他生產(chǎn)者請求時,相應(yīng)的信號燈就會阻止他,當(dāng)共享內(nèi)存區(qū)域已滿時,信號等也會提示生產(chǎn)者不能再往共享內(nèi)存中放入內(nèi)容。(4)新建consumer文件,定義consumer的一些行為,利用系統(tǒng)調(diào)用來創(chuàng)建共享內(nèi)存區(qū)域,并設(shè)定他的長度并獲取共享內(nèi)存的首地址。然后設(shè)定消費者互斥與同步的信號燈,并為他們設(shè)置相應(yīng)的初值。當(dāng)有消費進
4、程在運行而其他消費者請求時,相應(yīng)的信號燈就會阻止它,當(dāng)共享內(nèi)存區(qū)域已空時,信號等也會提示生產(chǎn)者不能再從共享內(nèi)存中取出相應(yīng)的內(nèi)容。 運行的消費者應(yīng)該與相應(yīng)的生產(chǎn)者對應(yīng)起來,只有這樣運行結(jié)果才會正確。 結(jié)論分析與體會:實現(xiàn)方式:consumer:#include ipc.hint main(int argc,char *argv) int rate = 3;int consumerid=atoi(argv1);buff_h = 101;buff_number = 1;cget_h = 103;cget_number = 1;shm_flg = ipc_creat | 0644;buff_ptr =
5、 (char *)set_shm(buff_h,buff_number,shm_flg);cget_ptr = (int *)set_shm(cget_h,cget_number,shm_flg);prod_h = 201;pmtx_h = 202;cons_h = 301;cmtx_h = 302;sem_flg = ipc_creat | 0644;sem_val = buff_number;prod_sem = set_sem(prod_h,sem_val,sem_flg);sem_val = 0;cons_sem = set_sem(cons_h,sem_val,sem_flg);se
6、m_val = 1;cmtx_sem = set_sem(cmtx_h,sem_val,sem_flg);if(consumerid=0)*cget_ptr=0;while(1)if(buff_ptr0-a=consumerid)down(cons_sem);down(cmtx_sem);sleep(rate);if(buff_ptr0=a)printf(%d the consumer has glue.nthe consumer gets tobacco and papern,getpid();if(buff_ptr0=b)printf(%d the consumer has paper.n
7、the consumer gets tobacco and gluen,getpid(); if(buff_ptr0=c) printf(%d the consumer has tobacco.nthe consumer gets glue and papern,getpid();*cget_ptr = (*cget_ptr+1);if(*cget_ptr%2=0)buff_ptr0=d;elsebuff_ptr0=e;up(cmtx_sem);up(prod_sem);return exit_success;producer:#include ipc.hint main(int argc,c
8、har *argv)int rate=3;int producerid=atoi(argv1);buff_h=101;buff_number=1;pput_h=102;pput_number=1;shm_flg=ipc_creat|0644;buff_ptr = (char *)set_shm(buff_h,buff_number,shm_flg);pput_ptr = (int *)set_shm(pput_h,pput_number,shm_flg);prod_h = 201;pmtx_h = 202;cons_h = 301;cmtx_h = 302;sem_flg = ipc_crea
9、t|0644;sem_val = buff_number;prod_sem = set_sem(prod_h,sem_val,sem_flg);sem_val = 0;cons_sem = set_sem(cons_h,sem_val,sem_flg);sem_val = 1;pmtx_sem = set_sem(pmtx_h,sem_val,sem_flg); if(producerid=0) buff_ptr0=d;*pput_ptr=0;while(1)if(buff_ptr0-d=producerid)down(prod_sem);down(pmtx_sem);*pput_ptr =
10、(*pput_ptr+1)%3;if(*pput_ptr=0)buff_ptr0 = a;printf(%d the producer gives tobacco and papern,getpid();if(*pput_ptr=1)buff_ptr0 = b;printf(%d the producer gives tobacco and gluen,getpid();if(*pput_ptr=2)buff_ptr0 = c;printf(%d the producer gives glue and papern,getpid();sleep(rate);up(pmtx_sem);up(co
11、ns_sem);return exit_success;ipc.h:#include ipc.hint get_ipc_id(char *proc_file,h_t h) file *pf;int m,n;char linebufsz,columbufsz;if(pf = fopen(proc_file,r) = null)perror(proc file not open);exit(exit_failure);fgets(line, bufsz,pf);while(!feof(pf)m = n = 0; fgets(line, bufsz,pf); while(linem = )m+;wh
12、ile(linem != )column+ = linem+;column = 0;if(atoi(colum) != h)continue;n=0;while(linem = )m+;while(linem != )column+ = linem+;column = 0;m = atoi(colum);fclose(pf);return m;fclose(pf);return -1;int down(int sem_id) struct sembuf buf;buf.sem_op = -1;buf.sem_number = 0;buf.sem_flg = sem_undo;if(semop(
13、sem_id,&buf,1) exit(exit_failure);return exit_success;int up(int sem_id)struct sembuf buf;buf.sem_op = 1;buf.sem_number = 0;buf.sem_flg = sem_undo;if(semop(sem_id,&buf,1) exit(exit_failure); return exit_success; int set_sem(h_t sem_h,int sem_val,int sem_flg) int sem_id;sem_uns sem_arg;if(sem_id = ge
14、t_ipc_id(/proc/sysvipc/sem,sem_h) perror(semaphore create error);exit(exit_failure);sem_arg.val = sem_val;if(semctl(sem_id,0,setval,sem_arg) perror(semaphore set error);exit(exit_failure);return sem_id;char * set_shm(h_t shm_h,int shm_number,int shm_flg) int m,shm_id;char * shm_buf;if(shm_id = get_i
15、pc_id(/proc/sysvipc/shm,shm_h) exit(exit_failure);if(shm_buf = (char *)shmat(shm_id,0,0) exit(exit_failure);for(m=0; mshm_bufm = 0;if(shm_buf = (char *)shmat(shm_id,0,0) exit(exit_failure);return shm_buf;int set_msq(h_t msq_h,int msq_flg) int msq_id; if(msq_id = get_ipc_id(/proc/sysvipc/msg,msq_h) p
16、error(messagequeue set error);exit(exit_failure);return msq_id;實驗結(jié)果: 分析: 多進程的系統(tǒng)中避免不了進程間的相互關(guān)系。進程互斥是進程之間發(fā)生的一種間接性作用,一般是程序不希望的。通常的情況是兩個或兩個以上的進程需要同時訪問某個共享變量。我們一般將發(fā)生能夠問共享變量的程序段稱為臨界區(qū)。兩個進程不能同時進入臨界區(qū),否則就會導(dǎo)致數(shù)據(jù)的不一致,產(chǎn)生與時間有關(guān)的錯誤。解決互斥問題應(yīng)該滿足互斥和公平兩個原則,即任意時刻只能允許一個進程處于同一共享變量的臨界區(qū),而且不能讓任一進程無限期地等待。進程同步是進程之間直接的相互作用,是合作進程間有
17、意識的行為,典型的例子是公共汽車上司機與售票員的合作。只有當(dāng)售票員關(guān)門之后司機才能啟動車輛,只有司機停車之后售票員才能開車門。司機和售票員的行動需要一定的協(xié)調(diào)。同樣地,兩個進程之間有時也有這樣的依賴關(guān)系,因此我們也要有一定的同步機制保證它們的執(zhí)行次序。信號量機制就是其中的一種。信號燈機制即利用pv操作來對信號量進行處理。pv操作由p操作原語和v 操作原語組成(原語是不可中斷的過程),對信號量進行操作,具體定義如下: p(s):將信號量s的值減1,即s=s-1;如果s30,則該進程繼續(xù)執(zhí)行;否則該進程置為等待狀態(tài),排入等待隊列。v(s):將信號量s的值加1,即s=s+1;如果s0,則該進程繼續(xù)執(zhí)
18、行;否則釋放隊列中第一個等待信號量的進程。pv操作的意義:我們用信號量及pv操作來實現(xiàn)進程的同步和互斥。信號量的數(shù)據(jù)結(jié)構(gòu)為一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應(yīng)資源的使用情況有關(guān)。當(dāng)它的值大于0時,表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時,其絕對值表示等待使用該資源的進程個數(shù)。信號量的值僅能由pv操作來改變。一般來說,信號量s30時,s表示可用資源的數(shù) 量。執(zhí)行一次p操作意味著請求分配一個單位資源,因此s的值減1;當(dāng)s使用多于 4 個的生產(chǎn)者和消費者,以各種不同的啟動順序、不同的執(zhí)行速率檢測以上示例程序和獨立實驗程序也能滿足同步的要求。因為使用信號量滿足進程互斥的要求,任意時刻進入臨界區(qū)的進程只有一個。而進程是通過信號量喚醒阻塞進程,依然可以實現(xiàn)進程同
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同大寫金額標(biāo)準(zhǔn)寫法
- DB6103T 83-2025巨菌草栽培技術(shù)規(guī)范
- 產(chǎn)業(yè)園區(qū)綜合服務(wù)與物業(yè)管理合同
- 2025年環(huán)保技術(shù)項目研發(fā)合同
- 上海居民住房租賃合同細(xì)則
- 專利許可使用權(quán)轉(zhuǎn)讓合同
- 2025年借款合同范本:生活資金周轉(zhuǎn)專用
- 產(chǎn)權(quán)清楚的商業(yè)車位買賣合同
- 三方人才派遣合同模板
- 互聯(lián)網(wǎng)眾籌合作合同范本(修訂)
- 如愿三聲部合唱簡譜
- 高三數(shù)學(xué)開學(xué)第一課
- 水生野生動物保護與管理
- 115個低風(fēng)險組病種目錄
- 系統(tǒng)解剖學(xué)考試重點筆記
- 暖通空調(diào)基礎(chǔ)知識及識圖課件
- 防滲墻工程施工用表及填寫要求講義
- 交通信號控制系統(tǒng)檢驗批質(zhì)量驗收記錄表
- 校園信息化設(shè)備管理檢查表
- 新版抗拔樁裂縫及強度驗算計算表格(自動版)
- API SPEC 5DP-2020鉆桿規(guī)范
評論
0/150
提交評論