多道程序缓冲区协调操作操作系统设计

多道程序缓冲区协调操作操作系统设计

ID:40387417

大小:315.00 KB

页数:26页

时间:2019-08-01

多道程序缓冲区协调操作操作系统设计_第1页
多道程序缓冲区协调操作操作系统设计_第2页
多道程序缓冲区协调操作操作系统设计_第3页
多道程序缓冲区协调操作操作系统设计_第4页
多道程序缓冲区协调操作操作系统设计_第5页
资源描述:

《多道程序缓冲区协调操作操作系统设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、操作系统课程设计报告题目:多道程序缓冲区协调操作班级:课题负责人: 课题组成员:编译环境:vc++6.0日期:2014年1月10日多道程序缓冲区协调操作1.概述在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其它的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。如果不采取适当的措施,其它线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误的了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出

2、现问题。如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数据是经过写线程修改后的。为了确保读线程读取到的是经过修改的变量,就必须在向变量写入数据时禁止其他线程对其的任何访问,直至赋值过程结束后再解除对其他线程的访问限制。像这种保证线程能了解其他线程任务处理结束后的处理结果而采取的保护措施即为线程同步。1.1设计目的(1)了解提出信号量的背景(2)掌握信号量的基本概念及PV操作的原理(3)进一步熟悉信号量解决的经典问题(4)利用信号量的原理实现不同操作系统下同步互斥问题1.2设计要求(1)可以随机产生字符数据,

3、由put操作放入Buff1,buffer中容量单位是字符。(2)提供良好图形界面,显示Buffer的操作过程。(3)可以设定各Buffer的容量、PUT、GET、Move操作的个数;(4)可以设定PUT、GET、Move操作的速度;(5)实时显示每个Buffer中数据的个数和数据的内容,空闲Buffer的空间的个数;(6)实时显示线程、进程所处于等待(阻塞)状态的个数(7)程序运行结束,显示汇总数据:总的运行时间;Buffer中数据的个数;已放入BUFFER的数据个数;已取出的数据个数;平均每个buffer中的数据个数。1.3主要完成的任务P

4、utMove2Buffer1Buffer2Buffer3Get2Move1Get3图1对该模型(图1)实例化,利用图形界面直观易懂的特点,把完全抽象的线程的就绪、阻止、运行的概念以及同步互斥的过程用图形动态的显示出来。1.4环境、工具VC++6.0,WINDOW72使用的基本概念和原理2.1基本概念信号量:为解决多进程线程同步与互斥问题,让两个或多个多道进程线程通过特殊的变量展开交互。线程:是进程的一个实体,是进程上下文中执行的代码序列,是被系统调度的基本单元。进程:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源。互斥与

5、同步:进程的同步与互斥是指进程在推进时的相互制约关系。进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。进程互斥:它主要源于资源共享,是进程之间的间接制约关系。2.2基本原理本程序使用信号量作为同步互斥的工具,当然也可以用其它的,通过对BUFFER1、BUFFER2、BUFFER3的容量,还有控制权设置不同的信号量来协调PUT、GET2、GET3、MOVE1、MOVE2线程,使其同步来实现P、V操作。本程序并非真正的传输数据,只是对一个数据计数器加减来模拟数据的增加减少,被送来被取走,然后通过定时刷新,将线程的状

6、态、数据显示到界面上。3总体设计3.1基本的技术路线MFC中已实现有对线程操作和同步互斥的全部类,但是他对实现P、V操作的模拟不够直观;使用API面向过程的话,比较灵活,但程序的可读性、维护性较差。我们使用二者的优点,取长补短,采用混合编程的方式对问题进行描述和演示。3.2软件的总体结构、模块关系、总体流程模拟系统前台显示模块中间数模块后台线程模块图1总体结构显示模块数据层线程模块设置设置显示修改图2模块关系参数设置开始暂停是否统计继续进行统计停止结束是否图3流程图3.3线程规划我们创建三类线程:(1)PUT线程(往BUFFER1里放数据,相

7、当于生产者)。(2)MOVE1线程(从BUFFER1里取数据并放到BUFFER2里,相当于搬运者)。MOVE2线程(从BUFFER1里取数据并放到BUFFER3里,相当于搬运者)。(3)GET2线程(从BUFFER2里取数据,相当于消费者)。GET3线程(从BUFFER3里取数据,相当于消费者)。每类线程可由用户自行设定线程的个数。4详细设计4.1设计思想设计了3个主要函数,分别为:生产者函数put,消费者函数get2、get3,转移函数move1、move2,下面详细介绍各个类的功能。Put函数用于实现通过执行P操作判断buffer1是否有

8、空,buffer1是否可操作,并向buffer1中置数据,同时将表示buffer1中数据数buffer1number加+1,放入数据后执行V操作。Move1函数通过

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。