读者写者算法的改进及其应用

读者写者算法的改进及其应用


2024年5月18日发(作者:摩托罗拉w156)

读者写者算法的改进及其应用

摘 要:分析了操作系统中同步互斥机制中的经典算法之一——读者

写者算法,并对其进行了一些改进,给出了基于PV原语与信号量机

制的解决方案。最后,得出信号量个数和位置的应用是同步互斥精髓

的结论。

关键词:读者写者;同步;互斥;信号量

1 读进程优先改进算法

读进程优先算法是让读者在任何时刻优先于写者,即当有进程在

写文件时,如果有进程请求读,那么新的写进程被拒绝,待现有读进

程完成读操作后,立即让写进程开始运行,当无读进程工作时才让写

进程工作。

为允许多个读进程同时访问数据域,增设变量count表示当前在

读读者的数量,并把互斥变量一分为二,变成写者互斥信号量Wmutex

与读者互斥信号量Rmutex,其中写者互斥信号量用来协调读者与写

者对数据的访问,读者信号量用来使不同读者互斥的访问count变量。

该算法较好满足了上述3个限制,引入的全局变量count控制了

读者操作,阻塞写者的任务交给第一个读的进程,唤醒写者的任务交

给最后一个读的进程。因此,当count变量由0变为1时,执行

P(Wmutex)操作阻止写进程访问,当count变量由1变为0时,执行

V(Wmutex)操作唤醒等待写进程。当count由非0值增加或为非1值

减少时,由于第一个读进程已对写进程进行了阻塞操作,故不需再次

对信号量进行P操作。

通过改变信号量的位置,可以得到一种更好的读进程优先算法。

把P(Rmutex)操作改在P(Wmutex)后面对写操作无影响,对读操

作而言,当有若干读进程同时访问数据域时,第二种写法可以减少单

个读进程对变量count的控制时间,更高效地执行读操作。

该算法的缺点是:读进程会彻底阻塞写进程,当有若干读进程时,

写进程将长期挂起,直至读进程全部执行完毕后,写进程才得以执行。

2 写进程优先改进算法

由于读者优先会造成写者“饥饿”现象,即写者会因为等待读者

而长期得不到资源,而在有些情况下写者需要优于读者占用资源。写

者优先是指新来的写者进程会阻塞后来的读者进程,但是仍然不剥夺

当前在读取数据的读者所占用的数据资源。当没有写者时,读者仍然

可以同时访问的数据域。为实现这一目标,可以分别设置两个计数器

Rcount与Wcount分别表示当前的读者数与写者数,Wcount包括在

写写者与等待写者。Rmutex与Wmutex分别令读者与写者互斥地使

用各自的计数器。如果当第一个写者阻塞信号量为S1时,则后续读

者均会在S1上挂起,这将导致一旦写者进程完成操作后,读者进程

将立即开始操作,因此阻塞信号量应该设在S1前面,同理,读者阻

塞信号量应在S2前。因为此时唤醒策略为先来先服务,为保证写者

优先(即写者被优先唤醒),加一个互斥信号量S_Reader,使得读者

在此被阻塞,而写者可以跨越此信号直接访问。改进如下:

可能出现的两种情况:

(1)当前系统中有若干读进程在读,后来读进程可以继续加入

读者队列,而后来第一个写进程则阻塞其后读进程,但本身被P(S1)

阻塞,且所有非第一个后来写进程将在P(Wmutex)队列上排队。当前

读进程全部执行完毕后写进程开始依次执行。在此后来第一个读进程

将在P(S1)上排队,其他读进程在P(S_Reader)上排队。

(2)当前系统中有若干写进程,其中有一个在写,其他进程在

等待。这时后来的第一个读进程将在P(S1)被阻塞,且其他读进程将

在P(S_Reader)上排队,而其他写进程将在P(S2)上排队。整个执行过

程遵循写优先原则,直到最后一个写进程执行完毕后读队列才开始执

行。

3 兼顾公平改进算法

有些时候,读者写者的优先级是并重的,这要求我们兼顾二者的

优先级,在这种前提下,我们需要一个二者公用的信号量来区分到达

先后顺序。代码如下:

兼顾公平原则较前一种相对简单,公用信号量可以区分到达的先

后顺序,后来进程会因为访问公用信号失败而挂起。从而实现了公平

竞争的原则。

4 读者写者改进算法应用

读者写者问题的变形有很多,但万变不离其中,基本上就是靠信

号量的灵活运用解决问题。下述变形描述:假设公司里有三个部门:

财务部,经理部,员工部。财务部可以登记公司员工(包括领导)的

薪金,经理部和员工部可以访问财务部。但需分开访问(经理部与员

工部访问权限相同),财务部登记时不允许其他部门访问。试用读者

写者模型写出各进程原语。

由问题分析可知,本题中读者分两个,经理部(R_Manage)和员

工部(R_Employee),写者只有一个,即财务部(W_Finace),整个问题

的解决采用兼顾公平模式,代码如下:

分析:由于有3个不同对象,故在抢占资源时设置了两个信号量

RS和WS。3个部门访问数据进程数分别用RMcount

(Reader_Manage_count

(Reader_Employee_count

经理部读者数)、REcount

员工部读者数)、WFcount

(Writer_Finace_count财务部写者数)表示,且各部门对其访问方式

仍为互斥。与兼顾公平算法类似,但是读者公用一个信号量RS即可,

各部门对数据进行操作时会阻塞其他部门操作,整个过程严格按照访

问先后顺序执行。

5 结束语

对于临界资源需要灵活掌握其控制方法,但所有的方法离不开对

信号量的控制。只要深入分析问题本质,针对不同情况适当增减信号

量个数或改变所在位置,问题就会迎刃而解。

参考文献:

[1] WILLIAN ing Systems:Internals and

Design Principles (Sixth Edition)[M].New York:Prentice Hall,2010.

[2] 汤子瀛.计算机操作系统[M].西安:西安电子科技大学出

版社,2006.

[3] 藤艳平.操作系统中读者写者算法的改进与实现[J].齐齐

哈尔大学学报,2006(5).


发布者:admin,转转请注明出处:http://www.yc00.com/num/1716014716a2706791.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信