东北大学软件学院 操作系统实验一 实验报告
操作系统实验一
实验报告
姓 名 李旦兰 学 号
20083308
班 级 软件0802 指 导 教 师
那俊
实 验 名 称
进程的同步与互斥
开 设 学 期 2010 – 2011第一学期
评 定 成 绩
评定人签 字
评 定 日 期
东北大学软件学院
2010年10月
东北大学软件学院 操作系统实验一 实验报告
一.实验目的
加深对进程概念的理解,明确进程和程序的区别。
进一步认识并发执行的实质。
分析进程竞争资源现象,学习解决进程互斥的方法。
了解对进程管理的支持。
二.实验内容以及要求
实验内容
以生产者消费者模型为基础,在环境下创建一个控制台进程,在
该进程中创建读者写者线程模拟生产者和消费者。写者线程写入数据,然后将数
据放置在一个空缓冲区中供读者线程读取。读者线程从缓冲区中获得数据,然后
释放缓冲区。当写者线程写入数据时,如果没有空缓冲区可用,那么写者线程必
须等待读者线程释放出一个空缓冲区。当读者线程读取数据时,如果没有满的缓
冲区,那么读入线程将被阻塞,直到新的数据被写进去。
实验要求
通过进程和线程创建方法实现一个简单的读者,写者程序,读者
将十个数字依次填入临界资源区,当且仅当被读者消费后,
写者才可以写入下一个数。
读者写者问题的读写操作限制
写写互斥,即不能有两个写者同时进行写操作。
读写互斥,即不能同时有一个线程在读,而另一个线程在写。,
读读允许,即可以有一个或多个读者在读。
三.实验环境
操作系统:
开发语言:
开发工具: !"#$%"
四.设计思想
本实验通过一个有界缓冲区(用数组来实现,类似循环队列)把读者和写者
联系起来,假定读者和写者的优先级是相同的,只要缓冲区未满,写者就可以写
入数据并将数据送入缓冲区。类似的,只要缓冲区未空,读者就可以从缓冲区中
去读取数据。应该禁止写者向满的缓冲区送入数据,同时也应该禁止读者从空的
缓冲区中读取数据,这一机制有读者线程和写者线程之间的互斥关系来实现,与
计算机打印两进程同步关系相同,读者和写者两类进程之间应满足下列两个同步
条件:
,只有在缓冲池中至少有一个缓冲区已存入消息后,读者才能从中读取数据,
否则读者必须等待;
东北大学软件学院 操作系统实验一 实验报告
。只有缓冲池中至少有一个缓冲区是空时,写者才能把消息放入缓冲区,否则
写者必须等待。
为了满足第一个同步条件,设置一个同步信号量& ,它代表的资源是缓冲
区满。这个资源是写者类进程所拥有,同样为了满足第二个同步条件,设置另一
个同步信号量"'$(,它代表的资源是空缓冲区数量,设置整型变量:存入指
针和取出指针。
为解决读者写者问题,应该设置两个资源信号量,其中一个表示缓冲区中数
据 的数目,用 ) * & +% ' $ * %表 示, 其 初 始 值 为 有 界 缓 冲 区 的大 小
,%))-.%,另一个表示缓冲区中数据的数目,用)*"'$(+%'$*%
表示,其初始值为。另外,由于有界缓冲区是一个临界资源,必须互斥使用,
所以还需要再设置一个互斥信号量)*%#。
在写者读者问题中,信号量实现两种功能。首先,它是写入数据和读取数据
的计数器,计数器的初始值是可利用的资源数目(有界缓冲区的长度)。其次,
它是确保数据的写入和读入之间动作同步的同步器。写者要写入一个数据时,首
先对资源信号量)*& +%'$*%和互斥信号量)*%#进行写入操作,申
请资源。如果可以通过的话就写入一个数据,并把产品送入缓冲区。然后对
)*"'$(+%'$*%信号量进行读取操作,释放资源。读者读取数据过程与
写入过程类似。
五.实验系统结构
实验算法流程图
输入数据
否
是
是 否 写者写入数据后被唤醒
创建写者线程
缓冲区
是 否 阻
塞
写者等待,读
者读取数据
缓 冲 区
是 否 为
空
读者阻塞
创建读者线程
- 1
- 2
- 3
- 4
前往页