操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx

上传人:b****5 文档编号:11983314 上传时间:2023-04-16 格式:DOCX 页数:14 大小:85.15KB
下载 相关 举报
操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx_第1页
第1页 / 共14页
操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx_第2页
第2页 / 共14页
操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx_第3页
第3页 / 共14页
操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx_第4页
第4页 / 共14页
操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx

《操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx(14页珍藏版)》请在冰豆网上搜索。

操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛.docx

操作系统课程设计进程同步模拟设计生产者和消费者问题0905林琪琛

学号:

0120910680527

课程设计

 

题目

进程同步模拟设计

——生产者和消费者问题

学院

计算机科学与技术学院

专业

软件工程

班级

0905

姓名

林琪琛

指导教师

刘军

 

2011

12

25

课程设计任务书

学生姓名:

林琪琛专业班级:

软件0905

指导教师:

刘军工作单位:

计算机科学与技术学院

题目:

进程同步模拟设计——生产者和消费者问题

初始条件:

1.预备内容:

阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。

2.实践准备:

掌握一种计算机高级语言的使用。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.模拟用信号量机制实现生产者和消费者问题。

2.设计报告内容应说明:

⑴需求分析;

⑵功能设计(数据结构及模块说明);

⑶开发平台及源程序的主要部分;

⑷测试用例,运行结果与运行情况分析;

⑸自我评价与总结:

)你认为你完成的设计哪些地方做得比较好或比较出色;

)什么地方做得不太好,以后如何改正;

)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);

)完成本题是否有其他方法(如果有,简要说明该方法);

时间安排:

设计安排一周:

周1、周2:

完成程序分析及设计。

周2、周3:

完成程序调试及测试。

周4、周5:

验收、撰写课程设计报告。

(注意事项:

严禁抄袭,一旦发现,一律按0分记)

 

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

进程同步模拟设计

——生产者和消费者问题

1课设任务

本课程设计的任务在于,通过编写一个具体的有关操作系统进程同步互斥的经典问题,加强对操作系统实现进程间同步与互斥的机制的理解。

同时培养提出问题、发现知识、使用工具、解决问题的能力。

2“生产者—消费者”问题

问题描述:

一组生产者向一组消费者提供消息,它们共享一个有界缓冲区n,生产者向其中投放消息,消费者从中取得消息。

规则:

◆对于生产者进程:

产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待;

◆对于消费者进程:

当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进程,否则,等待。

◆缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,所以,还有个互斥的问题。

问题分析:

该问题涉及到操作系统进程管理当中的两个重要概念——同步和互斥。

同步,表现在生产者和消费者需要协同工作,步调不能拉开太大(由缓冲区大小n决定,n越大,缓冲空间越大,步调可以拉得越开;n=1时,必须是生产一个,消费一个,生产者和消费者就完全同步了)。

当步调差距超过极限时,走在前面的当前进程(生产者)调用P原语时由于资源耗尽,被阻塞;步调靠后的继续向前推进。

由此实现同步。

互斥,表现在生产者与消费者、生产者与生产者、消费者与消费者任何两个成员之间必须互斥地使用缓冲区。

当有一个成员进入缓冲区存/取产品时,其他成员将被关在门外排队等候(被阻塞);当完毕时,通知队首成员进入。

由操作系统理论可知,我们需要三个信号量,分别命名full,empty,mutex,来分别代表消费者的可用资源数、生产者的可用资源数、缓冲区是否可用。

初值:

full=0(消费者无资源可用),empty=N(生产者有N个资源可用,N代表缓冲区大小),mutex=1(缓冲区可用)。

3程序流程图:

4程序运行截图

5程序源代码

//comproDlg.cpp:

implementationfile

//

#include"stdafx.h"

#include"compro.h"

#include"comproDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

//GlobalVariable

charbuffer[10];

intbuf_size;

HANDLEhFull;

HANDLEhEmpty;

HANDLEhMutex;

voidshow(CDC*pDC)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CBrushbrush(RGB(100,250,100));

pDC->Rectangle(150,20,300,320);

pDC->SelectObject(brush);

pDC->Rectangle(150,320-30*buf_size,300,320);

}

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CComproDlgdialog

CComproDlg:

:

CComproDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CComproDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CComproDlg)

//NOTE:

theClassWizardwilladdmemberinitializationhere

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

hEmpty=CreateSemaphore(NULL,10,10,"Empty");

hFull=CreateSemaphore(NULL,0,10,"Full");

hMutex=CreateMutex(NULL,1,"Mutex");

ReleaseMutex(hMutex);

buf_size=0;

memset(buffer,0,10);

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCComproDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CComproDlg)

//NOTE:

theClassWizardwilladdDDXandDDVcallshere

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CComproDlg,CDialog)

//{{AFX_MSG_MAP(CComproDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_PRODUCER,OnProducer)

ON_BN_CLICKED(IDC_COMSUMER,OnComsumer)

ON_WM_TIMER()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CComproDlgmessagehandlers

BOOLCComproDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

CDC*pDC=GetDC();

show(pDC);

//TODO:

Addextrainitializationhere

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCComproDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCComproDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCComproDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCComproDlg:

:

OnProducer()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CDC*pDC=this->GetDC();

HANDLEhThread=CreateThread(NULL,0,Producer,(LPVOID)pDC,0,NULL);

CloseHandle(hThread);

}

voidCComproDlg:

:

OnComsumer()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CDC*pDC=this->GetDC();

HANDLEhThread=CreateThread(NULL,0,Comsumer,(LPVOID)pDC,0,NULL);

CloseHandle(hThread);

}

DWORDWINAPICComproDlg:

:

Producer(LPVOIDpDC)

{

WaitForSingleObject(hEmpty,INFINITE);

WaitForSingleObject(hMutex,INFINITE);

buffer[buf_size]='s';

buf_size+=1;

Sleep(3000);

show((CDC*)pDC);

ReleaseSemaphore(hFull,1,NULL);

ReleaseMutex(hMutex);

return0;

}

DWORDWINAPICComproDlg:

:

Comsumer(LPVOIDpDC)

{

WaitForSingleObject(hFull,INFINITE);

WaitForSingleObject(hMutex,INFINITE);

buffer[buf_size]=0;

buf_size-=1;

Sleep(3000);

show((CDC*)pDC);

ReleaseSemaphore(hEmpty,1,NULL);

ReleaseMutex(hMutex);

return0;

}

6参考文献

【1】汤子瀛等.计算机操作系统.西安电子科技大学出版社.2007年2月

【2】张尧学等编著,计算机操作系统教程,清华出版社。

2002.2

【3】严蔚敏,吴伟民编著,数据结构,清华大学出版社。

2002

【4】陈向群编著,操作系统教程,北京大学出版社,2001.07

【5】郑莉等编著,C++语言设计。

北京:

清华大学出版社.2000

7个人小结

本次实验比较仓促,各门考试课程设计蜂拥而至,忙的焦头烂额,但是这段时间的忙碌让我学到了很多很多东西,尤其是做操作系统的课设,开始的时候一点头绪都没有,然后不停得看书看课件,问同学,上网查资料,然后是用VC代码实现,学到的东西不可谓不多,通过一个学期的操作系统学习,我越来越觉得计算机不是个什么神秘的东西,它只是个很复杂的机器,各种各样的机制算法让计算机实现它的功能,同时每个机制和算法都是有它的用途和方法的,我们学计算机的人,就是要掌握这些东西,会个C,会个VC,会弄几个小程序都不是我们学习目标,我觉得应该从深层去挖掘计算机,去了解计算机,这才是我们要做到的。

同时我也向老师认错,上课有好多次都没有认真听,现在有蛮多操作系统的知识都蛮模糊。

 

本科生课程设计成绩评定表

班级:

       姓名:

       学号:

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

10

6

设计验收

10

总得分/等级

评语:

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

 

                      指导教师签名:

                  20年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1