- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
燕山大学
操作系统课程设计报告
题目:多道程序缓冲区协调操作
班级:
课题负责人:
··组成员:
编译环境:vc++6.0
日期:2014年1月10日
多道程序缓冲区协调操作
1.概述
在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其它的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。如果不采取适当的措施,其它线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误的了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数据是经过写线程修改后的。为了确保读线程读取到的是经过修改的变量,就必须在向变量写入数据时禁止其他线程对其的任何访问,直至赋值过程结束后再解除对其他线程的访问限制。像这种保证线程能了解其他线程任务处理结束后的处理结果而采取的保护措施即为线程同步。
1.1设计目的
(1)了解提出信号量的背景
(2)掌握信号量的基本概念及PV操作的原理
(3)进一步熟悉信号量解决的经典问题
(4)利用信号量的原理实现不同操作系统下同步互斥问题
1.2设计要求
(1)可以随机产生字符数据,由put操作放入Buff1,buffer中容量单位是字符。
(2)提供良好图形界面,显示Buffer的操作过程。
(3)可以设定各Buffer的容量、PUT、GET、Move操作的个数;
(4)可以设定PUT、GET、Move操作的速度;
(5)实时显示每个Buffer中数据的个数和数据的内容,空闲Buffer的空间的个数;
(6)实时显示线程、进程所处于等待(阻塞)状态的个数
(7)程序运行结束,显示汇总数据:
总的运行时间;
Buffer中数据的个数;
已放入BUFFER的数据个数;
已取出的数据个数;
平均每个buffer中的数据个数。
1.3主要完成的任务
Put
Buffer1
Movel
Move2
Buffer2
Buffer3
Get2
Get3
图1
对该模型(图1)实例化,利用图形界面直观易懂的特点,把完全抽象的线程的就绪、阻止、运行的概念以及同步互斥的过程用图形动态的显示出来。
1.4环境、工具
VC++6.0,WINDOW7
2使用的基本概念和原理
2.1基本概念
信号量:为解决多进程线程同步与互斥问题,让两个或多个多道进程线程通过特殊的变量展开交互。
线程:是进程的一个实体,是进程上下文中执行的代码序列,是被系统调度的基本单元。进程:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源。
互斥与同步:进程的同步与互斥是指进程在推进时的相互制约关系。
进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。
进程互斥:它主要源于资源共享,是进程之间的间接制约关系。
2.2基本原理
本程序使用信号量作为同步互斥的工具,当然也可以用其它的,通过对BUFFER1、BUFFER2、BUFFER3的容量,还有控制权设置不同的信号量来协调PUT、GET2、GET3、MOVE1、MOVE2线程,使其同步来实现P、V操作。本程序并非真正的传输数据,只是对一个数据计数器加减来模拟数据的增加减少,被送来被取走,然后通过定时刷新,将线程的状态、数据显示到界面上。
3总体设计
3.1基本的技术路线
MFC中已实现有对线程操作和同步互斥的全部类,但是他对实现P、V操作的模拟不够直观;使用API面向过程的话,比较灵活,但程序的可读性、维护性较差。我们使用二
者的优点,取长补短,采用混合编程的方式对问题进行描述和演示。
3.2软件的总体结构、模块关系、总体流程
模拟系统
后台线程模块前台显示模块
后台线程模块
前台显示模块
中间数模块
中间数模块
图1总体结构
设置显示
设置
显示
显示模块数据层线程模块
显示模块
数据层
修改
图2模块关系
参数设置
开始
暂停
继续
停止
是
是否统计
否
结束进行统计
图3流程图
3.3线程规划
我们创建三类线程:
(1)PUT线程(往BUFFER1里放数据,相当于生产者)。
(2)MOVE1线程(从BUFFER1里取数据并放到BUFFER2里,相当于搬运者)。
MOVE2线程(从BUFFER1里取数据并放到BUFFER3里,相当于搬运者)。
(3)GET2线程(从BUFFER2里取数据,相当于消费者)
文档评论(0)