《操作系統(tǒng)》課程實驗報告-線程與進(jìn)程同步與互斥_第1頁
《操作系統(tǒng)》課程實驗報告-線程與進(jìn)程同步與互斥_第2頁
《操作系統(tǒng)》課程實驗報告-線程與進(jìn)程同步與互斥_第3頁
《操作系統(tǒng)》課程實驗報告-線程與進(jìn)程同步與互斥_第4頁
《操作系統(tǒng)》課程實驗報告-線程與進(jìn)程同步與互斥_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《操作系統(tǒng)》課程實驗報告實驗題目:線程與進(jìn)程同步與互斥實驗概述【實驗?zāi)康募耙蟆?。生產(chǎn)者消費者問題(信號量)參考教材中的生產(chǎn)者消費者算法,創(chuàng)建5個進(jìn)程,其中兩個進(jìn)程為生產(chǎn)者進(jìn)程,3個進(jìn)程為消費者進(jìn)程。一個生產(chǎn)者進(jìn)程試圖不斷地在一個緩沖中寫入大寫字母,另一個生產(chǎn)者進(jìn)程試圖不斷地在緩沖中寫入小寫字母。3個消費者不斷地從緩沖中讀取一個字符并輸出。為了使得程序的輸出易于看到結(jié)果,仿照的實例程序,分別在生產(chǎn)者和消費者進(jìn)程的合適的位置加入一些隨機(jī)睡眠時間??蛇x的實驗:在上面實驗的基礎(chǔ)上實現(xiàn)部分消費者有選擇地消費某些產(chǎn)品。例如一個消費者只消費小寫字符,一個消費者只消費大寫字母,而另一個消費者則無選擇地消費任何產(chǎn)品。消費者要消費的產(chǎn)品沒有時,消費者進(jìn)程被阻塞。注意緩沖的管理。2。用線程實現(xiàn)睡覺的理發(fā)師問題,(同步互斥方式采用信號量或mutex方式均可)理發(fā)師問題的描述:一個理發(fā)店接待室有n張椅子,工作室有1張椅子;沒有顧客時,理發(fā)師睡覺;第一個顧客來到時,必須將理發(fā)師喚醒;顧客來時如果還有空座的話,他就坐在一個座位上等待;如果顧客來時沒有空座位了,他就離開,不理發(fā)了;當(dāng)理發(fā)師處理完所有顧客,而又沒有新顧客來時,他又開始睡覺。3。讀者寫者問題教材中對讀者寫者問題算法均有描述,但這個算法在不斷地有讀者流的情況下,寫者會被阻塞。編寫一個寫者優(yōu)先解決讀者寫者問題的程序,其中讀者和寫者均是多個進(jìn)程,用信號量作為同步互斥機(jī)制。【實驗環(huán)境】操作系統(tǒng):Linuxmint編譯器:gcc實驗內(nèi)容【實驗過程】實驗步驟:生產(chǎn)者消費者問題(信號量)1.1實驗原理:通過一個有界緩沖區(qū)把生產(chǎn)者和消費者聯(lián)系起來。假定生產(chǎn)者和消費者的優(yōu)先級是相同的,只要緩沖區(qū)未滿,生產(chǎn)者就可以生產(chǎn)產(chǎn)品并將產(chǎn)品送入緩沖區(qū)。類似地,只要緩沖區(qū)未空,消費者就可以從緩沖區(qū)中取走產(chǎn)品。應(yīng)該禁止生產(chǎn)者向滿的緩沖區(qū)送入產(chǎn)品,同時也應(yīng)該禁止消費者從空的緩沖區(qū)中取出產(chǎn)品,這一機(jī)制有生產(chǎn)者線程和消費者進(jìn)程程之間的互斥關(guān)系來實現(xiàn)。與計算打印兩進(jìn)程同步關(guān)系相同,生產(chǎn)者和消費者兩進(jìn)程P和C之間應(yīng)滿足下列兩個同步條件:

只有在緩沖池中至少有一個緩沖區(qū)已存入消息后,消費者才能從中提取信息,否則消費者必須等待。

只有緩沖池中至少有一個緩沖區(qū)是空時,生產(chǎn)者才能把消息放入緩沖區(qū),否則生產(chǎn)者必須等待。1.2偽代碼://創(chuàng)建信號量并初始化semaphoremutex=1;//對緩存區(qū)設(shè)置臨界區(qū)semaphorefull=0;//緩沖區(qū)已經(jīng)被占據(jù)的數(shù)目Semaphoreempty=N;//緩沖區(qū)空巣數(shù)目//生產(chǎn)者voidproduce(){While(1){P(empty);P(mutex);addToBuf();V(mutex);V(full);}}//消費者voidconsumer(){While(1){P(full);P(mutex);moveFromBuf();V(mutex);V(empty);}}1.3實驗結(jié)果與分析分析:創(chuàng)建5個進(jìn)程,其中兩個進(jìn)程為生產(chǎn)者進(jìn)程,3個進(jìn)程為消費者進(jìn)程。一個生產(chǎn)者進(jìn)程試圖不斷地在一個緩沖中寫入大寫字母,另一個生產(chǎn)者進(jìn)程試圖不斷地在緩沖中寫入小寫字母。3個消費者不斷地從緩沖中讀取一個字符并輸出。生產(chǎn)者和消費者兩進(jìn)程P和C之間應(yīng)滿足下列兩個同步條件:

只有在緩沖池中至少有一個緩沖區(qū)已存入消息后,消費者才能從中提取信息,否則消費者必須等待。

只有緩沖池中至少有一個緩沖區(qū)是空時,生產(chǎn)者才能把消息放入緩沖區(qū),否則生產(chǎn)者必須等待。用線程實現(xiàn)睡覺的理發(fā)師問題2.1設(shè)計原理利用三個信號量和一個控制變量來協(xié)調(diào)理發(fā)師、理發(fā)椅和顧客之間的活動。

1.信號量customers用來記錄等候理發(fā)的顧客數(shù),并用于阻塞理發(fā)師進(jìn)程,初值為0

2.信號量barbers記錄正在等候顧客的理發(fā)師數(shù),初值為1

3.信號量waiting用來記錄等候理發(fā)的顧客數(shù),初值為0

4.信號量mutex為waiting變量設(shè)置臨界區(qū),初值為12.2偽代碼Semaphorecustomers=0;Semaphorebarbers=1;Semaphoremuttex=1;Intchairs=N;Intwaiting=0;Voidbarber(){While(1){P(cutomers);//若無顧客,理發(fā)師睡眠P(mutex);//進(jìn)程互斥waiting:=waiting–1;//等候顧客數(shù)少一個V(barbers);//理發(fā)師去為一個顧客理發(fā)V(mutex);//開放臨界區(qū)cuthair();//正在理發(fā)}}Voidconstomer(){While(1){P(mutex);//進(jìn)程互斥if(waiting<chairs){waiting:=waiting+1;//等候顧客數(shù)加1V(customers);//必要的話喚醒理發(fā)師V(mutex);//開放臨界區(qū)P(barbers);//無理發(fā)師,顧客坐著養(yǎng)神get-haircut();//一個顧客坐下等理/}elseV(mutex);//人滿了,走吧!}}2.3實驗結(jié)果與分析分析:理發(fā)店接待室有n張椅子,工作室有1張椅子;沒有顧客時,理發(fā)師睡覺;第一個顧客來到時,必須將理發(fā)師喚醒;顧客來時如果還有空座的話,他就坐在一個座位上等待;如果顧客來時沒有空座位了,他就離開,不理發(fā)了;讀者寫者問題3.1設(shè)計原理寫者優(yōu)先,一旦一個寫者到來,它應(yīng)該盡快對文件進(jìn)行寫操作。則新來到的讀者不允許進(jìn)行讀操作。讀者到:1)無讀者且無寫者,新讀者讀2)有讀者但無寫者等待,新讀者讀3)有讀者但有寫著等待,讀者等待4)有寫者在寫,新讀者等待寫者到:1)無讀者且無寫者,新寫者寫2)有讀者在讀,新寫者等待3)有寫者寫,新寫者等待3.2偽代碼read:=1//讀者信息量,用于第一個寫者與讀者互斥readcount:=0//記錄當(dāng)前讀者的進(jìn)程數(shù)mutex:=1//readcount變量的臨界區(qū)的鎖writecount:=0//記錄當(dāng)前寫者排隊的進(jìn)程數(shù)write:=1//寫者信息量,用于寫者互斥,第一個讀者與寫者互斥mutex2:=1//writecount的臨界區(qū)的鎖//讀者進(jìn)程Voidreader(){While(1){

P(read)

P(mutex)

V(read)

readcount:=readcount+1;

if(readcount=1)

P(write)

V(mutex)

讀文件

P(mutex)

readcount:=readcount-1

if(readcount=0)

V(write)

V(mutex)}//endofwhile}//endoffunction//寫者進(jìn)程Voidwriter(){While(1){P(mutex2)

writecount:=writecount+1

if(writecount=1)

P(read)

V(mutex2)

P(write)

寫文件

V(write)

P(mutex2)

writecount:=writecount-1

if(writecount=0)

V(read)

V(mutex2)}}3.3實驗結(jié)果與分析分析:讀者到:1)無讀者且無寫者,新讀者讀2)有讀者但無寫者等待,新讀者讀3)有讀者但有寫著等待,讀者等待4)有寫者在寫,新讀者等待寫者到:1)無讀者且無寫者,新寫者寫2)有讀者在讀,新寫者等待3)有寫者寫,新寫者等待實驗參考函數(shù)用于Linux進(jìn)程通信共享內(nèi)存。共享內(nèi)存函數(shù)由shmget、shmat、shmdt、shmctl四個函數(shù)組成。信號集操作函數(shù):intsemget(key_tkey,intnsems,intsemflg);Intsemop(intsemSetId,sembufbuf,intlength)線程操作函數(shù)pthread_create()pthread_mutex_unlock()pthread_mutex_lock()信號操作函數(shù):Sem_init()Sem_wait()Sem_post()小結(jié)生產(chǎn)者消費者問題該問題描述了兩個共享固定大小緩沖區(qū)的進(jìn)程或線程——即所謂的“生產(chǎn)者”和“消費者”——在實際運行時會發(fā)生的問題。生產(chǎn)者的主要作用是生成一定量的數(shù)據(jù)放到緩沖區(qū)中,然后重復(fù)此過程。與此同時,消費者也在緩沖區(qū)消耗這些數(shù)據(jù)。該問題的關(guān)鍵就是要保證生產(chǎn)者不會在緩沖區(qū)滿時加入數(shù)據(jù),消費者也不會在緩沖區(qū)中空時消耗數(shù)據(jù)。理發(fā)師問題:一個理發(fā)店接待室有n張椅子,工作室有1張椅子;沒有顧客時,理發(fā)師睡覺;第一個顧客來到時,必須將理發(fā)師喚醒;顧客來時如果還有空座的話,他就坐在一個座位上等待;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論