计算机操作系统实验报告

时间:2024-04-10 点赞:46856 浏览:91605 作者原创标记本站原创

本文是一篇生产者论文范文,生产者类毕业论文提纲,关于计算机操作系统实验报告相关在职毕业论文范文。适合生产者及缓冲区及消费者方面的的大学硕士和本科毕业论文以及生产者相关开题报告范文和职称论文写作参考文献资料下载。

计算机操作系统实验报告

学院:信息科学与工程学院

班级:计科0501班

学号:0902050121

姓名:熊清亮

指导老师:胡小龙

2016.6.18

目录

一、实验目的2

二、实验内容2

三、开发环境2

四、分析设计2

1,实验要求2

2,设计原理3

3,涉及到的类5

4,流程图6

五、结果及分析8

1,运行示例8

2,结果分析9

六、心得体会9

七、参考文献10

实现生产者与消费者问题

实验目的

在生产者与消费者问题在同一个进程地址空间内执行的两个线程.生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费.消费者线程从缓冲区中获得物品,然后释放缓冲区.当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区.当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来MicrosoftVisualC++6.0环境下的一个关于实现生产者与消费者问题的程序.用C++语言实现编程.

分析设计

1,实验要求

生产者与消费者问题经典进程同步问题的典型代表基于单缓冲区和多缓冲区的生产者与消费者问题多种实现机制,其中利用了数据结构中的循环队列和堆栈来模拟实现这种想帮助更好的理解所学内容锻炼的动手实践能力,强的参考价值和实践意义-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制.计算机系统中的每个进程都可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者.而当某个进程释放资源时,则它就相当一个生产者. 通过一个有界缓冲区把生产者和消费者联系起来.假定生产者和消费者是相互等效的,只要缓冲区未满,生产者就可以将产品送入缓冲区,类似地,只要缓冲区未空,消费者就可以从缓冲区中去走物品并消费它.生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品. 在生产者—消费者问题中,信号灯具有两种功能.首先,它是跟踪资源的生产和消费的计数器,其次,它是协调资源的生产者和消费者之间的同步器.消费者通过再一指派给它的信号灯上做P操作来表示消耗资源,而生产者通过在同一信号灯上做V操作来表示生产资源.再这种信号灯的实施中,计数在每次P操作后减1,而在每次V操作中加1.个这一计数器的初始值是可利用的资源数目.当资源是不可利用时,将申请资源的进程放置在等待队列中.如果有一个资源释放,在等待队列中的第一个进程被唤醒并得到资源的控制权. 为解决这一类生产者——消费者问题,设置两个同步信号灯,一个说明空缓冲区的数目,用empty表示,其初值为有界缓冲区的大小n,另一个说明缓冲区的数目,用full表示,其初制值为0.由于有界缓冲区是一个零界资源,必须互斥使用,所以另外还需设置一个互斥信号灯mutex,起初值为1. 等等

inout

12345678n

等等

inout

其中,in表示存数据位置,out表示取数据位置

::被占用单元:空存储单元

图生产者/消费者循环使用缓冲区

首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定.这显然是不允许的.所以,必须使生产者和消费者互斥进入缓冲区.即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者.

其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据,即生产者与消费者必须同步.当生产者产生出数据,需要将其存入缓冲区之前,首先检查缓冲区中是否有"空"存储单元,若缓冲区存储单元全部用完,则生产者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它.若缓冲区内有"空"存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释放缓冲区的使用权.消费者取数据之前,首先检查缓冲区中是否存在装有数据的存储单元,若缓冲区为"空",则阻塞等待,否则,判断缓冲区是否正在被使用,若正被使用,若正被使用,则阻塞等待,否则,获得缓冲区的使用权,进入缓冲区取数据,释放缓冲区的使用权.其执行流程如图所示,伪代码如图所示.

3,涉及到的类

classCProducerThread:publicCWinThread

{

DECLARE_DYNCREATE(CProducerThread)

protected:

CProducerThread(),//protectedconstructorusedbydynamiccreation

//Attributes

public:

CProducerThread(void*pParent,CStringname),

void*m_Parent,

CStringm_name,

//Operations

public:

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CProducerThread)

public:

virtualBOOLInitInstance(),

virtualintExitInstance(),

virtualintRun(),

//}}AFX_VIRTUAL

//Implementation

protected:

virtual~CProducerThread(),

//Generatedmessagemapfunctions

//{{AFX_MSG(CProducerThread)

//NOTE-theClassWizardwilladdandremovememberfunctionshere.

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

},

classCConsumerThread:publicCWinThread

{

DECLARE_DYNCREATE(CConsumerThread)

protected:

CConsumerThread(),//protectedconstructorusedbydynamiccreation

//Attributes

public:

public:

CConsumerThread(void*pParent,CStringname),

void*m_Parent,

CStringm_name,

//Operations

public:

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CConsumerThread)

public:

virtualBOOLInitInstance(),

virtualintExitInstance(),

virtualintRun(),

//}}AFX_VIRTUAL

//Implementation

protected:

virtual~CConsumerThread(),

//Generatedmessagemapfunctions

//{{AFX_MSG(CConsumerThread)

//NOTE-theClassWizardwilladdandremovememberfunctionshere.

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

},

4,流程图

图1生产者流程图

图2消费者流程图

结果及分析

1,运行示例

图3运行程序

图4启动生产者

图5启动消费者

2,结果分析

此程序可自动输入生产者,消费者数目等条件,但程序执行过程中也进入了一种无限循环状态,采用GDI作图将生产和消费的关系很好的表现出来.


心得体会

做实验之前虽然好多细节部分还不是太了解,但是对一个进程的流向和执行过程还是有个大概的认识,所以这个实验做起来也不是那么的困难.关于该算法的详细说明和实现在我们的教材上没有讲解.需要自己在网上和图书馆大量的找资料,先对那些算法有一个大致全面的了解.然后开始对那个算法的代码进行完善和修改,以达到自己的要求.经过几次实验的调试和运行终于达到了我的期望.

在编写程序的时候要尽可能用全所学到的函数,因为这是检测我们用C语言进行程序设计的能力的重要方式.在编写程序的时候我们不可能一次就成功,往往一个图形要修改甚至是十几次数据才能得到预期的结果.因此在编写程序的时候一定不能急,要耐心地检测输入的数据和输出的结果,在没达到预期目的的情况下,要及时修改数据进行下一次的检测,只有这样才能成功地用C语言编写出需要的程序操作系统实现与设计

中南大学操作系统实验计科0501班

1

等待使用权,阻塞

被唤醒

等待资源,阻塞

数据单元加1,唤醒一个消费者

归还使用权

存入一条数据

生产一条数据

是否可用

存储单元

是否可用

被唤醒

是否有数据单元

等待资源,阻塞

被唤醒

是否可用

消费数据

空单元加1,唤醒一个生产者

归还使用权

被唤醒

取走一条数据

等待使用权,阻塞

相关论文

计算机学院本科生实验报告

本文是一篇计算机论文范文,计算机相关大学毕业论文,关于计算机学院本科生实验报告相关学年毕业论文范文。适合计算机及游戏及参考文献方面的。

计算机网络课程设计实验报告

本文是一篇计算机论文范文,计算机有关毕业论文格式范文,关于计算机网络课程设计实验报告相关电大毕业论文范文。适合计算机及课程及学科教学。

计算机专业开题报告样文

本文是一篇数据库论文范文,数据库方面有关本科毕业论文,关于计算机专业开题报告样文相关学士学位论文范文。适合数据库及计算机及管理系统方。

计算机操作系统的功能、分类

本文是一篇操作系统论文范文,操作系统有关本科毕业论文,关于计算机操作系统的功能、分类相关毕业论文的格式范文。适合操作系统及计算机及计。

如何构建计算机开放实验机制

关于计算机及实验教学及管理系统方面的免费优秀学术论文范文,计算机方面计算机专业大学生毕业论文,关于如何构建计算机开放实验机制相关论。

高职计算机网络实验教学

本论文是一篇计算机网络方面有关计算机网络技术及应用论文,关于高职计算机网络实验教学相关毕业论文参考文献格式范文。免费优秀的关于计算。

计算机专业开题报告

本文是一篇管理系统论文范文,关于管理系统大学毕业论文,关于计算机专业开题报告相关本科论文范文。适合管理系统及会计师及数据库方面的的大。