版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計(jì)概述所謂的讀-寫問題指的是確保寫進(jìn)程必須訪問與其他進(jìn)程互斥的共享對象的同步問題。讀者-作者問題可以這樣描述:有一群作家和一群讀者,作家在寫同一本書,而讀者正在讀它。多個(gè)讀者可以同時(shí)閱讀這本書。然而,只有一個(gè)作家在寫一本書,讀者必須優(yōu)先考慮作家。也就是說,當(dāng)讀者和作者同時(shí)提出請求時(shí),讀者是首選。當(dāng)讀者提出請求時(shí),需要有一個(gè)互斥的操作。此外,需要有一個(gè)信號量來查看它當(dāng)前是否可操作。信號量機(jī)制是支持多通道程序的并發(fā)操作系統(tǒng)設(shè)計(jì)中解決進(jìn)程間同步和互斥的重要機(jī)制,讀寫器問題就是這種機(jī)制的典型例子。不同于記錄信號量來解決讀寫器問題,信號量機(jī)制增加了一個(gè)限制,即它最多允許RN閱讀器同時(shí)讀取。因此,引入一
2、個(gè)信號量l,并給它一個(gè)初始值RN。通過執(zhí)行等待(1,1,1)操作來控制讀取器的數(shù)量。每當(dāng)讀取器進(jìn)入時(shí),執(zhí)行等待(L,1,1)操作以將L的值減少1。當(dāng)有RN閱讀器進(jìn)入讀數(shù)時(shí),L將減少到0。當(dāng)RN 1讀取器想要進(jìn)入讀取時(shí),它將由于等待(1,1,1)操作的失敗而被阻塞。使用信號量解決讀寫器問題描述如下:Var RN整數(shù);l,mx:semaphore:=RN,1;開始Parbegin讀者:開始重復(fù)swa it(1,1,1);Swait(mx,1,0);執(zhí)行讀取器操作;信號(1,1);直到錯(cuò)誤;目標(biāo)作家:開始重復(fù)Swait(mx,1,1,l,RN,0);執(zhí)行寫入操作;Ssignal(mx,1);直到錯(cuò)誤
3、;目標(biāo)Parend目標(biāo)其中,Swait(mx,1,0)語句充當(dāng)開關(guān)。只要沒有Writer進(jìn)程進(jìn)入,mx=1,讀取器進(jìn)程就可以進(jìn)入讀取。但是,一旦寫入器進(jìn)程進(jìn)入寫入狀態(tài),并且其MX=0,則沒有讀取器進(jìn)程可以進(jìn)入讀取狀態(tài)。Swait(mx,1,1,L,RN,0)語句表示只有當(dāng)寫進(jìn)程不寫(mx=1)或讀進(jìn)程不讀(L=RN)時(shí),寫進(jìn)程才能進(jìn)入臨界區(qū)進(jìn)行寫操作。該設(shè)計(jì)方案模擬和演示了利用記錄信號量解決讀寫器問題的過程,并形象地說明了記錄信號量機(jī)制的工作原理。二、設(shè)計(jì)目的和內(nèi)容1.實(shí)驗(yàn)?zāi)康拈L度使用信號量實(shí)現(xiàn)讀寫器問題。2.理解和應(yīng)用基本知識,如信號量、PV原語、進(jìn)程間的同步和互斥。第二,第二個(gè)實(shí)驗(yàn)內(nèi)容讀寫
4、器問題的定義如下:有一個(gè)由多個(gè)進(jìn)程共享的數(shù)據(jù)區(qū),可以是一個(gè)文件,也可以是一個(gè)主存空間;有些進(jìn)程(讀取器)只讀取該數(shù)據(jù)區(qū),有些進(jìn)程(寫入器)只向數(shù)據(jù)區(qū)寫入數(shù)據(jù)。此外,需要滿足以下條件:(1)任何數(shù)量的讀取進(jìn)程都可以同時(shí)讀取該文件;(2)一次只能有一個(gè)寫進(jìn)程寫入文件;(3)如果正在運(yùn)行寫入過程,則禁止讀取任何高級文件。我們需要在兩種情況下認(rèn)識到這個(gè)問題:閱讀優(yōu)先級:要求是指當(dāng)一個(gè)讀者試圖閱讀時(shí),如果此時(shí)其他讀者正在進(jìn)行閱讀操作,他可以直接開始閱讀操作而無需等待。寫作優(yōu)先級:當(dāng)一個(gè)讀者試圖閱讀時(shí),如果其他作者正在等待或?qū)懽?,他?huì)在開始閱讀前等待作者寫完。三個(gè)設(shè)計(jì)分析在Windows 7環(huán)境下,創(chuàng)建一
5、個(gè)有n個(gè)線程的控制臺(tái)進(jìn)程。使用這n個(gè)線程來代表n個(gè)讀者或作者。每個(gè)線程根據(jù)相應(yīng)測試數(shù)據(jù)文件的要求進(jìn)行讀寫。請使用信號量機(jī)制分別實(shí)現(xiàn)讀者優(yōu)先和作者優(yōu)先的讀寫器問題。讀寫器問題的讀寫操作限制;讀者-作者的閱讀和寫作限制(包括讀者第一和作者第一)1)寫-寫互斥,即沒有兩個(gè)作者可以同時(shí)寫2)讀寫互斥,即一個(gè)讀者不能同時(shí)閱讀,但一個(gè)作者同時(shí)寫作3)閱讀許可,即兩個(gè)以上的讀者可以同時(shí)閱讀將所有的讀取器和所有的寫入器分別放入兩個(gè)等待隊(duì)列,當(dāng)允許讀取時(shí)讓讀取器隊(duì)列釋放一個(gè)或多個(gè)讀取器,當(dāng)允許寫入時(shí)釋放第一個(gè)寫入器操作。讀寫器問題的定義如下:有一個(gè)由多個(gè)進(jìn)程共享的數(shù)據(jù)區(qū),可以是一個(gè)文件,也可以是一個(gè)主存空間;有
6、些讀取器只讀取該數(shù)據(jù)區(qū),有些寫入器只向該數(shù)據(jù)區(qū)寫入數(shù)據(jù)。此外,還需要滿足以下條件:1)任意數(shù)量的讀者可以同時(shí)讀取該文件;2)一次只能有一個(gè)寫進(jìn)程寫入文件;3)如果正在運(yùn)行寫入過程,則禁止讀入任何文件。我們需要在兩種情況下認(rèn)識到這個(gè)問題:閱讀優(yōu)先級:要求是指當(dāng)一個(gè)讀者試圖閱讀時(shí),如果此時(shí)其他讀者正在進(jìn)行閱讀操作,他可以直接開始閱讀操作而無需等待。寫作優(yōu)先級:當(dāng)一個(gè)讀者試圖閱讀時(shí),如果其他作者正在等待或?qū)懽鳎麜?huì)在開始閱讀前等待作者寫完。四程序?qū)崿F(xiàn)該計(jì)劃由兩部分組成:1 .讀寫器模塊:包括系統(tǒng)調(diào)用接口、讀寫器活動(dòng)描述主程序。系統(tǒng)接口的主要功能是通過管道向父進(jìn)程發(fā)送系統(tǒng)調(diào)用命令,并讀取父進(jìn)程發(fā)送的返
7、回值。讀者-作者活動(dòng)計(jì)劃是根據(jù)關(guān)鍵資源共享和互斥的原則編制的。有關(guān)詳細(xì)信息,請參見源程序。2 .主控模塊:主控模塊實(shí)現(xiàn)系統(tǒng)初始化系統(tǒng)調(diào)用命令的接收、解釋和執(zhí)行,系統(tǒng)調(diào)用功能(包括信號量機(jī)制)的實(shí)現(xiàn),讀寫器活動(dòng)過程的記錄和顯示。初始化系統(tǒng)環(huán)境建立溝通渠道啟動(dòng)讀寫器流程接收系統(tǒng)調(diào)用命令解釋執(zhí)行系統(tǒng)初始化模塊管道建立模塊過程啟動(dòng)模塊命令解釋模塊等待()信號()喚醒()塊()5.程序調(diào)試測試數(shù)據(jù)文件格式:測試數(shù)據(jù)文件包括N行測試數(shù)據(jù),分別描述所創(chuàng)建的N個(gè)線程是讀線程還是寫線程,以及讀寫操作的開始時(shí)間和持續(xù)時(shí)間。每行測試數(shù)據(jù)包括四個(gè)字段,用空格隔開。第一個(gè)字段是正整數(shù),表示線程序列號。第二個(gè)字段表示相應(yīng)
8、的線程角色,r表示讀取器,w表示寫入器。第三個(gè)字段是正數(shù),表示讀寫操作的開始時(shí)間。創(chuàng)建線程后,它將延遲相應(yīng)的時(shí)間(以秒為單位),并發(fā)出一個(gè)讀寫共享資源的應(yīng)用程序。第四個(gè)字段是正數(shù),表示讀寫操作的持續(xù)時(shí)間。當(dāng)線程的讀寫應(yīng)用成功時(shí),啟動(dòng)共享資源的讀寫操作,持續(xù)相應(yīng)的時(shí)間并結(jié)束,釋放共享資源。六個(gè)結(jié)果分析與討論當(dāng)讀者和作者同時(shí)排隊(duì)申請資金時(shí),讀者優(yōu)先調(diào)用資源。此外,如果當(dāng)一個(gè)讀取器申請讀取操作時(shí),另一個(gè)讀取器已經(jīng)在進(jìn)行讀取操作,則該讀取器可以直接開始讀取操作,即讀取許可。過程1是一個(gè)R操作,在時(shí)間3進(jìn)入隊(duì)列,運(yùn)行時(shí)間是5。當(dāng)它進(jìn)入時(shí),沒有進(jìn)程占用資源,這不僅占用資源;知道它釋放資源,等待過程是3,4
9、,5;流程2是一個(gè)W操作,在16: 00進(jìn)入隊(duì)列,運(yùn)行5分鐘。進(jìn)程4進(jìn)入時(shí)占用資源,等待資源,釋放時(shí)占用資源。進(jìn)程3是一個(gè)R操作,它在時(shí)間5進(jìn)入隊(duì)列,運(yùn)行時(shí)間是2。當(dāng)它進(jìn)入時(shí),進(jìn)程1占用資源,并等待資源。在進(jìn)程1釋放資源之后,進(jìn)程3和5同時(shí)分派資源,因?yàn)樽x者是第一個(gè)。進(jìn)程4是一個(gè)R操作,它在時(shí)間6進(jìn)入隊(duì)列,運(yùn)行時(shí)間是5。當(dāng)它進(jìn)入時(shí),進(jìn)程1占用資源,并等待資源。在進(jìn)程1釋放資源之后,因?yàn)樽x取器是第一個(gè),所以進(jìn)程3和5占用資源,并且它仍然等待直到進(jìn)程3和5完成。進(jìn)程5是一個(gè)W操作,它在時(shí)間4進(jìn)入隊(duì)列,運(yùn)行時(shí)間是3。當(dāng)它進(jìn)入時(shí),進(jìn)程1占用資源,并等待資源。在進(jìn)程1釋放資源之后,進(jìn)程3和5同時(shí)分派資源
10、,因?yàn)樽x者是第一個(gè)。七次經(jīng)歷這一次課程設(shè)計(jì),讓我體會(huì)很深刻。讀者-寫者問題經(jīng)典的線程同步問題的一個(gè)模型。經(jīng)過讀者寫者問題的編寫,我對同步機(jī)構(gòu)應(yīng)用有了深入的了解。懂得了運(yùn)用信號量實(shí)現(xiàn)進(jìn)程間的互斥。實(shí)現(xiàn)了不讓共享資源同時(shí)修改。用信號量上的原語操作使臨界段問題的解決比較簡單明了了。讀者寫者問題的編寫,花的時(shí)間很多,也學(xué)到很多東西。了解支持多道程序的并發(fā)操作系統(tǒng)設(shè)計(jì)中解決資源共享時(shí)進(jìn)程間的同步與互斥的信號量機(jī)制。幾天的試驗(yàn),雖然難度有點(diǎn)大,但只要自己花時(shí)間去學(xué)習(xí),還是會(huì)攻克困難的??傊恳淮握n程設(shè)計(jì)不僅是我們學(xué)習(xí)的好機(jī)會(huì),而且是我們鍛煉實(shí)際動(dòng)手能力的平臺(tái),雖然有難度的東西總會(huì)讓人很抵觸,比如在課設(shè)過
11、程中有很多郁悶的時(shí)候,一個(gè)小小的錯(cuò)誤一不小心就花去了自己一上午的時(shí)間,所以在這個(gè)過程中能夠磨練人的意志與耐心,最后感謝老師的指導(dǎo)與監(jiān)督。八源代碼#包括#包括#包括#包括#包括#包括#定義最大值_人100#定義READER 0 /讀者#定義WRITER 1 /寫者#定義結(jié)束-1#定義R READER#定義W WRITERtypedef結(jié)構(gòu)_人員HANDLE m _ hThread/定義處理線程的句柄int m _ NYPE/進(jìn)程類型(讀寫(int m _ nStartTime/開始時(shí)間int m _ nWorkTime/運(yùn)行時(shí)間int m _ nID/進(jìn)程號人;人_人最大_人;int g _ N
12、umPerson=0;長g _ CurrentTime=0;/基本時(shí)間片數(shù)int g _ personlist=/進(jìn)程隊(duì)列1,R,3,5,2,W,4,5,3,R,5,2,4,R,6,5,5,W,5.1,3,端,;int g _ NumoFrreading=0;int g _ NuMoWriteRequest=0;/申請寫進(jìn)程的個(gè)數(shù)HANDLE g _ HReadsemaFore/讀者信號HANDLE g _ hWriteSemaphore/寫者信號bool finished=false/所有的讀完成/bool wf finished=false;/所有的寫完成void CreatePerson
13、List(int * PPersonList);bool CreateReader(內(nèi)部開始時(shí)間、內(nèi)部工作時(shí)間、內(nèi)部標(biāo)識);bool CreateWriter(內(nèi)部開始時(shí)間、內(nèi)部工作時(shí)間、內(nèi)部標(biāo)識);DWORD WINAPI ReaderPrOc(LPVOID LPparam);DWORD WINAPI編寫程序(LPVOID LPparam);int main()g _ hReadSemaphore=Createsemaphore(空,1100,空);/創(chuàng)建信號燈,當(dāng)前可用的資源數(shù)為1、最大為100g _ hWriteSemaphore=createsemahore(空,1100,空);/創(chuàng)建
14、信號燈,當(dāng)前可用的資源數(shù)為1、最大為100創(chuàng)建人員列表(g _人員列表);/創(chuàng)造所有的讀者和作者printf()創(chuàng)建了所有讀取器和寫入器n. n);g _ CurrentTime=0;while(true)g _ CurrentTime睡眠(300);/300毫秒printf(CurrentTime=%dn ,g _ CurrentTime);如果(完成(返回0; /返回0;void CreatePersonList(int * ppersonlist)int I=0;int * pList=pPersonListsbool Ret(pList0!=END)開關(guān)(pList1)外殼R:Ret=
15、CreateReader(pList2,pList3,Plist0);/351,w452,523,654打破;案例W:Ret=CreateWriter(pList2,pList3,Plist0);打破;如果(!Ret)printf()創(chuàng)建人%d錯(cuò)誤n ,Plist0);pList=4;/移動(dòng)到下一個(gè)人列表DWORD WINAPI ReaderPrOc(LPVOID LPparam)/讀過程人*佩森=(人*)參數(shù);/等待開始時(shí)間而(g_CurrentTime!=pPerson-m_nStartTime) 打印(”閱讀器%d正在請求.n 、PPerson-m _ NId);printf(“ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);/等待寫請求WaitForSingl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026江蘇無錫市宜興市丁蜀鎮(zhèn)招聘國企編外人員14人備考題庫及一套答案詳解
- 2025北京市西城區(qū)教委所屬事業(yè)單位招聘576人備考題庫及答案詳解(易錯(cuò)題)
- 2026岳陽市中心醫(yī)院人員招聘71人備考題庫有答案詳解
- 2025特能集團(tuán)審計(jì)中心工作人員招聘備考題庫及1套完整答案詳解
- 2025浙江寧波海發(fā)漁業(yè)科技有限公司招聘1人備考題庫及1套參考答案詳解
- 2026上半年云南事業(yè)單位聯(lián)考備考題庫職位表下載及一套參考答案詳解
- 食品生產(chǎn)灌裝管理制度
- 生產(chǎn)量交貨管理制度
- 試生產(chǎn)開停車管理制度
- 書店安全生產(chǎn)規(guī)章制度
- 2025年軍事理論知識考核試題及答案
- 直招軍官筆試題目及答案
- 2026屆云南省昆明市五華區(qū)數(shù)學(xué)高二第一學(xué)期期末考試試題含解析
- 老年人夏季健康知識講座
- 部編版六年級語文期末復(fù)習(xí)易錯(cuò)題專題練習(xí)
- 2025年深圳非高危安全管理員和企業(yè)負(fù)責(zé)人習(xí)題(有答案版)(1)1
- 飛行汽車課件
- 春節(jié)花草養(yǎng)護(hù)知識培訓(xùn)
- 消防安全隱患排查清單
- 新能源汽車火災(zāi)撲救課件
- 紅酒倒酒知識培訓(xùn)總結(jié)報(bào)告課件
評論
0/150
提交評論