操作系统:经典进程同步问题的高级探讨


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:操作系统

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

目录

经典进程同步问题

1.生产者—消费者问题

2.读者—写者问题

3.哲学家进餐问题

4.打瞌睡的理发师问题


经典进程同步问题

1.生产者—消费者问题

如果一个进程能产生并释放资源,则该进程称做生产者;如果一个进程单纯使用(消耗)资源,则该进程称做消费者

生产者-消费者问题表述如下:

一组生产者进程和一组消费者进程(设每组有多个进程)通过缓冲区发生联系。生产者进程将生产的产品(数据、消息等统称为产品)送入缓冲区,消费者进程从中取出产品。假定缓冲区共有N个,可把它们设想成一个环形缓冲池。

它们应满足如下同步条件

① 任一时刻所有生产者存放产品的单元数不能超过缓冲区的总容量(N )。

② 所有消费者取出产品的总量不能超过所有生产者当前生产产品的总量。

在此问题中:

(1)

生产者之间要互斥使用缓冲区;

消费者之间要互斥使用缓冲区;

生产者、消费者之间要互斥使用缓冲区。

(2)

生产者、消费者之间有同步合作的关系。

1.设缓冲区的编号为0~N-1inout分别是生产者进程和消费者进程使用的指针,指向下面可用的缓冲区,初值都是0。

2.设置三个信号量:

full:表示放有产品的缓冲区数,其初值为0

empty:表示可供使用的缓冲区数,其初值为N

mutex:互斥信号量,初值为1,表示各进程互斥进入临界区,保证任何时候只有一个进程使用缓冲区。

2.读者—写者问题

读者-写者问题也是一个著名的进程互斥访问有限资源的问题。例如,一个航班预订系统有一个大型数据库,很多竞争进程要对它进行读、写。允许多个进程同时读该数据库,但是在任何时候如果有一个进程写(即修改)数据库,那么就不允许其他进程访问它—— 既不允许写,也不允许读。

设置两个信号量:读互斥信号量rmutex和写互斥信号量wmutex。另外设立一个读计数器readcount,它是一个整型变量,初值为0。

rmutex:用于读者互斥地访问readcount,初值为1

wmutex:用于保证一个写者与其他读者/写者互斥地访问共享资源,初值为1

以上算法是一种读者优先算法,即只要有一个读者正在读操作,它就可以保持对数据区的控制,这就易使写者饥饿。

该问题的另一个变种:写者优先算法,即只要写者申请写操作,就不允许新的读者访问数据区。该算法读者们可能饥饿。

3.哲学家进餐问题

五个哲学家围坐在一个圆桌周围,每个哲学家面前都有一只碗,各碗之间分别有一根筷子,餐桌如下图。

哲学家的生活包括两种活动:即吃面条思考。当哲学家觉得饿时,他就分两次去取他左边和右边的筷子,每次拿一根(不能强行从邻座手中抢过筷子),如果成功,他就开始吃面条,吃完后把筷子放回原处继续思考。

初步分析:获得两根筷子时才可进餐

哲学家进餐问题

筷子是临界资源,一段时间内只允许一个哲学家使用。可用一个信号量表示一根筷子。由五个信号量构成信号量数组。第i个哲学家的进餐过程可描述如下:

解决死锁的方法:

(1) 最多只允许4个哲学家同时拿筷子,保证有一人能 够进餐。

(2) 仅当左、右两根筷子均可用时,才允许他拿起筷子。

(3) 奇数号哲学家先拿左边的筷子,偶数号先拿右边的筷子。

方法(1)的算法描述如下:

4.打瞌睡的理发师问题

问题描述:理发店有一名理发师、一把理发椅和几把座椅,等待的理发者可以坐在座椅上。如果没有顾客到来,理发师就坐在理发椅上打盹。当顾客到来时,就唤醒理发师。如果顾客到来时理发师正在理发,该顾客就坐在椅子上排队;如果满座了,他就离开这个理发店,到别处理发。

利用信号量机制为理发师和顾客各编写一段程序,描述他们的行为。

打瞌睡的理发师问题示意图

分析其中的互斥和同步关系:

  • 理发师和顾客是同步关系

  • 椅子是临界资源,应互斥使用

理发师和每位顾客都分别是一个进程。

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/494861.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

存储卡数据如何恢复?6 个免费的 SD 卡恢复软件

SD 卡包含数字世界中的照片、电影、文档等。擦除、格式化或SD卡损坏都可能导致数据丢失,这一点值得警惕。这就是免费 SD 卡恢复软件有用的原因。使用该软件的三个主要原因: 经济高效:免费的 SD 卡恢复软件可帮助恢复丢失的数据,而…

2024年springboot+vue毕业设计选题推荐

2024年,随着技术的发展和市场需求的变化,基于Spring Boot和Vue的毕业设计选题可以更加注重新兴技术的融合和解决实际问题。以下是一些建议的选题方向: 1. 基于Spring Boot和Vue的智能健康管理系统 - 设计并实现一个集成了运动数据、睡眠监…

本地qwen 大模型,基于FastAPI构建API接口使用

文章目录 简介实战API 构建访问curlrequest库 结果参考资料 简介 实战 使用modelscope 下载千问7B模型,利用FastAPI部署成在线的API接口; 使用history历史对话多轮问答数据,实现多轮对话; API 构建 import uvicorn from fasta…

【C语言】Infiniband驱动pci_pcie_cap

一、注释 //include\linux\compat-2.6.h #define LINUX_BACKPORT(__sym) backport_ ##__sym//include\linux\compat-2.6.33.h #define pci_pcie_cap LINUX_BACKPORT(pci_pcie_cap)/*** pci_pcie_cap - 获取保存的PCIe能力偏移* dev: PCI 设备** PCIe能力偏移在PCI设备初始化时…

vue3+Vite+TS项目,配置ESlint和Prettier

创建vue3项目 实操过的有两种方式 1.vue脚手架2.vite(推荐,也是尤大大团队研发) 具体怎么新建一个vue3项目就不多讲了,可以按照官方文档来 创建后的文件目录长这样 多提一句,vite也会随着时间不断迭代,后…

方格分割(蓝桥杯)

文章目录 方格分割题目描述答案:509思路dfs 方格分割 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如下就是三…

蓝桥杯基础练习汇总详细解析(三)——字母图形、01字符串、闰年判断(详细解题思路、代码实现、Python)

试题 基础练习 字母图形 提交此题 评测记录 资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子&#…

汇编语言学习记录 01

目录 VScode配置调试环境 Debug的主要命令 简单写个Hello World VScode配置调试环境 没有IDE真的蛮难受的 安装插件TASM/MASM 右键扩展设置,选择Assembler:MASM 右键调试即可开始 Debug的主要命令 R-查看和修改寄存器 D-查看内存单元 E-修改内…

SAP系统如何使用中间数据库与其它系统进行数据交互

SAP系统与外部系统之间进行数据交换和通信的接口方式有很多种,比如常用的接口技术有RFC、BAPI、ALE、Webservice、RESTful、中间数据库等等,不同的接口形式具有不同的特点和适用场景,可以根据具体需求选择合适的接口形式来实现系统间的数据交互。 前面文章中已介绍Webservi…

2024年腾讯云4核8G服务器多少钱一年?买1年送3个月

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

SOC子模块--Timer

作用 Timer 是片内集成的通用定时器,能够向系统提供定时中断,也可以通过外部时钟进行定时计数; 工作模式 重启计数模式: 当通道使能后计数器锁存加载计数寄存器的值,然后在系统时钟的驱动下递减计数。当计数到零时…

信息系统项目管理师——第9章项目范围管理(重要)

本章属于10大管理知识领域,选择、案例、论文都会考。选择题考大概3分,案例题考的比较多,需要重点记录,论文也考的比较多,建议作为第二梯队准备。 1.管理基础 1.1 产品范围和项目范围 产品范围:指某项产品、服务或成…

Yarn资源调度器

目录 写在前面一、yarn资源调度器1.1 Yarn基础架构1.2 Yarn工作机制1.3 作业提交全过程1.3.1 作业提交1.3.2 作业初始化1.3.3 任务分配1.3.4 任务运行1.3.5 进度和状态更新1.3.6 作业完成 1.4 Yarn调度器和调度算法1.4.1 先进先出调度器(FIFO)1.4.2 容量…

如何使用VS统计自己的代码量?

历经漫漫编程之路,此刻我们不妨回首细数,那已累积的无数行代码,它们如同一串串无声的脚印,记载着我们默默耕耘的点滴时光。每一行代码都是平凡努力的印记,见证了我们的执着与付出,也塑造了今天的我们。让这…

Pandas数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、数据错误或数据重复的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。 这里使用的测试数据是clean-data.csv,如图3-10所示。这个表…

【二叉树】Leetcode 108. 将有序数组转换为二叉搜索树【简单】

将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。 示例1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null…

npm淘宝镜像源更新

目录 前情提要: 背景: 镜像源更新: 清楚缓存: 直接切换镜像源: 补充: 错误解释: 解决方法: 前情提要: 2024 /1 /22 ,registry.npm.taobao.org淘宝镜像源的SSL…

基于java实现的高校二手交易平台

开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…

【uniapp】uniapp实现免密登录

文章目录 一、概要二、整体架构流程三、技术名词解释四 、技术细节1.存取token有效期?2.使用setStorageSync而不使用setStorage?3.使用onLaunch而不使用全局路由? 一、概要 打开一个网页或小程序的时候,我们有时候会自动进入主页…

【JAVA】多态

去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。 比如吃东西 猫吃的是猫粮,狗吃的是狗粮 多态实现条件 1. 必须在继承体系下 2. 子类必须要对父类中方法进行重写 3. 通过父类的引用调用重写的方法 多态体现:在代码运行时…