讨论课缓冲池设计(1)_第1页
讨论课缓冲池设计(1)_第2页
讨论课缓冲池设计(1)_第3页
讨论课缓冲池设计(1)_第4页
讨论课缓冲池设计(1)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、燕山大学讨论课研究报告课程名称:计算机操作系统 主题:操作系统作用 题目:缓冲池的设计 小组名称:3组 2015年10月9日引言:计算机操作系统是计算机系统中最不可缺少的、最常用的软件,也是核心的、最接近于计算机硬件的软件,是计算机专业及其相关专业的主要的基础课程之一,其内容综合了各种操作系统的结构、设计思想、方法、技术和理论,其特点是内容繁多、概念抽象。通过此次讨论课,我们组的同学加深了对操作系统中对软硬件管理的基础知识、基本原理的理解和实践能力的培养,并在沟通能力、团队合作能力等方面得到锻炼。1. 引入1.1进程的引入 程序(Program)是一组指令的有序集合,它本身没有任何运行的含义,

2、它只是一个静态的实体。 也就是说,用程序这个静态的实体不能反映程序在并发执行过程的这些动态特征。于是,人们引入“进程(Process)“这一概念来描述程序动态执行过程的性质。 进程是应用程序的执行实例,是操作系统分配资源单位。进程最根本的属性是动态性和并发性。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放。1.2线程的引入 由于每创建一个进程需要申请许多的系统资源,比如内存空间分配,PCB的分配等,这样就会造成一些不必要的浪费,而线程不需要任何系统资源,它与所属的进程共享系统资源,并且线程之

3、间的切换速度快,提高了程序运行的效率,所以引入了线程的概念。 线程是操作系统分配处理器的最基本单元,它是操作系统用来调度执行的最小单位。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。2. 主要任务2.1用图形表示线程 利用图形界面直观易懂的特点,把完全抽象的线程的就绪、阻塞(等待)、执行的状态以及同步互斥的过程用图形动态的显示出来。2.2通过信号量实现P、V操作 用信号量和事件作为线程之间的同步互斥工具,通过对设置BUFFER1、BUFFER2的容量,来协调PUT、GET、MOVE这三个线程,使其同步来实现P、V操作,并说明每个信号量的含义、初值和值的范围。2.3定

4、时刷新显示线程的状态与数据 设计的程序并非真正的传输数据,只是对一个数据计数器加减来模拟数据的增加减少,然后通过定时刷新,将线程的状态、数据显示到界面上。3. 总体设计 利用信号量机制来解决生产者消费者问题,利用互斥信号量mutex实现进程对缓冲池的互斥使用(互斥与同步:进程的同步与互斥是指进程在推进时的相互制约关系)。 对信号量的操作通过两个原子操作:Wait(s)和Signal(s)。Wait(s)是等待信号的操作,进行S=S-1操作;Signal(s)是发送信号的操作,进行S=S+1操作。若s-1后仍大于或等于零,则进程继续执行;若s-1后小于零,则该进程被阻塞后进入与该信号相对应的队列

5、中,然后转进程调度;若相加结果大于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。 进程互斥:它主要源于资源共享,是进程之间的间接制约关系。 图1:协调操作设计的总体流程图4. 具体设计4.1整体思路 3个Put操作,不断循环,向Buffer1送数据; 一个Move操作,不断循环,将Buffer1的数据取到Buffer2; 2个GET操作,不断循环,从Buffer2中取数据。Buffer1容量3,Buffer2容量2,Put、Move、Get每次操作一个数

6、据,为了在操作的过程中要保证数据不丢失,每个Buffer每次只能接受一个Put或一个Move或一个Get,多个操作不能同时操作同一Buffer(即需要互斥操作)。4.2信号量的设置需要六个信号量:full1,empty1,butter1 full2,empty2,butter2各信号量含义及初值如下: full1表示buffer1是否有数据,初值为0;empty1表示buffer1是否有空间,初值为3; buffer1表示buffer1是否可操作,初值为1; full2表示buffer2是否有数据,初值为0; empty2表示buffer2是否有空间,初

7、值为2; buffer2表示buffer2是否可操作,初值为1。4.3信号量的范围butter1的取值范围为-31;butter2的取值范围为-214.4程序函数概览 API函数,即Application Programming Interface,操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗、描绘图形、使用周边设备的目的,由于这些函数服务的对象是应用程序,所以称为API函数。这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建

8、出各种界面丰富,功能灵活的应用程序。4.5程序代码定义头文件  #include <stdio.h>#include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <errno.h> #include <sys/ipc.h> #include <semaphore.h>定义头变量sem_t 

9、;iFull,iEmpty; sem_t oFull,oEmpty; int iIn=0,iOut=0,oIn=0,oOut=0; sem_t  sem1,sem2; char inBuffer10; char outBuffer20;/数组实现缓冲区 int data1,data2,data3; void put(void *arg); void move(void *arg); void get(voi

10、d *arg);mian函数 main(int argc, char *argv )  /pthread_t用于声明线程ID/*初始化信号量imutex为1*/*初始化信号量omutex为1*/*初始化信号量iFull为1*/*初始化信号量iEmpty为10*/*初始化信号量oFull为0*/*初始化信号量oEmpty为20*/*创建三个线程*/ /move线程 /put线程 /get线程put操作线程函数void put(void *arg)  /*信号量减一,P操作*/*信号量加一,V操作*/move操作线程函数 void move(void *arg)  /* move操作将数据取出 inBuffer缓冲区 */ /* move操作将数据放入 outBuffer缓冲区 */get操作线程函数 void get(void *arg) 5. 操作过程 6. 总结 经过几天的讨论课准备,对进程的同步和互斥技术有了比较深刻的了解,生产者消费者问题是研究多线程程序时绕不开的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论