




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一設(shè)計概述所謂讀者寫者問題,是指保證一個writer進程必須與其他進程互斥地訪問共 享對象的同步問題。讀者寫者問題可以這樣的描述,有一群寫者和一群讀者,寫者在寫同一本書, 讀者也在讀這本書,多個讀者可以同時讀這本書,但是,只能有一個寫者在寫書, 并且,讀者必寫者優(yōu)先,也就是說,讀者和寫者同時提出請求時,讀者優(yōu)先。當 讀者提出請求時需要有一個互斥操作,另外,需要有一個信號量S來當前是否可 操作。信號量機制是支持多道程序的并發(fā)操作系統(tǒng)設(shè)訃中解決資源共享時進程間 的同步與互斥的重要機制,而讀者寫者問題則是這一機制的一個經(jīng)典范例。與記錄型信號量解決讀者一寫者問題不同,信號量機制它增加了一個限制, 即最
2、多允許RN個讀者同時讀。為此,乂引入了一個信號量L,并賦予初值為RN, 通過執(zhí)行wait (L,l,l)操作,來控制讀者的數(shù)目,每當有一個讀者進入時,就要 執(zhí)行wait(L,l,l)操作,使L的值減1。當有RN個讀者進入讀后,L便減為0, 笫RN+1個讀者要進入讀時,必然會因wait (L,l,l)操作失敗而堵塞。對利用信號量來解決讀者一寫者問題的描述如下:Var RN integer;Ljnx:semaphore: =RNJ ;BeginParbeginReader :beginRepeatSwait (LJ J );Swait (mx,0);Perform reader operation
3、;Ssignal(LJ);Until false;EndWriter : beginRepeatSwait(mx 丄1 丄RN,O);Perform writer operation;Ssignal(mxJ);Until false;EndParendEnd其中,Swait (mx,l,O)語句起著開關(guān)作用,只要無Writer進程進入些,mx=l, reader進程就都可以進入讀。但是要一旦有Writer進程進入寫時,其MX=O,則 任何reader進程就都無法進入讀。Swait(mx ,1,1,1,RN,O)語句表示僅既無Write 進程在寫(mx=l) , 乂無reader進程在讀(L=R
4、N)時,writer進程才能進入臨 界區(qū)寫。本設(shè)計方案就是通過利用記錄型信號量對讀者寫者問題的解決過程進行模 擬演示,形象地闡述記錄型信號量機制的工作原理。二設(shè)計目的與內(nèi)容一實驗目的1. 用信號量來實現(xiàn)讀者寫者問題。2. 理解和運用信號量、PV原語、進程間的同步互斥關(guān)系等基本知識。二、 二實驗內(nèi)容讀者寫者問題的定義如下:有一個許多進程共享的數(shù)據(jù)區(qū),這個數(shù)據(jù)區(qū)可以 是一個文件或者主存的一塊空間;有一些只讀取這個數(shù)據(jù)區(qū)的進程(Reader)和 一些只往數(shù)據(jù)區(qū)寫數(shù)據(jù)的進程(Writer),此外還需要滿足以下條件:(1) 任意多個讀進程可以同時讀這個文件;(2) 一次只有一個寫進程可以往文件中寫;(3
5、) 如果一個寫進程正在進行操作,禁止任何讀進程度文件。我們需要分兩種悄況實現(xiàn)該問題:讀優(yōu)先:要求指一個讀者試圖進行讀操作時,如果這時正有其他讀者在進行 操作,他可直接開始讀操作,而不需要等待。寫優(yōu)先:一個讀者試圖進行讀操作時,如果有其他寫者在等待進行寫操作或 正在進行寫操作,他要等待該寫者完成寫操作后才開始讀操作。三設(shè)計分析在Windows 7環(huán)境下,創(chuàng)建一個包含n個線程的控制臺進程。用這n個線 程來表示n個讀者或?qū)懻?。每個線程按相應測試數(shù)據(jù)文件的要求,進行讀寫操作。 請用信號量機制分別實現(xiàn)讀者優(yōu)先和寫者優(yōu)先的讀者寫者問題。讀者寫者問題的讀寫操作限制:讀者-寫者的讀寫限制(包括讀者優(yōu)先和寫者優(yōu)
6、先)1)寫寫互斥,即不能有兩個寫者同時進行寫操作2)讀-寫互斥,即不能同時有一個讀者在讀,同時卻有一個寫者在寫3)讀讀允許,即可以有2個以上的讀者同時讀將所有的讀者和所有的寫者分別放進兩個等待隊列中,當讀允許時就讓讀者 隊列釋放一個或多個讀者,當寫允許時,釋放第一個寫者操作。讀者寫者問題的 定義如下:有一個許多進程共享的數(shù)據(jù)區(qū),這個數(shù)據(jù)區(qū)可以是一個文件或者主存 的一塊空間;有一些只讀取這個數(shù)據(jù)區(qū)的進程(Reader)和一些只往數(shù)據(jù)區(qū)寫數(shù) 據(jù)的進程(Writer),此外還需要滿足以下條件:1)任意多個讀進程可以同時讀這 個文件;2) 一次只有一個寫進程可以往文件中寫;3)如果一個寫進程正在進行
7、操作,禁止任何讀進程度文件。我們需要分兩種情況實現(xiàn)該問題:讀優(yōu)先:要求指一個讀者試圖進行讀操作時,如果這時正有其他讀者在進行 操作,他可直接開始讀操作,而不需要等待。寫優(yōu)先:一個讀者試圖進行讀操作 時,如果有其他寫者在等待進行寫操作或正在進行寫操作,他要等待該寫者完成 寫操作后才開始讀操作。程序山兩部分組成:1。讀者寫者模塊:包括系統(tǒng)調(diào)用接口,讀者-寫者活動描述主程序。系統(tǒng)接口 主要功能是通過管道向父進程發(fā)送系統(tǒng)調(diào)用命令,并讀取父進程送來的返回值。讀者寫者活動程序根據(jù)臨界資源的共享,互斥原則編制,具體見源程序。2。主控模塊:主控模塊實現(xiàn)系統(tǒng)初始化系統(tǒng)調(diào)用命令接收與解釋執(zhí)行,系統(tǒng)調(diào) 用功能的實現(xiàn)
8、(包括信號量機制),及讀者寫者活動過程記錄與顯示。初始化系統(tǒng)環(huán)境建立通信管道啟動讀者-寫者進程接收系統(tǒng)調(diào)用命令解釋執(zhí)行系統(tǒng)初始化模塊 管道建立模塊 進程啟動模塊 命令解釋模塊WaitOSignal ()Wakeup ()Block ()五程序調(diào)試測試數(shù)據(jù)文件格式:測試數(shù)據(jù)文件包括n行測試數(shù)據(jù),分別描述創(chuàng)建的n個線程是讀者還是寫 者,以及讀寫操作的開始時間和持續(xù)時間。每行測試數(shù)據(jù)包括四個字段,各字段 間用空格分隔。第一字段為一個正整數(shù),表示線程序號。第二字段表示相應線程 角色,R表示讀者是,W表示寫者。第三字段為一個正數(shù),表示讀寫操作的開 始時間。線程創(chuàng)建后,延時相應時間(單位為秒)后發(fā)岀對共享
9、資源的讀寫申請。 第四字段為一個正數(shù),表示讀寫操作的持續(xù)時間。當線程讀寫申請成功后,開始 對共享資源的讀寫操作,該操作持續(xù)相應時間后結(jié)束,并釋放共享資源。六結(jié)果分析和討論在讀者寫者同時在隊列中等待申請資時,讀者優(yōu)先調(diào)用資源。而且如果一個 讀者申請進行讀操作時已有另一讀者正在進行讀操作,則該讀者可直接開始讀操 作,即讀讀允許。進程1是R操作,在時間3時進入隊列,運行時間是5,在它進入時沒有進程 占用資源,它既占用資源;知道它釋放資源,等候的進程有3, 4, 5;進程2是W操作,在時間16時進入隊列,運行時間是5,在它進入時進程4 占用資源,它等待資源,當4釋放時占用資源;進程3是R操作,在時間5
10、時進入隊列,運行時間是2,在它進入時進程1占 用資源,它等待資源,當進程1釋放資源后,由于讀者優(yōu)先,進程3, 5同時調(diào) 運資源;進程4是R操作,在時間6時進入隊列,運行時間是5,在它進入時進程1占用資源,它等待資源,當進程1釋放資源后,曲于讀者優(yōu)先,進程3, 5占用資 源,它依然等待,直到進程3, 5都結(jié)束;進程5是W操作,在時間4時進入隊列,運行時間是3,在它進入時進程1 占用資源,它等待資源,當進程1釋放資源后,由于讀者優(yōu)先,進程3, 5同時 調(diào)運資源;七心得體會這一次課程設(shè)訃,讓我體會很深刻。讀者-寫者問題經(jīng)典的線程同步問題的 一個模型。經(jīng)過讀者寫者問題的編寫,我對同步機構(gòu)應用有了深入的
11、了解。懂得 了運用信號量實現(xiàn)進程間的互斥。實現(xiàn)了不讓共享資源同時修改。用信號量上的 原語操作使臨界段問題的解決比較簡單明了了。讀者寫者問題的編寫,花的時間 很多,也學到很多東西。了解支持多道程序的并發(fā)操作系統(tǒng)設(shè)計中解決資源共享 時進程間的同步與互斥的信號量機制。兒天的試驗,雖然難度有點大,但只要自 己花時間去學習,還是會攻克困難的??傊?,每一次課程設(shè)計不僅是我們學習的好機會,而且是我們鍛煉實際動手 能力的平臺,雖然有難度的東西總會讓人很抵觸,比如在課設(shè)過程中有很多郁悶 的時候,一個小小的錯誤一不小心就花去了自己一上午的時間,所以在這個過程 中能夠磨練人的意志與耐心,最后感謝老師的指導與監(jiān)督。#
12、include #include #include #include #include #include #define MAX PERSON 100#define READER0 讀者#define WRITER1/寫者#define END -1#define RREADER#define WWRITERtypedef struct _PersonHANDLE m_hThread;定義處理線程的句柄intm_nType;進程類型(讀寫)intm_nStartTime;/ 開始時間intm_nWorkTime;運行時間intm_nID; 進程號(Person;Person g_Persons
13、MAX_PERSON;int g_NumPerson = 0;long g_CurrentTime= 0;/基本時間片數(shù)int g_PersonLists = 進程隊列1,R, 3,5, 2,W,4,5, 3, R, 5,2,4,R,6,5, 5, W, 5.1, 3, END,;int g_N u mOfRead i ng = 0;int g_NumOfW riteRequest = 0;/申請耳進程的個數(shù)HANDLE g_hReadSemaphore;/讀者信號HANDLE g_hWriteSemaphore;/寫者信號bool finished = false; 所有的讀完成/bool
14、wfinished = false; 所有的寫完成void CreatePersonList(int *pPersonList);bool CreateReader(int StartTimejnt WorkTime,int ID);bool CreateWriter(int StartTimejnt WorkTime,int ID);DWORD WINAPIReaderProc(LPVOID IpParam);DWORD WINAPIWriterProc(LPVOID IpParam);int niain()g_hReadSemaphore可用的資源數(shù)為1,=CreateSemaphore(
15、NULLJ J00,NULL); /創(chuàng)建信號燈,當前最大為100g_hWriteSemaphore = CreateSemaphore(NULL, 1,100,NULL); 創(chuàng)建信號燈,當前可用的資源數(shù)為1,最大為100CreatePersonList(g_PersonLists); / Create All the reader and writers printf(MCreated all the reader and writern.nH);g_CurrentTime = 0;while(tnje)g_C u rre ntT i me+;Sleep(300); / 300 msprint
16、f(MCurrentTime = %dn,g_CurrentTime);if(finished) return 0; / return 0;void CreatePersonList(int *pPersonLists)int i=0;int *pList = pPersonLists;bool Ret;while(pList0 != END)switch(pListl)2while(g_CurrentTime m_nStartTime + pPersonm_nWoikTime) )printf(MReader %d is Exit.nn,pPerson-m_nID);WaitForSingl
17、eObject(g_hReadSemaphoreJNFINITE);g_NumOfReading;if(g_NumOfReading = 0)ReleaseSemaphore(g_hWriteSemaphoreJ,NULL);此時沒有讀者,可以寫ReleaseSemaphore(g_hReadSemaphoreJ .NULL); if(pPerson-m_nID = 4) finished = true; /所有的讀寫完成 ExitThread(O);return 0;DWORD WINAPI WriterProc(LPVOID IpParam)Person *pPerson = (Perso
18、n*)lpParam;/ wait for the start time while(g_CurrentTime != pPerson-m_nStartTime) )printf(nWriter %d is Requesting n,pPersonm_nID);WaitForSingleObject(g_hWriteSemaphore,INFINITE);/ modify the writers real start time pPerson-m_nStartTime = g_CurrentTime;printf(HWriter %d is Writting the Shared Buffer
19、.n,pPerson-m_nID);printf(HWriter %d is Exit.n,pPerson-m_nID);g_NumOfW riteRequest;ReleaseSemaphore(g_hWriteSemaphoreJ ,NULL);if(pPerson-m_nID = 4) finished = true;/所有的讀寫完成ExitThread(O);return 0;)bool CreateReader(int StartTime,int WorkTime,int ID) DWORD dwThreadID;if(g-NumPerson = MAX_PERSON)return false;Person *pPerson = &gPersons g_Nu mPerson ; pPerson-m_nID = ID;p
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 可行性研究合同范本
- 甘肅土地流轉(zhuǎn)合同范本
- 化肥農(nóng)藥購買合同范本
- 一般租賃合同范本
- 冷柜租賃合同范本
- 寫農(nóng)業(yè)合作社合同范本
- 名宿托管簽約合同范本
- 做微商城合同范本
- 供用熱合同范本
- 酒店轉(zhuǎn)讓經(jīng)營合同范本
- 《胸外按壓》課件
- 2024屆南通二模(又蘇北七市二模)數(shù)學試題
- 北師大版六年級下冊書法練習指導教案教學設(shè)計
- 江西省南昌市2024屆高三一模語文試題及答案解析
- 2023年小學音樂2022版新課程標準考試測試題及答案(共五套)
- 第一章村集體經(jīng)濟組織會計制度講解
- 湖北煙草公司招聘考試真題
- 2024年江蘇護理職業(yè)學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- -藝術(shù)博覽會與藝術(shù)品拍賣
- 保健滋補品行業(yè)報告
- 2024智能燃氣表通用技術(shù)要求
評論
0/150
提交評論