操作系统课程设计-进程同步模拟设计_第1页
操作系统课程设计-进程同步模拟设计_第2页
操作系统课程设计-进程同步模拟设计_第3页
操作系统课程设计-进程同步模拟设计_第4页
操作系统课程设计-进程同步模拟设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学号:0120910680527课程设计题目进程同步模拟设计一一生产者和消费者问题学院计算机科学与技木学院专业软件工程班级0905姓名林琪琛指导教师刘军2011年12月25日课程设计任务书学生姓名:林琪琛专业班级:软件0905指导教师:刘军工作单位:计算机科学与技术学院目:进程同步模拟设计一一生产者和消费者问题初始条件:预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)模拟用信号量机制实现生产者和消费者问题。设计报告内容应说明:(1)需求分析;(2)功能设计(数据结构及模块说明);(3)开发平台及源程序的主要部分:(4)测试用例,运行结果与运行情况分析:(5)自我评价与总结:I)你认为你完成的设计哪些地方做得比较好或比较出色:II)什么地方做得不太好,以后如何改正;in)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);IV)完成本题是否有其他方法(如果有,简要说明该方法):时间安排:设计安排一周:周1、周设计安排一周:周1、周2、周4、周3:完成程序调试及测试。周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:系主任(或责任教师)签名:年月曰年月曰进程同步模拟设计指导教师签名:系主任(或责任教师)签名:年月曰年月曰一一生产者和消费者问题1课设任务本课程设计的任务在于,通过编写一个具体的有关操作系统进程同步互斥的经典问题,加强对操作系统实现进程间同步与互斥的机制的理解。同时培养提出问题、发现知识、使用工具、解决问题的能力。2“生产者一消费者”问题问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲区a,生产者向其中投放消息,消费者从中取得消息。规则:♦对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否己满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待;♦对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进程,否则,等待。♦缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,所以,还有个互斥的问题。问题分析:该问题涉及到操作系统进程管理当中的两个重要概念一一同步和互斥。同步,表现在生产者和消费者需要协同工作,步调不能拉开太大(由缓冲区大小n决定,n越大,缓冲空间越大,步调可以拉得越开;n=l时,必须是生产一个,消费一个,生产者和消费者就完全同步了)。当步调差距超过极限时,走在前面的当前进程(生产者)调用P原语时由于资源耗尽,被阻塞;步调靠后的继续向前推进。由此实现同步。互斥,表现在生产者与消费者、生产者与生产者、消费者与消费者任何两个成员之间必须互斥地使用缓冲区。当有一个成员进入缓冲区存/取产品时,其他成员将被关在门外排队等候(被阻塞);当完毕时,通知队首成员进入。由操作系统理论可知,我们需要三个信号量,分别命名full,empty,mutex,来分别代表消费者的可用资源数、生产者的可用资源数、缓冲区是否可用。初值:(消费者无资源可用),empty-N(生产者有N个资源可用,N代表缓冲区大小),mutex=l(缓冲区可用)。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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论