操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  操作系統(tǒng)課程設(shè)計(jì)</b></p><p>  題目名稱(chēng): 讀者與寫(xiě)者 </p><p><b>  目錄</b></p><p>  問(wèn)題描述................................................3~4</p><

2、;p>  系統(tǒng)設(shè)計(jì)................................................5~9</p><p>  源代碼清單.............................................9~19</p><p>  運(yùn)行結(jié)果測(cè)試與分析.......................................20</p&

3、gt;<p>  總結(jié)與心得...............................................20</p><p><b>  問(wèn)題描述</b></p><p>  讀者與寫(xiě)者問(wèn)題主要是涉及到操作系統(tǒng)中的進(jìn)程同步、互斥以及信號(hào)量機(jī)制的概念,可以有多個(gè)讀者進(jìn)程同時(shí)進(jìn)行,但是當(dāng)寫(xiě)者進(jìn)程到來(lái)時(shí),所有的讀者進(jìn)程都要進(jìn)入等待狀態(tài),而且寫(xiě)

4、者進(jìn)程只能獨(dú)立。</p><p>  實(shí)現(xiàn)讀者與寫(xiě)者的總體思路是使用多線(xiàn)程,每當(dāng)一個(gè)讀者到來(lái)時(shí),如果當(dāng)前沒(méi)有寫(xiě)者進(jìn)程正在進(jìn)行,則立即開(kāi)啟一個(gè)讀者線(xiàn)程,如果當(dāng)前有寫(xiě)者正在進(jìn)行,則此讀者應(yīng)當(dāng)進(jìn)入等待狀態(tài),直到寫(xiě)者進(jìn)程完成,每當(dāng)一個(gè)寫(xiě)者到來(lái)時(shí),若此時(shí)有讀者正在進(jìn)行,則立即將正在進(jìn)行的讀者設(shè)置為等待狀態(tài),開(kāi)啟寫(xiě)者進(jìn)程,并且當(dāng)下一個(gè)寫(xiě)者到來(lái)時(shí),只能進(jìn)入等待狀態(tài),除非當(dāng)前寫(xiě)者完成。</p><p>&

5、lt;b>  進(jìn)程同步與互斥:</b></p><p>  進(jìn)程互斥是多處理機(jī)系統(tǒng)中的典型間接作用,通常是兩個(gè)或兩個(gè)以上進(jìn)程需要同時(shí)訪(fǎng)問(wèn)某個(gè)共享變量,在這個(gè)程序中此共享變量就是共享文件。我們一般將發(fā)生能夠共享變量的程序段稱(chēng)為臨界區(qū)。兩個(gè)進(jìn)程不能同時(shí)進(jìn)入臨界區(qū),否則就會(huì)導(dǎo)致數(shù)據(jù)的不一致,產(chǎn)生與時(shí)間有關(guān)的錯(cuò)誤。我們解決互斥問(wèn)題時(shí)要遵循互斥和公平兩個(gè)原則,即任意時(shí)刻只允許一個(gè)進(jìn)程進(jìn)入臨界區(qū),且不能讓任

6、意進(jìn)程進(jìn)入無(wú)限的等待。</p><p>  進(jìn)程同步是進(jìn)程之間的直接作用。簡(jiǎn)單的理解就是,若有兩個(gè)進(jìn)程A,B,若只有當(dāng)A進(jìn)程完成后B進(jìn)程才能夠啟動(dòng),則說(shuō)A進(jìn)程與B進(jìn)程是同步的。</p><p>  實(shí)現(xiàn)同步與互斥有多種機(jī)制,比如信號(hào)量、管程、會(huì)合、分布式系統(tǒng),在這個(gè)程序中簡(jiǎn)單的用信號(hào)量來(lái)實(shí)現(xiàn)。</p><p><b>  信號(hào)量</b><

7、/p><p>  信號(hào)量機(jī)制是荷蘭學(xué)者Dijkstra于1955提出的一種解決進(jìn)程同步與互斥的有效工具在此機(jī)制中,信號(hào)量S是一個(gè)整數(shù),S大于等于零代表可供并發(fā)進(jìn)程使用的資源數(shù),當(dāng)S小于零時(shí)表示正在等待使用臨界區(qū)的進(jìn)程數(shù)。Dijkstra同時(shí)提出了對(duì)信號(hào)量操作的PV原語(yǔ):</p><p><b>  P原語(yǔ)操作動(dòng)作:</b></p><p><

8、b>  、S減一;</b></p><p>  、若S減一后仍大于或等于零,則進(jìn)程繼續(xù)進(jìn)行。</p><p>  、若S減一小于零,則進(jìn)程被阻塞后進(jìn)入與該信號(hào)量相對(duì)應(yīng)的隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。</p><p><b>  V原語(yǔ)操作動(dòng)作:</b></p><p><b>  、S加一;<

9、/b></p><p>  、若S加一后結(jié)果大于零,則進(jìn)程繼續(xù);</p><p>  、若S加一后結(jié)果小于或等于零,則從該信號(hào)的等待隊(duì)列中喚醒一等待進(jìn)程再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)向進(jìn)程調(diào)度。</p><p>  PV操作對(duì)于每一個(gè)進(jìn)程來(lái)說(shuō),都只能進(jìn)行一次,而且必須成對(duì)使用。在PV執(zhí)行期間不允許有中斷發(fā)生。信號(hào)量機(jī)制分整型信號(hào)量機(jī)制、記錄型信號(hào)量機(jī)制、and型信號(hào)

10、量機(jī)制以及信號(hào)量集,在這個(gè)程序中使用的是整型信號(hào)量機(jī)制。</p><p>  假設(shè)共享文件是一個(gè)JTextArea,在這個(gè)JTextArea中,可以向其寫(xiě)入文件,也可以從其中讀取文件,遵循的原則是,多個(gè)讀者可以同時(shí)進(jìn)行,但寫(xiě)者只能單獨(dú)進(jìn)行,而且寫(xiě)者優(yōu)先。當(dāng)一個(gè)讀者到來(lái)時(shí),先判斷有無(wú)寫(xiě)者正在進(jìn)行,可用一個(gè)布爾變量bwrite,當(dāng)其為true時(shí)表示有寫(xiě)者正在進(jìn)行,表示此時(shí)來(lái)到的讀者只能進(jìn)入等待狀態(tài)。當(dāng)其為false時(shí)

11、,表示暫無(wú)寫(xiě)者正在進(jìn)行,來(lái)到的讀者可以立即開(kāi)啟。</p><p>  讀者到來(lái):空閑情況下,直接開(kāi)啟一個(gè)讀者,就是將共享文件中的內(nèi)容簡(jiǎn)單的讀取出,并且顯示在相應(yīng)讀者的顯示框中。當(dāng)有讀者正在進(jìn)行時(shí),由于多個(gè)讀者可以同時(shí)進(jìn)行,因此這種情況下也是立即開(kāi)啟一個(gè)讀者進(jìn)程,同時(shí)讀取。當(dāng)有寫(xiě)者正在進(jìn)行時(shí),由于寫(xiě)者優(yōu)先,因此到來(lái)的讀者必須進(jìn)入等待狀態(tài),直到所有寫(xiě)者進(jìn)程全部完成。一段時(shí)間后,這個(gè)讀者應(yīng)當(dāng)完成,并且要釋放資源,即共享

12、文件的被引用次數(shù)減一。</p><p>  寫(xiě)者到來(lái):空閑情況下,直接開(kāi)啟一個(gè)寫(xiě)者,由于寫(xiě)者只能單獨(dú)進(jìn)行,因此開(kāi)啟一個(gè)寫(xiě)者后要將共享區(qū)鎖住,禁止其他讀者或者寫(xiě)者進(jìn)入。若此前有讀者正在進(jìn)行,則正在進(jìn)行的讀者馬上進(jìn)入等待狀態(tài),進(jìn)入等待隊(duì)列,立即將此寫(xiě)者開(kāi)啟,直到該寫(xiě)者完成,在從等待隊(duì)列中拿出處于等待的讀者繼續(xù)。若此前有寫(xiě)者正在進(jìn)行,則剛到的這個(gè)寫(xiě)者要進(jìn)入等待隊(duì)列。而且若后面還有讀者到來(lái),則當(dāng)前寫(xiě)者完成后,要先判斷寫(xiě)者

13、等待隊(duì)列是否為空,若寫(xiě)者等待隊(duì)列為非空,則應(yīng)先喚醒處于等待狀態(tài)的寫(xiě)者,直到寫(xiě)者等待隊(duì)列為空,再去喚醒處于等待狀態(tài)的讀者。</p><p>  這里要用到兩個(gè)隊(duì)列:讀者等待隊(duì)列,寫(xiě)者等待隊(duì)列。</p><p>  產(chǎn)生java.lang.IllegalMonitorStateException異常:原因是沒(méi)有注意notify(),notifyAll(),wait()方法的使用條件,如果當(dāng)前的

14、線(xiàn)程不是此對(duì)象鎖的所有者,卻調(diào)用該對(duì)象的notify(),notifyAll(),wait()方法。解決方法是在調(diào)用wait()的方法前加上synchronized。</p><p>  Synchronized:用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線(xiàn)程執(zhí)行改代碼段。</p><p>  當(dāng)兩個(gè)并發(fā)線(xiàn)程訪(fǎng)問(wèn)同一個(gè)對(duì)象Object中的這個(gè)synchronize

15、(this)同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線(xiàn)程得到執(zhí)行,另一個(gè)線(xiàn)程必須等待當(dāng)前線(xiàn)程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行改代碼塊。</p><p>  一個(gè)線(xiàn)程訪(fǎng)問(wèn)Object的一個(gè)synchronize(this)同步代碼塊時(shí),另一個(gè)線(xiàn)程任然可以訪(fǎng)問(wèn)該object中的非synchronize(this)同步代碼塊。</p><p>  當(dāng)一個(gè)線(xiàn)程訪(fǎng)問(wèn)object的一個(gè)synchronize(t

16、his)同步代碼塊時(shí),其他線(xiàn)程對(duì)object中所有其他synchronize(this)同步代碼塊的訪(fǎng)問(wèn)將被阻塞。</p><p><b>  系統(tǒng)設(shè)計(jì)</b></p><p>  對(duì)于該程序的設(shè)計(jì),總共設(shè)計(jì)三個(gè)類(lèi),Reader、Writer、ReaderWriter,其中讀者與寫(xiě)者分別實(shí)現(xiàn)Runnable接口,每個(gè)讀者以及每個(gè)寫(xiě)者對(duì)應(yīng)一個(gè)線(xiàn)程每當(dāng)讀者到來(lái)時(shí),開(kāi)啟一個(gè)

17、線(xiàn)程來(lái)處理。</p><p>  Writer類(lèi),每當(dāng)一個(gè)寫(xiě)者到來(lái)時(shí),改變共享文件</p><p><b>  源代碼清單</b></p><p><b>  運(yùn)行結(jié)果測(cè)試與分析</b></p><p><b>  結(jié)論與心得</b></p><p> 

18、 讀者寫(xiě)者問(wèn)題是一個(gè)經(jīng)典的并發(fā)程序設(shè)計(jì)問(wèn)題,也是一種經(jīng)常出現(xiàn)的一種同步問(wèn)題。在這個(gè)程序設(shè)計(jì)的過(guò)程中也出現(xiàn)了一些問(wèn)題。比如產(chǎn)生java.lang.IllegalMonitorStateException異常:原因是沒(méi)有注意notify(),notifyAll(),wait()方法的使用條件,如果當(dāng)前的線(xiàn)程不是此對(duì)象鎖的所有者,卻調(diào)用該對(duì)象的notify(),notifyAll(),wait()方法。解決方法是在調(diào)用wait()的方法前加上

19、synchronized。</p><p>  Synchronized:用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線(xiàn)程執(zhí)行改代碼段。</p><p>  當(dāng)兩個(gè)并發(fā)線(xiàn)程訪(fǎng)問(wèn)同一個(gè)對(duì)象Object中的這個(gè)synchronize(this)同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線(xiàn)程得到執(zhí)行,另一個(gè)線(xiàn)程必須等待當(dāng)前線(xiàn)程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行改代碼塊。</p&g

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論