题目3-读者与写者问题

合集下载

信号量的PV操作(例题]

信号量的PV操作(例题]

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:

司机的活动:启动车辆;

正常行车;

到站停车;

售票员的活动:

关车门;

售票;

开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;

操作系统实验-读者写者问题

操作系统实验-读者写者问题

《计算机操作系统》实验报告

题目读者写者问题

学院(部)信息学院

专业计算机科学与技术

班级

学生姓名

学号

指导教师(签字)

一、《

二、问题描述

一个数据文件或者记录,可以被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享对象,因为读操作不会是数据文件混乱。但不允许一个Writer进程和其他Reader进程或者Writer进程同时访问共享对象,因为这种访问将会引起混乱。所谓“读者——写着问题(Reader—Writer Problem)”是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题

三、解决问题

为实现Reader与Writer进程间在读或写是的互斥而设置了一个互斥的信号量Wmutex。另外,在设置一个整型变量Readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer去写。因此,仅当Readercount=0时,表示尚无Reader进程在读时,Reader进程才需要进行Wait(wmutex)操作。若Wait(Wmutex)操作成功,Reader 进程便可去读,相应地,做Readcount+1操作。同理,仅当Reader进程在执行了Readercount-1操作后其值为0时,才执行Signal(Wmutex)操作,以便让Writer进程写。又因为Readercount是一个可被多个Reader 进程访问的临界资源,因此也应该为它设置一个互斥信号量rmutex。四、代码实现

信号量的PV操作(例题)汇总

信号量的PV操作(例题)汇总

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:

司机的活动:启动车辆;

正常行车;

到站停车;

售票员的活动:

关车门;

售票;

开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;

操作系统同步互斥练习题

操作系统同步互斥练习题

操作系统同步试题

1、设公共汽车上,司机和售票员的活动分别是:

司机的活动:启动车辆;

正常行车;

到站停车;

售票员的活动:

关车门;

售票;

开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;

司机:L1:正常行车售票员:L2:售票

到站停车P(S)

V(S)开车门

P(C)关车门

启动开车V(C)

GO TO L1 GO TO L2

2、桌子上有一个空盘子,允许存放一只水果,爸爸可以向盘中放苹果,妈妈向盘子中放橘子,女儿专门吃盘子中的苹果,儿子专门吃盘子中的橘子。规定当盘子空的时候一次只能放一只水果,请用信号量实现他们之间的同步与互斥。

S, S1, S2 :semaphore=1,0,0;

Cobegin:

Process Father:

Begin:

L1: P(S);

Put Apple;

V(S1);

GO TO L1;

End;

Process Mother:

Begin:

L2: P(S);

Put Orange;

V(S2);

GO TO L2;

End;

Process Son:

Begin:

L3: P(S2);

Get Orange;

V(S);

GO TO L1;

End;

Process Daughter:

Begin:

L4: P(S1);

Get Apple;

V(S);

GO TO L4;

End;

CoEnd;

2、写者优先的“读者――写者”问题:

1)共享读

2)互斥写、读写互斥

3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

操作系统复习题答案

操作系统复习题答案

1、在设备管理中,数据传送控制方式有哪几种?试比较它们各自的优缺点。

1、程序控制输入/输出方式。控制相对简单,不需要硬件支持,CPU和I/O设备串行工作,适用于CPU执行速度较慢且外设较少的设备。

2、中断输人/输出方式。能实现CPU和I/O设备及I/O设备间的并行,中断次数过多,数据容易丢失,适用于中断次数少且外设较少的设备。

3、直接存储器方式DMA方式。能实现CPU和I/O设备间的并行,设备和主存之间可以直接成批传送数据,大大减少了CPU干预,需要存储器硬件支持。

4、通道控制方式。CPU权利下放,干预更少,提高了系统资源利用率,需要硬件支持。

2、文件的物理组织结构常见的有几种?它们与文件的存取方式有什么关系?

⑴、顺序结构(又称连续结构):是顺序存取时速度较快;当文件是定长记录文件时,还可根据文件起始地址及记录长度进行随机访问。

⑵、链接(又称串联)结构:链接文件只能按照文件的指针链顺序访问,因而查找效率较低。

⑶、索引结构:是可以进行随机访问,也易于进行文件的增删。

3、文件存储空间管理的方法有哪些?它们的优缺点?

①、空闲文件目录:

⑴、如果文件太大,那么在空白文件目录中将没有合适的空白文件能分配给它,尽管这些空白文件的总和能满足需求。

⑵、经过多次分配和回收,空白文件目录中的小空白文件越来越多,很难分配出去,形成碎片。

②、空闲块链:

⑴、可实现不连续分配。

⑵、由于每个空闲块的指针信息都是存放在上一空闲块中的,这样就不用占用额外的存储空间,与空白文件目录管理方法相比节省了存储开销。

⑶、因为链接信息是存放在每个空闲块中的,每当在链上增加或删除空白块时需要很多输入/输出操作,系统开销大。

读者-写者问题解答

读者-写者问题解答

2.读者—写者问题

读者—写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求:

(1)允许多个读者同时执行读操作;

(2)不允许读者、写者同时操作;

(3)不允许多个写者同时操作。

Reader和Writer的同步问题分为读者优先、弱写者优先(公平竞争)和强写者优先三种情况,它们的处理方式不同。

(1)读者优先。对于读者优先,应满足下列条件:

如果新读者到:

①无读者、写者,新读者可以读;

②有写者等待,但有其它读者正在读,则新读者也可以读;

③有写者写,新读者等待。

如果新写者到:

①无读者,新写者可以写;

②有读者,新写者等待;

③有其它写者,新写者等待。

单纯使用信号量不能解决读者与写者问题,必须引入计数器rc 对读进程计数;

rc_mutex 是用于对计数器rc 操作的互斥信号量;write表示是否允许写的信号量;于是读者优先的程序设计如下:

int rc=0; //用于记录当前的读者数量

semaphore rc_mutex=1; //用于对共享变量rc 操作的互斥信号量

semaphore write=1; //用于保证读者和写者互斥地访问的信号量

void reader() /*读者进程*/

do{

P(rc_mutex); //开始对rc共享变量进行互斥访问

实验一 读者写者问题

实验一 读者写者问题

实习一:读者写者问题

1实习要求

在Windows2000环境下,创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面有介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。

读者-写者问题的读写操作限制(包括读者优先和写者优先):

1)写-写互斥,即不能有两个写者同时进行写操作。

2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写。,

3)读-读允许,即可以有一个或多个读者在读。

读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。

写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。

2测试数据文件格式

测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包

括四个字段,各个字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R表示读者,w表示写者。第三字段为一个正数,表示读写操作的开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。

读者-写者问题的实现

读者-写者问题的实现

《操作系统原理》课程设计任务书

题目:读者-写者问题的实现

学生姓名:学号:班级:_____________

题目类型:软件工程(R)指导教师:

一、设计目的

学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。

二、设计任务

编写程序实现读者优先和写者优先问题:

读者-写者问题的读写操作限制(包括读者优先和写者优先)

写-写互斥:不能有两个写者同时进行写操作

读-写互斥:不能同时有一个线程在读,而另一个线程在写。

读-读允许:可以有一个或多个读者在读。

三、设计要求

1.分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数

据结构)。

2.设计合适的测试用例,对得到的运行结果要有分析。

3.设计中遇到的问题,设计的心得体会。

4.文档:课程设计打印文档每个学生一份,并装在统一的资料袋中,资料

袋前面要贴有学校统一的资料袋封面。

四、提交的成果

1. 课程设计说明书内容包括

(1) 封面(学院统一印制);

(2) 课程设计任务书;

(3) 中文摘要150字;关键词3-5个;

(4) 目录;

(5) 正文;(设计思想;各模块的伪码算法;函数的调用关系图;测试结果等)

(6) 设计总结;

(7) 参考文献;

(8) 致谢等。

注:每一部分是单独的一章,要另起一页写。

2. 排版要求

(1) 所有一级标题为宋体三号加粗(即上面写的2~8部分,单独一行,居中)

(2) 所有二级标题为宋体四号加粗(左对齐)

(3) 所有三级标题为宋体小四加粗(左对齐)

(4) 除标题外所有正文为宋体小四,行间距为固定值22磅,每个段落首行缩进2字符

读写者问题

读写者问题

设计一读者写者问题

实习环境:系统为Windows XP + VC 6.0

一、实验目的:

1、加深对进程概念的理解,明确进程和程序的区别,进一步认识并发执行的实质;

2、理解和运用信号量、PV原语、进程间的同步互斥关系等基本知识。

二、设计要求

在Windows XP下创建一个控制台进程,该进程应包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。

读者-写者问题的操作限制(包括读者优先和写者优先):

1)写-写互斥,即不能有两个写者同时进行写操作。

2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写。

3)读-读互斥,即可以有一个或多个读者在读。

读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。

写者优先的附加限制:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者出于等待状态后才能开始读操作。

测试文件格式说明,下面是一个测试数据文件的例子:

1 R 3 5

2 W 4 5

3 R 5 2

4 R 6 5

5 W 5.1 3

6 R 15 4

7 R 15 4

三、设计说明

1、读者优先

指除非有写者在写文件,否则读者不需要等待。所以可以用一个整形变量readnum记录当前的读者数目,用于确定是否需要唤醒正在等待的写者进程(当readnum==读者人数时,表明所有的读者读完,需要唤醒写者等待队列中的第一个写者)。每一个读者开始读文件时,必须修改readnum变量。因此需要一个互斥对象rnum[]来实现对全局变量readnum修改时的互斥。

4.9 经典进程同步问题:读者-写者问题

4.9 经典进程同步问题:读者-写者问题

4.9 经典进程同步问题:读者-写者问题(the readers-writers problem)

问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个,要求:

●“读-写” 互斥

●“写-写” 互斥

●“读-读” 允许

设置如下信号量:

Wmutex表示“允许写”,初值是1;

Rmutex表示对Rcount的互斥操作,初值是1。

公共变量Rcount表示“正在读”的进程数,初值是0。

由问题描述,我们可以分析出:

只要一个reader进程在读,便不允许writer进程去写;

仅当Rcount=0,reader进程才需要执行P(Wmutex)操作;

仅当reader进程执行了Rcount减1操作后,其值为0时,才须执行V(Wmutex)操作。

用信号量和P、V原语解决读者-写者问题如下:

操作系统例题汇总

操作系统例题汇总

1.2例题精选

例1.1如何理解虚拟机的概念?

解:一台仅靠由硬件组成的计算机一般被称为裸机,不易使用。操作系统为用户使用计算机提供了许多服务,从而把一台难于使用的裸机改造成了功能更强大、使用更方便的计算机系统,这种计算机系统称为虚拟机。所谓虚拟,是指把一个物理上的实体变为若干个逻辑上的对应物。前者是实际存在的,而后者是虚的,只是用户的一种感觉。在单CPU的计算机系统中能同时运行多道程序,好像每个程序都独享一个CPU,这就是虚拟。在构造操作系统时,把操作系统分成若干层,每层完成特定的功能,从而形成一个虚拟机。下层的虚拟机为上层的虚拟机提供服务,这样逐次扩充以完成操作系统的功能。

讨论“虚拟”的概念体现在操作系统的方方面面。例如,虚拟存储器,使一台只有4MB 内存的计算机可以运行总容量远远超过4 MB的程序;虚拟外设,能够使多个用户同时访问该外设等。

例1.2什么是多道程序设计,它的主要优点是什么?

解: 所谓多道程序设计是指把一个以上的程序存放在内存中,并且同时处于运行状态,这些程序共享CPU和其他计算机资源。其主要优点是:

(1)CPU的利用率高:在单道程序环境下,程序独占计算机资源,当程序等待I/O操作时CPU空闲,造成CPU资源的浪费。在多道程序环境下,多个程序共享计算机资源,当某个程序等待I/O操作时,CPU可以执行其他程序,这大大地提高了CPU的利用率。

(2)设备利用率高:在多道程序环境下,内存和外设也由多个程序共享,无疑也会提高内存和外设的利用率。

(3)系统吞吐量大:在多道程序环境下,资源的利用率大幅度提高,减少了程序的等待时间,提高了系统的吞吐量。

读者写者问题写者优先参考答案完整版

读者写者问题写者优先参考答案完整版

读者写者问题写者优先

参考答案

HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

【写者优先】在读者、写者问题中,如果总有读者进程进行读操作,会造成写者进程永远都不能进行写操作(读者优先),即所谓的写者饿死现象。给出读者、写者问题的另一个解决方案:即保证当有一个写者进程想写时,不允许读者进程再进入,直到写者写完为止,即写者优先。

让我们先回顾读者写者问题[1]:

一个数据对象若被多个并发进程所共享,且其中一些进程只要求读该数据对象的内容,而另一些进程则要求写操作,对此,我们把只想读的进程称为“读者”,而把要求写的进程称为“写者”。在读者、写者问题中,任何时刻要求“写者”最多只允许有一个执行,而“读者”则允许有多个同时执行。因为多个“读者”的行为互不干扰,他们只是读数据,而不会改变数据对象的内容,而“写者”则不同,他们要改变数据对象的内容,如果他们同时操作,则数据对象的内容将会变得不可知。所以对共享资源的读写操作的限制条件是:

允许任意多的读进程同时读;

一次只允许一个写进程进行写操作;

如果有一个写进程正在进行写操作,禁止任何读进程进行读操作。

为了解决该问题,我们只需解决“写者与写者”和“写者与第一个读者”的互斥问题即

可,为此我们引入一个互斥信号量Wmutex,为了记录谁是第一个读者,我们用一个共享整

型变量Rcount 作一个计数器。而在解决问题的过程中,由于我们使用了共享变量Rcount,

该变量又是一个临界资源,对于它的访问仍需要互斥进行,所以需要一个互斥信号量Rmutex,

读者_写者问题的写者优先算法_符广全

读者_写者问题的写者优先算法_符广全

收稿日期:2003-03-13

作者简介:符广全(1966)),男,山东费县人,临沂师范学院讲师.

读者-写者问题的写者优先算法

符广全

(临沂师范学院计算机与信息科学系,山东临沂276005)

摘 要:分析了操作系统中读者-写者这个经典进程同步问题,对读者优先的算法加以改进,探讨了用信号量实现的写者优先的算法.

关键词:信号量;互斥;同步;算法

中图分类号:TP316 文献标识码:A 文章编号:1009-6051(2003)06-0135-02

并发是现代操作系统的重要特征,进程的并发大大提高了系统效率,但也带来了不确定因素.因此,并发系统中处理好进程的互斥与同步至关重要.信号量机制是解决进程互斥与同步问题的重要工具,其应用很多而又复杂、常易出错,是操作系统原理学习中的重点与难点之一.信号量(semaphore)是荷兰计算机科学家Dijkstra 在1965年提出的一个同步机制,对信号量只能进行Wai t(S)、Signal(S)两个原语操作.信号量及Wait(S)、Si gnal(S)原语描述如下:

type Semaphore=record

value:integer; L:pointer to PCB; end Wai t(S):

S.value:=S.value-1; if S.value<0then begin

Insert(C ALLER,S.L); Block(CALLER); end

Signal(S):

S.value:=S.value+1;

if S.value<=0 then begin

操作系统之读者与写者问题(C++)

操作系统之读者与写者问题(C++)
srand(time(NULL));//利用系统时间,返回一个随机数
while(reader_id<NUM && writer_id<NUM)
{
if(rand()%2 == 0)
{
crate();//创建线程
}
if(rand()%3 == 0)
{
crate();//创建线程
}
Sleep(3000);
rc -= 1;//读者数减1
if (rc == 0)
ReleaseMutex(w);//释放写互斥信号量
ReleaseMutex(rc_mutex);//释放互斥信号量rc_mutex
ReleaseMutex(s);//释放互斥信号量
WaitForSingleObject 函数用来检测 hHandle 事件的信号状态,当函数的执行时间超过 dwMilliseconds 就返回,但如果参数 dwMilliseconds 为 INFINITE 时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject 有返回值才执行后面的代码。
5.设计总结
本次操作系统课程设计完成的是读者写者问题,通过学习信号量机制,我对这个问题的同步与互斥机制有了很深掌握,并认识到同步与互斥可以保证在一个时间内只有一个线程对某个资源有控制权。共享资源包括全局变量、公共数据成员或者句柄等。同步还可以使得有关联交互作用的代码按一定的顺序执行。总体来说我认为操作系统这门学科在计算机科学当是中非常重要的。他将我们学过的编程语言联系起来,可以说是第一次利用C语言利用windows的API与系统进行“沟通”总而言之,这次操作系统的课程设计收获颇丰,复习了许多东西,也从新学会了许多东西。

信号量的PV操作(例题)汇总

信号量的PV操作(例题)汇总

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:

司机的活动:启动车辆;

正常行车;

到站停车;

售票员的活动:

关车门;

售票;

开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;

操作系统 哲学家进餐问题 读者—写者问题共37页

操作系统 哲学家进餐问题 读者—写者问题共37页


26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭

27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·Байду номын сангаас兰

28、知之者不如好之者,好之者不如乐之者。——孔子

操作系统 哲学家进餐问题 读者—写者 问题
16、自己选择的路、跪着也要把它走 完。 17、一般情况下)不想三年以后的事, 只想现 在的事 。现在 有成就 ,以后 才能更 辉煌。
18、敢于向黑暗宣战的人,心里必须 充满光 明。 19、学习的关键--重复。
20、懦弱的人只会裹足不前,莽撞的 人只能 引为烧 身,只 有真正 勇敢的 人才能 所向披 靡。
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇

30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
37
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3 读者/写者问题与进程同步

3.1 实验目的

理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。

3.2 实验要求

在linux环境下编写一个控制台应用程序,该程序运行时能创建N个线程,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。请用信号量和PV操作实现读者/写者问题。

读者/写者问题的描述如下:

有一个被许多进程共享的数据区,这个数据区可以是一个文件,或者主存的一块空间,甚至可以是一组处理器寄存器。有一些只读取这个数据区的进程(reader)和一些只往数据区中写数据的进程(writer)。以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满足以下条件:读—读允许;读—写互斥;写—写互斥。这些条件具体来说就是:(1)任意多的读进程可以同时读这个文件;

(2)一次只允许一个写进程往文件中写;

(3)如果一个写进程正在往文件中写,禁止任何读进程或写进程访问文件;

(4)写进程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。

对于读者-写者问题,有三种解决方法:

1、读者优先

除了上述四个规则外,还增加读者优先的规定,当有读者在读文件时,对随后到达的读者和写者,要首先满足读者,阻塞写者。这说明只要有一个读者活跃,那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。

2、写者优先

除了上述四个规则外,还增加写者优先的规定,即当有读者和写者同时等待时,首先满足写者。当一个写者声明想写文件时,不允许新的读者再访问文件。

3、无优先

除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。

3.3算法分析

3.3.1读者优先

对于相继到达的一批读者,并不是每个读者都需要执行P(r_w_w)和V(r_w_w)。在这批读者中,只有最先到达的读者才需要执行P(r_w_w),与写者竞争对文件的访问权,若执行P(r_w_w)成功则获得了文件的访问权,其他的读者可直接访问文件;同理,只有最后退出临界区的读者需要执行V(r_w_w)来归还文件访问权。

为了记录正在读文件的一批读者的数量,需要设置一个整型变量readercount,每一个读者到达时都要将readercount加1,退出时都要将readercount减1。

由于只要有一个读者在读文件,便不允许写者写文件,所以,仅当readercount=0时,即尚无读者在读文件时,读者才需要执行P(r_w_w)操作。若P(r_w_w)操作成功,读者便可去读文件,相应地,readercount+1。同理,仅当在执行了readercount减1操作后其值为0时,才需要执行V(r_w_w)操作,以便让写者写文件。又因为readercount是一个可被多个读者访问的临界资源,所以应该为它设置一个互斥信号量readercount_mutex.。每个读者在访

问readercount 之前执行P(readercount_mutex),之后执行V(readercount_mutex)。

通过上述分析得到图3-2所示的算法描述,其中的数字表示语句对应的行号。

下面对该算法的调度效果进行分析。

假设最初没有进程在访问文件。过了一会,就会有很多读者和写者到达。对它们可能有两种调度情形。

情形1 最先调度写者

写者执行P(r_w_w)操作成功,将r_w_w 的值变为0,获得文件的访问权;其它的写者执行P(r_w_w)将r_w_w 的值变为负数,从而阻塞在信号量r_w_w 上;第一个读者执行P(readercount_mutex)成功,将信号量readercount_mutex 的值变为0,然后判断readercount 是0,所以执行P(r_w_w),将r_w_w 的值减1后仍然为负数从而阻塞在信号量r_w_w 上,其它的读者执行P(readercount_mutex)将信号量readercount_mutex 的值变为负数,从而阻塞在信号量readercount_mutex 上。

例如,对于请求序列w1,w2,r1,w3,r2,r3,我们用图表形象地刻画进程的活动,图表中包括读者计数器的值、信号量readercount_mutex 和r_w_w 的值和队列以及访问文件的进程。

①初始状态。没有进程使用文件,计数器readercount 的值是0,信号量readercount_mutex 和r_w_w 的值都是1,队列都是空,参见图3-3;

②w1请求写文件,所以执行语句17,将信号量r_w_w 的值减1后变成0,w1获得文件使用权,执行语句18,开始写文件,参见图3-4;

③在w1尚未写完时,w2提出写请求,所以执行语句17,将信号量r_w_w 的值减1后变成负1,w2被阻塞在信号量r_w_w 上,参见图3-5;

④同时r1提出读请求,所以执行语句5,将信号量readercount_mutex 的值减1后变成0,接着执行语句6,判断readercount 的值是0,所以执行P(r_w_w),将信号量r_w_w 的值减1后变成-2,r1被阻塞在信号量r_w_w 上,参见图3-6;

⑤同时w3提出写请求,所以执行语句17,将信号量r_w_w 的值减1后变成-3,w3被阻塞在信号量r_w_w 上,参见图3-7;

⑥同时r2提出读请求,所以执行语句5,将信号量readercount_mutex 的值减1后变成-1,r2被阻塞在信号量readercount_mutex 上,参见图3-8;

⑦同时r3提出读请求,所以执行语句5,将信号量readercount_mutex 的值减1后变成-2,r3被阻塞在信号量readercount_mutex 上,参见图3-9;

⑧w1写完文件,执行语句19,将信号量r_w_w 的值加1后变成-2,并唤醒w2,w2接着执行语句18,开始写文件,参见图3-10;

⑨w2写完文件,执行语句19,将信号量r_w_w 的值加1后变成-1,并唤醒r1,r1接着执行语句7,将readercount 的值加1后变成1,执行语句8,将信号量readercount_mutex 的值加1后变成-1,并唤醒r2,r1执行语句9,开始读文件;被唤醒的r2执行语句6,判断

相关文档
最新文档