东北大学操作系统实验2
操作系统实验报告
实验名称
班 级 学 号 姓 名
实验二:
进程同步和通信——生产者和消费
者问题模拟
物联网1201班 20124052 李垠桥
一. 实验目的 这是一个验证型实验。通过对给出的程序进行验证、修改,进一步加深理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。通过补充新功能,加强对知识的灵活运用,培养创新能力。 二. 实验内容及要求 1. 实验内容 所给程序模拟两个进程,即生产者(producer)进程和消费者(Consumer)进程工作。生产者每次产生一个数据,送入缓冲区中。消费者每次从缓冲区中取走一个数据,如图1所示。
图形 1 程序模型
2. 实验要求 (1) 调试、运行给出的程序,从操作系统原理的角度验证程序的正确性。 (2) 发现并修改程序中的原理性错误或不完善的地方。 (3) 鼓励在程序中增加新的功能。完成基本。 (4) 在程序中适当地加入注释。 (5) 认真进行预习,阅读原程序,发现其中的原理性错误,完成预习报告。 (6) 实验完成后,要认真总结,完成实验报告。 三. 程序流程图
1. 窗口载入函数 (Form1_Load):
2. 更新等待队列显示的timer函数 (runningTimer_Tick)
3. 更新等待队列的timer函数(waitingQueueTimer_Tick)
START
Mutex等待队列非空 TRUE
FALSE
Mutex等待队列 显示框置空
FOR
TRUE显示Mutex等待队列 中的元素 FALSE
Full等待队列非空 TRUE
FALSE Full等待队列 显示框置空
FOR TRUE显示Full等待队列 中的元素 FALSE
Empty等待队列非空
FALSE
TRUE
Empty等待队 列显示框置空
FOR TRUE 显示Empty等待队列 中的元素 FALSE
END
注:由于程序较大,故只绘制核心功能的流程图。
四. 程序源代码、文档注释及文字说明 1. 程序语言:c# 2. 源代码: (1)设置界面
using System;
using System.Collections.Generic; using ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System.Threading.Tasks; using System.Windows.Forms;
namespace 生产者消费者问题 {
public partial class set : Form {
public static int bufferSize=0; public static int producerNum = 0; public static int consumerNum = 0; public set() {
InitializeComponent(); }
private void yesButton_Click(object sender, EventArgs e) { try {
bufferSize = int.Parse(bufferSizeTextbox.Text); producerNum = int.Parse(producerNumTextBox.Text); consumerNum = int.Parse(consumerNumTextBox.Text); } catch {
MessageBox.Show("ERROR:键入错误!"); Application.Exit(); }
if (producerNum + consumerNum <= 15) {
Form1 mainForm = new Form1(); this.Hide();
mainForm.Show(); } else {
MessageBox.Show("ERROR:最大支持的生产者消费者人数和为15!"); set set1 = new set(); set1.Show(); this.Hide(); } } } }
(2)运行界面
using System;
using System.Collections.Generic; using ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System.Threading.Tasks; using System.Windows.Forms; using System.Collections;
namespace 生产者消费者问题 {
public partial class Form1 : Form {
public static Queue waitingFQueue = new Queue(); public static Queue readyFQueue = new Queue(); public static Queue waitingEQueue = new Queue(); public static Queue readyEQueue = new Queue(); public static Queue waitingMQueue = new Queue(); public static Queue readyMQueue = new Queue(); public static int mutex = 1; public static int full; public static int empty; public static int bufferSize; public static bool[] bufferArray; public static int producerNum; public static int consumerNum; producerProgress[] producerArray; consumerProgress[] consumerArray; public static string resultChoice = "";
public const int progressMax = 15; public Form1() {
InitializeComponent(); }
public class progress {
public string name = "";
public bool runOrready = true;//是否处于运行或就绪 public int step = 1;//运行到第几步 public bool nextStep() {
step++; step=step%7; return true; }
public bool mP(ref int semaphore) {
semaphore--; if (semaphore < 0) {
waitingMQueue.Enqueue(this); runOrready = false; }
return true; }
public bool mV(ref int semaphore) {
semaphore++; if (semaphore <= 0) {
progress temp = (progress)waitingMQueue.Dequeue(); readyMQueue.Enqueue(temp); temp.runOrready = true; }
return true; }
public bool fP(ref int semaphore) {
semaphore--; if (semaphore < 0) {
waitingFQueue.Enqueue(this);
runOrready = false; }
return true; }
public bool fV(ref int semaphore) {
semaphore++; if (semaphore <= 0) {
progress temp = (progress)waitingFQueue.Dequeue(); readyFQueue.Enqueue(temp); temp.runOrready = true; }
return true; }
public bool eP(ref int semaphore) {
semaphore--; if (semaphore < 0) {
waitingEQueue.Enqueue(this); runOrready = false; }
return true; }
public bool eV(ref int semaphore) {
相关推荐:
- [资格考试]石油钻采专业设备项目可行性研究报告编
- [资格考试]2012-2013学年度第二学期麻风病防治知
- [资格考试]道路勘测设计 绪论
- [资格考试]控烟戒烟知识培训资料
- [资格考试]建设工程安全生产管理(三类人员安全员
- [资格考试]photoshop制作茶叶包装盒步骤平面效果
- [资格考试]授课进度计划表封面(09-10下施工)
- [资格考试]麦肯锡卓越工作方法读后感
- [资格考试]2007年广西区农村信用社招聘考试试题
- [资格考试]软件实施工程师笔试题
- [资格考试]2014年初三数学复习专练第一章 数与式(
- [资格考试]中国糯玉米汁饮料市场发展概况及投资战
- [资格考试]塑钢门窗安装((专项方案)15)
- [资格考试]初中数学答题卡模板2
- [资格考试]2015-2020年中国效率手册行业市场调查
- [资格考试]华北电力大学学习实践活动领导小组办公
- [资格考试]溃疡性结肠炎研究的新进展
- [资格考试]人教版高中语文1—5册(必修)背诵篇目名
- [资格考试]ISO9001-2018质量管理体系最新版标准
- [资格考试]论文之希尔顿酒店集团进入中国的战略研
- 全国中小学生转学申请表
- 《奇迹暖暖》17-支2文学少女小满(9)公
- 2019-2020学年八年级地理下册 第六章
- 2005年高考试题——英语(天津卷)
- 无纺布耐磨测试方法及标准
- 建筑工程施工劳动力安排计划
- (目录)中国中央空调行业市场深度调研分
- 中国期货价格期限结构模型实证分析
- AutoCAD 2016基础教程第2章 AutoCAD基
- 2014-2015学年西城初三期末数学试题及
- 机械加工工艺基础(完整版)
- 归因理论在管理中的应用[1]0
- 突破瓶颈 实现医院可持续发展
- 2014年南京师范大学商学院决策学招生目
- 现浇箱梁支架预压报告
- Excel_2010函数图表入门与实战
- 人教版新课标初中数学 13.1 轴对称 (
- Visual Basic 6.0程序设计教程电子教案
- 2010北京助理工程师考试复习《建筑施工
- 国外5大医疗互联网模式分析




