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

下载本文档

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

文档简介

1、进程创建和进程同步控制(API 函数) 班级:目录引入主要任务总体设计具体设计操作过程总结进程的引入 程序(Program)是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。 也就是说,用程序这个静态的实体不能反映程序在并发执行 过 程 的 这 些 动 态 特 征 。 于 是 , 人 们 引 入 “ 进 程(Process)“这一概念来描述程序动态执行过程的性质。 进程是应用程序的执行实例,是操作系统分配资源单位。进程最根本的属性是动态性和并发性。 每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系

2、统资源在进程终止时被释放。线程的引入 由于每创建一个进程需要申请许多的系统资源,比如内存空间分配,PCB的分配等,这样就会造成一些不必要的浪费,而线程不需要任何系统资源,它与所属的进程共享系统资源,并且线程之间的切换速度快,提高了程序运行的效率,所以引入了线程的概念。 线程是操作系统分配处理器的最基本单元,它是操作系统用来调度执行的最小单位。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 主要任务1、利用图形界面直观易懂的特点,把完全抽象的线程的就绪、阻塞(等待)、执行的状态以及同步互斥的过程用图形动态的显示出来。2、用信号量和事件作为线程之间的同步互斥工具,通过

3、对设置BUFFER1、BUFFER2的容量,来协调PUT、GET、MOVE这三个线程,使其同步来实现P、V操作,并说明每个信号量的含义、初值和值的范围。3、设计的程序并非真正的传输数据,只是对一个数据计数器加减来模拟数据的增加减少,然后通过定时刷新,将线程的状态、数据显示到界面上。总体设计利用信号量机制来解决生产者消费者问题,利用互斥信号量mutex实现进程对缓冲池的互斥使用。对 信 号 量 的 操 作 通 过 两 个 原 子 操 作 : W a i t ( s ) 和Signal(s).Wait(s)是等待信号的操作,进行S=S-1操作;Signal(s)是发送信号的操作,进行S=S+1操作

4、。 wait 若s-1后仍大于或等于零,则进程继续执行;若s-1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度;若相加结果大于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度 互斥与同步互斥与同步:进程的同步与互斥进程的同步与互斥是指进程在推进时的是指进程在推进时的相互制约关系。相互制约关系。进程同步:它主要源于进程合作,是进程间共同完成一项任务时进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。直接发生相互作用的关系。 进程互斥:它主要源于资源共享,是进程之间的间接制约关系。进程互斥:它主要源于资源共享,

5、是进程之间的间接制约关系。协调操作设计的总体流程Buffer1Buffer2putmoveget具体设计3个Put操作 , 不断循环,向Buffer1送数据,1个Move操作,不断循环,将Buffer1的数据取到Buffer2,2个GET操作, 不断循环,从Buffer2中取数据。Buffer1容量3, Buffer2容量2, Put、 Move、 Get每次操作一个数据,为了在操作的过程中要保证数据不丢失,每个Buffer每次只能接受一个Put或一个Move或一个Get,多个操作不能同时操作同一Buffer(即需要互斥操作)。 信号量的设置 需要六个信号量:full1,empty1,butt

6、er1 full2,empty2,butter2各信号量含义及初值如下: full1表示buffer1是否有数据,初值为0;empty1表示buffer1是否有空间,初值为3; buffer1表示buffer1是否可操作,初值为1; full2表示buffer2是否有数据,初值为0; empty2表示buffer2是否有空间,初值为2; buffer2表示buffer2是否可操作,初值为1。程序函数概览 APIAPI函数,即函数,即Application Programming Application Programming InterfaceInterface,操作系统除了协调应用程序的执,

7、操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是一行、内存分配、系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗、描绘图形、使用周边设用程序达到开启视窗、描绘图形、使用周边设备的目的,由于这些函数服务的对象是应用程备的目的,由于这些函数服务的对象是应用程序,所以称为序,所以称为APIAPI函数。函数。 这些函数是这些函数是WINDOWSWINDOWS提供给应用程序与操作提供给应用程序与操作系统的接口,他们犹如系统的接口,他

8、们犹如“积木块积木块”一样,可以一样,可以搭建出各种界面丰富,功能灵活的应用程序。搭建出各种界面丰富,功能灵活的应用程序。/*定义头文件 */ #include #include #include #include #include #include #include/*定义头变量 */ sem_t 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; v

9、oid put(void *arg); void move(void *arg); void get(void *arg);sem_t声明信号量,本质是一个长整型的数/*mian函数 */ main(int argc, char *argv ) 声明局部变量 /pthread_t用于声明线程ID/*初始化信号量imutex为1*/ sem_init(&sem1,0,1);/*初始化信号量omutex为1*/*初始化信号量iFull为1*/*初始化信号量iEmpty为10*/*初始化信号量oFull为0*/*初始化信号量oEmpty为20*/函数sem_init()用来初始化一个信号量它的原型为

10、: extern int sem_init _P (sem_t *_sem, int _pshared, unsigned int _value);pshared参数控制着信号量的类型/*创建三个线程*/ /put线程 /move线程/get线程应用函数:pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数。头文件 #include函数声明int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);线

11、程ID/* put操作线程函数 */ void put(void *arg) /*信号量减一,P操作*/ p(empty) p(s) put 操作 /*信号量加一,V操作*/ v(full) v(s) 函数sem_post( sem_t *sem )用来增加信号量的值当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不再阻塞,选择机制同样是由线程的调度策略决定的。函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wai

12、t()的非阻塞版本,它直接将信号量sem的值减一。函数sem_destroy(sem_t *sem)用来释放信号量sem。 获得信号量sem的值,并保存到valp中int sem_getvalue(sem_t *sem, int *valp);/* move操作线程函数 */ void move(void *arg) /* move操作将数据取出inBuffer缓冲区 */ p(full) p(s)从inBuffer获取数据 v(empty) v(s) /* move操作将数据放入outBuffer缓冲区 */ p(empty) p(s) 放入outBuffer v(full) v(s) /*

13、 get操作线程函数 */ void get(void *arg) /*信号量减一,P操作*/ p(full) p(s) get 操作 /*信号量加一,V操作*/ v(empty) v(s) Buffer1Buffer2putmovegetBuffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程Buffer1 Buffer2putgetmove操作过程操作过程总结经过几天的讨论课准备,对

温馨提示

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

评论

0/150

提交评论