操作系统中读者——写者问题的分析

Analysis of readerwriter problem in operating system

摘要:本篇文章就操作系统中读者——写者问题进行利用记录型信号量和“信号量集”机 制分析读者——写者问题。

Abstract: This paper analyzes the readerwriter problem in operating system using record semaphore and "semaphore set" mechanism.

关键词:进程同步互斥,信号量,读者——写者问题

Key words: process synchronization mutex; semaphore; reader-writer problem

1 .引言 一个数据文件或记录可被多个进程共享,我们把只要求读该文件的进程称为 “reader 进程”,其他进程称为“writer 进程”。允许多个进程同时读一个共享 对象,因为读操作不会使数据文件混乱。但不允许一个 writer 进程和其他 reader 进程或 writer 进程同时访问共享对象,因为这种访问将会引起混乱。所谓“读者 写者问题”( reader-writer problem )是指保证一个 writer 进程必须与其他进程 互斥地访问共享对象的同步问题。读者-写者问题常被用于测试新同步原语。 现在大部分对读者——写着问题的解答都有可能导致饥饿,第一种情况下写者 可能饥饿,而第二种情况是读者可能饥饿。

2 .读者优先的同步算法 采用这种算法时读写进程应遵循以下的同步策略:

(1)有读进程在数据区读数据时,别的读进程允许同时进入读数据。

(2) 只有当全部的读者都退出数据区时,才允许写进程进入写数据。 利用 Python 程序测试代码如下: import time import threading from threading import Semaphore import random Wmutex = Semaphore(1) Rmutex = Semaphore(1) Rcount = 0 sleept = 1

输出结果如下: [0, 0, 1, 1, 1, 0, 0, 1, 1, 1] 其中 1 表示读者进程,0 表示写者进程 writer1 waiting to write writer3 finish write writer1 writing writer4 writing writer2 waiting to write writer4 finish write reader1 waiting to read reader1 reading reader2 waiting to read reader2 reading reader3 waiting to read reader3 reading writer3 waiting to write reader4 reading writer4 waiting to write reader5 reading reader4 waiting to read reader6 reading reader5 waiting to read reader3 finish read reader6 waiting to read reader5 finish read writer1 finish write reader2 finish read writer2 writing reader1 finish read writer2 finish write reader6 finish read writer3 writing reader4 finish read 进程已结束,退出代码为 0

3 .写者优先的同步算法 为了防止“读者优先”可能导致写者饥饿,可以考虑写者优先。 该算法应 满足以下同步策略:

(1)当无写者时才允许读者使用文件;

(2)多个读写进程等 待时首先考虑唤醒写者 利用 Python 程序测试代码如下: import time import threading from threading import Semaphore import random Rcount = 0 # 进行的读者队列数量 Wcount = 0 # 进行的写者队列数量 Wmutex = Semaphore(1) # 对临界资源 Wcount 的互斥访问 Rmutex = Semaphore(1) # 对临界资源 Rcount 的互斥访问 File = Semaphore(1) # 解决“写着与写着”和“写着与第一个读者”的互斥问题 Wirte = Semaphore(1) # 表示写者进程

输出结果如下: [0, 1, 0, 1, 1, 1, 1, 0, 1, 1] writer2 finish write 其中 1 表示读者进程,0 表示写者进 程 writer3 writing writer1 waiting to write writer3 finish write writer1 writing reader1 reading reader1 waiting to read reader2 reading writer2 waiting to write reader3 reading reader2 waiting to read reader4 reading reader3 waiting to read reader5 reading reader4 waiting to read reader6 reading reader5 waiting to read reader7 reading writer3 waiting to write reader1 finish read reader6 waiting to read reader5 finish read reader7 waiting to read reader2 finish read writer1 finish write reader6 finish read writer2 writing reader3 finish read reader7 finish read 进程已结束,退出代码为 0 reader4 finish read

4 .总结 读者写者问题被提出后,就一直被用于测试几乎所有的新同步原语。该问题 有多个变种,它们都与优先级有关。最为简单的通常被称为“第一”读者写者问 题,该问题要求没有读者需要保持等待,除非有一个写者已被允许使用共享对象。 换言之,如果有读者在访问对象,则不管有没有写者在等待,后续读者都可以进 行读操作。“第二”读者-写者问题要求,一旦写者就绪,那么写者会尽可能快 地执行写操作。换言之,如果有一个写者在等待访问对象,那么就不会有新读者 开始读操作。 在此基础上我们对读者优先和写者优先分别进行代码测试和分析,逐步了解 在操作系统中的读者-写者问题,点点分析,逐步了解.

参考文献:

[1] 教育部.国家中长期教育改革和发展规划纲要(2010—2020 年)[N]. 中国教育报,2010- 7-30. [2] 汤小丹.计算机操作系统:慕课版 [M].北京:人民邮电出版社,2021,6、

[3] https://blog.csdn.net/antRain/

[4] 曾窕俊,汪传建.《操作系统》课程中的读者 - 写者问题的实现与改进[J].福建电 脑.2016-2-83. [5] 黄林国,周苏.操作系统原理的教学改革与实践.烟台大学学报.2007Vo].20

操作系统中读者——写者问题的分析相关推荐

  1. 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )

    目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? ​2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制  个人 ...

  2. 操作系统:读者写者问题

    操作系统:读者写者问题 问题: 一.读者-写者问题: 读者优先 二.读者-写者问题:写进程优先 三.读者写者问题的应用---独木桥问题 类型1.一次只能过一辆车 类型2.一次能过多辆车 四.总结 附代 ...

  3. Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)

    一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...

  4. 操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...

    SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普.研究前沿热点介绍.科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享 ...

  5. 操作系统实验读者写者程序源码_我的操作系统梦破灭了

    前言:每个程序员都可能有一个操作系统梦:写一个属于自己的OS出来,但是真正成功的人却不多. 我也不例外,刚工作的时候也研究过MINIX,但是没有坚持下去,梦想破灭,后来越来越忙,更没时间折腾了. 所以 ...

  6. 操作系统:读者-写者问题 (C语言 winapi)

    要求实现: 创建一个控制台进程,此进程包含n个线程.用这n个线程来表示n个读者或写者.每个线程按相应测试数据文件的要求进行读写操作.用信号量机制分别实现读者优先和写者优先的读者-写者问题. 读者-写者 ...

  7. 【操作系统】读者写者问题——写者优先、寿司店问题 题目+答案

    噩梦来啦~ 一]讲解 同步:多进程按一定顺序执行 互斥:多进程操作同一个临界资源 信号量>0,说明它空闲.所测试的线程可以锁定而使用它. 信号量=0,说明它被占用,测试的线程要进入睡眠队列中,等 ...

  8. Hhadoop-2.7.0中HDFS写文件源码分析

    转载自:http://blog.csdn.net/lipeng_bigdata/article/details/53738376 一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及 ...

  9. Linux多线程实践(6) --Posix读写锁解决读者写者问题

    Posix读写锁 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restr ...

最新文章

  1. linux配置文件为yum,Linux系统配置本地yum源
  2. Django资源大全
  3. 总结Themida / Winlicense加壳软件的脱壳方法
  4. 一文看尽10篇目标检测最新论文(SpineNet/AugFPN/LRF-Net/SABL/DSFPN等)
  5. mysql存储过程实例_mysql存储过程案例讲解
  6. matlab cam orbit,Matlab的绘图函数
  7. MVVM 自动生成编号
  8. 【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方案
  9. Java中的break和continue关键字使用总结
  10. 全志平台camera驱动开发(3)MIPI接口camera驱动开发
  11. java编译过程_java 程序编译和运行过程详解
  12. 新电脑java开发常用环境安装下载教程收集--持续更新
  13. 对QQ保镖检测结果的几点疑问
  14. 要有遥不可及的梦想,也要有脚踏实地的本事
  15. python骰子游戏分析_两个骰子的Python概率骰子游戏
  16. 液相如何改善峰形与提升分离度?【实验室秘籍】
  17. 基于 HTML5 WebGL 的高炉炉体三维热力图监控,展示“智慧工厂”十八般武艺
  18. JS无限滚动、回到顶端和图片懒加载
  19. python归一化后全部都是0咋办_python归一化处理
  20. Git与GitHub说明分析

热门文章

  1. 软文营销:文章写的好不如发的好!
  2. poi追加写EXCEL文件
  3. ZeroNet框架(ZeroFrame)API参考
  4. 电网变电站高空作业规范检测-安全绳、安全带佩戴检测图像数据集(voc,yolo两类标签)
  5. 英语总结系列(三十):开阔视野
  6. Brickstream 2代书店客流系统
  7. D触发器 (D-FF)详解
  8. OTT-TV网络电视EPG录制和EPG抓取解决方案
  9. 什么是深浅拷贝,手写深浅拷贝
  10. Lenovo笔记本wifi功能消失