操作系統(tǒng)課程設計-進程同步模擬設計_第1頁
操作系統(tǒng)課程設計-進程同步模擬設計_第2頁
操作系統(tǒng)課程設計-進程同步模擬設計_第3頁
操作系統(tǒng)課程設計-進程同步模擬設計_第4頁
操作系統(tǒng)課程設計-進程同步模擬設計_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

學號:0120910680527課程設計題目進程同步模擬設計一一生產者和消費者問題學院計算機科學與技木學院專業(yè)軟件工程班級0905姓名林琪琛指導教師劉軍2011年12月25日課程設計任務書學生姓名:林琪琛專業(yè)班級:軟件0905指導教師:劉軍工作單位:計算機科學與技術學院目:進程同步模擬設計一一生產者和消費者問題初始條件:預備內容:閱讀操作系統(tǒng)的進程管理章節(jié)內容,對進程的同步和互斥,以及信號量機制度有深入的理解。實踐準備:掌握一種計算機高級語言的使用。要求完成的主要任務:(包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)模擬用信號量機制實現(xiàn)生產者和消費者問題。設計報告內容應說明:(1)需求分析;(2)功能設計(數(shù)據(jù)結構及模塊說明);(3)開發(fā)平臺及源程序的主要部分:(4)測試用例,運行結果與運行情況分析:(5)自我評價與總結:I)你認為你完成的設計哪些地方做得比較好或比較出色:II)什么地方做得不太好,以后如何改正;in)從本設計得到的收獲(在編寫,調試,執(zhí)行過程中的經驗和教訓);IV)完成本題是否有其他方法(如果有,簡要說明該方法):時間安排:設計安排一周:周1、周設計安排一周:周1、周2、周4、周3:完成程序調試及測試。周5:驗收、撰寫課程設計報告。(注意事項:嚴禁抄襲,一旦發(fā)現(xiàn),一律按0分記)指導教師簽名:系主任(或責任教師)簽名:年月曰年月曰進程同步模擬設計指導教師簽名:系主任(或責任教師)簽名:年月曰年月曰一一生產者和消費者問題1課設任務本課程設計的任務在于,通過編寫一個具體的有關操作系統(tǒng)進程同步互斥的經典問題,加強對操作系統(tǒng)實現(xiàn)進程間同步與互斥的機制的理解。同時培養(yǎng)提出問題、發(fā)現(xiàn)知識、使用工具、解決問題的能力。2“生產者一消費者”問題問題描述:一組生產者向一組消費者提供消息,它們共享一個有界緩沖區(qū)a,生產者向其中投放消息,消費者從中取得消息。規(guī)則:?對于生產者進程:產生一個數(shù)據(jù),當要送入緩沖區(qū)時,要檢查緩沖區(qū)是否己滿,若未滿,則可將數(shù)據(jù)送入緩沖區(qū),并通知消費者進程;否則,等待;?對于消費者進程:當它去取數(shù)據(jù)時,要看緩沖區(qū)中是否有數(shù)據(jù)可取,若有則取走一個數(shù)據(jù),并通知生產者進程,否則,等待。?緩沖區(qū)是個臨界資源,因此,諸進程對緩沖區(qū)的操作程序是一個共享臨界區(qū),所以,還有個互斥的問題。問題分析:該問題涉及到操作系統(tǒng)進程管理當中的兩個重要概念一一同步和互斥。同步,表現(xiàn)在生產者和消費者需要協(xié)同工作,步調不能拉開太大(由緩沖區(qū)大小n決定,n越大,緩沖空間越大,步調可以拉得越開;n=l時,必須是生產一個,消費一個,生產者和消費者就完全同步了)。當步調差距超過極限時,走在前面的當前進程(生產者)調用P原語時由于資源耗盡,被阻塞;步調靠后的繼續(xù)向前推進。由此實現(xiàn)同步?;コ?,表現(xiàn)在生產者與消費者、生產者與生產者、消費者與消費者任何兩個成員之間必須互斥地使用緩沖區(qū)。當有一個成員進入緩沖區(qū)存/取產品時,其他成員將被關在門外排隊等候(被阻塞);當完畢時,通知隊首成員進入。由操作系統(tǒng)理論可知,我們需要三個信號量,分別命名full,empty,mutex,來分別代表消費者的可用資源數(shù)、生產者的可用資源數(shù)、緩沖區(qū)是否可用。初值:(消費者無資源可用),empty-N(生產者有N個資源可用,N代表緩沖區(qū)大?。?,mutex=l(緩沖區(qū)可用)。3程序流程圖:4程序運行截圖汩compro取消comswnerproducer5程序源代碼//comproDlg.cpp:implementationfile#iiiclude"stdafk.h"#iiicludencompro.hM#iiicludencomproDlg.hn#ifdef.DEBUG#defiiienewDEBUG.NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=_FILE_;#endif//CAboutDlgdialogusedfbiAppAbout//GlobalVariablecomswnercharbuffer[10];intbujsize;HANDLEhFull;HANDLEhEmpty;HANDLEhMutex;voidshow(CDC*pDC)(//TODO:Addyourmessagehandlercodehereaiid/orcalldefaultCBnishbrush(RGB(100,250,100));pDC->Rectangle(150,20,300,320);pDC->SelectObject(brush);pDC->Rectangle(150320-30*buf_size,300,320);classCAboutDlg:publicCDialog(public:CAboutDlgQ;//DialogData//((AFX_DATA(CAboutDlg)enum(LDD=IDD.ABOUTBOX);〃}}AFX_DATA//ClassWizaidgeneratedviitualfiinctionovenides//((AFX.VIRTUAL(CAboutDlg)protected:viitualvoidDoDataExchange(CDataExchaiige*pDX);//DDX/DDVsupport//}}AFX__VIRTUAL//Implementationprotected://({AFX.MSG(CAboutDlg)〃}}AFX_MSGDECLARE_MESSAGE_MAP()vCAboutDlg::CAboutDlgO:CDialog(CAboutDlg::IDD)(//({AFX_DATA_INIT(CAboutDlg)〃}}AFX_DATA_INITivoidCAboutDlg::DoDataExchange(CDataExchange*pDX)(CDialog::DoDataExchange(pDX);//((AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAPiBEGIN_MESSAGE_MAP(CAboutDlg,CDialog)//{{AFX_MSG_MAP(CAboutDlg)//Nomessagehandlers〃}}AFX_MSG_MAPEND_MESSAGE_MAP()//CComproDlgdialogCComproDlg::CComproDlg(CWnd*pParent/*=NULL*/):CDialog(CComproDlg::IDD.pPaient)(//({AFX_DATA_INIT(CCompioDlg)//NOTE:tlieClassWizardwilladdmemberinitializationhere〃}}AFX_DATA_INIT//NotethatLoadicondoesnotrequiieasubsequentDestioylconinWin32liEmpty=CreateSeniaphore(NULL,10J0/EmptyH);liFull=CreateSemaphore(NULL.OJO;,Fuir,);liMutex=CreateMutex(NULL,1/Mutex11);ReleaseMutex(liMutex);buf_size=0;memset(buffer.OJ0);mjilcon=AfeGetApp()->LoadIcon(IDR_MAINFRAME);voidCComproDlg::DoDataExchange(CDataExchange*pDX)(CDialog::DoDataExchange(pDX);//((AFX_DATA_MAP(CCompioDlg)//NOTE:tlieClassWizardwilladdDDXandDDVcallshere//}}AFX_DATA_MAPiBEGIN_MESSAGE_MAP(CComproDlg,CDialog)//{{AFX_MSG_MAP(CComproDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_PRODUCER,OiiProducer)ON_BN_CLICKED(IDC_COMSUMER.OnComsumer)ON_WM_TIMER()〃}}AFX_MSG_MAPEND_MESSAGE_MAP()//CComproDlgmessagehandlersBOOLCComproDlg::OnIiiitDialog()(CDialog::OiiIiiitDialog();//AddHAbout...Mmenuitemtosystemmenu.//IDM_ABOUTBOXmustbemthesystemconuuandrange.ASSERT((IDM_ABOUTBOX&OxFFFO)=IDM.ABOUTBOX);ASSERT(IDM_ABOUTBOX<OxFOOO);CMenu*pSysMenu=GetSysteniNIenu(FALSE);if(pSysMenu!=NULL){CStimgstrAboutMenu;stiAboutMenu.LoadString(IDS_ABOUTBOX);if(?strAboutMenu.IsEmptyO)pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRINQIDM_ABOUTBOX.stiAboutMenu);}//Settheiconforthisdialog.Thefiameworkdoesthisautomatically//whentheapplication'smainwindowisnotadialogSetlcon(m_hlcon,TRUE);//SetbigiconSetlcon(m_hlcon.FALSE);//SetsmalliconCDC*pDC=GetDC();show(pDC);//TODO:AddextraniitializationhereletuinTRUE;//returnTRUEunlessyousetthefocustoacontiolivoidCComproDlg::OnSysConuuand(UINTnID,LPARAMIPaiam)(if((nID&OxFFFO)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModalQ;}else{CDialog::OnSysConunaiid(nID,IParam);}1//Ifyouaddaniiiiunizebuttontoyourdialog,youwillneedtliecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument-viewmodeL//thisisautomaticallydoneforyoubythefiamework.voidCComproDlg::OiiPaint()(if(Islconic()){CPaintDCdc(tliis);//devicecontextfbrpaintingSendMessage(WM_ICONERASEBKGND.(WPARAM)dc.GetSafeHdc(),0);//Centericoninclientrectangleintcxlcon=GetSysteinMetiics(SM_CXICON);intcylcon=GetSysteinMetiics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(lect.WidthQ-cxlcon+1)/2;inty=(rect.Height()-cylcon+1)/2;//Drawtheicondc.DrawIcon(x,y;mjilcon);}else{CDialog::OnPamt();}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theniiiimiizedwindow.HCURSORCComproDlg::OnQueryDiagIconQ(retuin(HCURSOR)mjilcon;voidCCompioDlg::OiiPioducer()(//TODO:AddyourcontrolnotificationhandlercodehereCDC*pDC=this->GetDC();HANDLEhThiead=CieateTluead(NULL.O,Pioducei;(LPVOID)pDC.O,NULL);CloseHandle(hTluead);voidCComproDlg::OnConisumei()(//TODO:AddyourcontrolnotificationhandlercodehereCDC*pDC=this->GetDC();HANDLEhThiead=CieateTluead(NULL.O,Comsumei;(LPVOID)pDC,O.NULL);CloseHandle(hTluead);DWORDWINAPICCompioDlg::Producer(LPVOIDpDC)(WaitForSmgleObject(liEmpty,INFINITE);WaitFoiSiiigleObject(liMutex,INFINITE);buffer[buf_size]-s,;buf_size+=l;Sleep(3000);show((CDC*)pDC);ReleaseSemaphore(liFulL1,NULL);ReleaseMutex(liMutex);return0;DWORDWINAPICCompioDlg::Conisumer(LPVOIDpDC)(WaitFoiSiiigleObject(liFull.INFINITE);WaitFoiSiiigleObject(liMutex,INFINITE);buffer[buf_size]=O;buf_size-=l;Sleep(3000);show((CDC*)pDC);ReleaseSemaphore(liEmpty,l.NULL);ReleaseMutex(liMutex);return0;}6參考文獻

溫馨提示

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

最新文檔

評論

0/150

提交評論