OS——进程并发控制(五大经典问题信号量机制描述)

news2024/12/23 18:45:46

目录

一、经典问题信号量机制描述

1、任意两个进程可以并发的条件(Bernstein条件)

2、临界区管理原则

3、信号量的P、V操作

(1)P、V操作

(2)P、V操作的原则

(3)用信号量解决进程间互斥问题

4、 生产者---消费者问题(解决访问缓冲区问题)

(1)问题描述

(2)信号量的设置

5、哲学家就餐问题

(1)问题描述

 (2)解决思路

 6、读者和写者问题(共享文件/存储区)

(1)问题描述

(2)问题分析

(3)信号量的设置 

 7、理发师问题(调度的问题模拟)

(1)问题描述

(2)信号量的设置

8、苹果橘子问题

(1)问题描述

(2)信号量的设置

一、经典问题信号量机制描述

1、任意两个进程可以并发的条件(Bernstein条件)

 其中Ij、Oi分别表示进程t的输入变量或输出变量

2、临界区管理原则

  • §有空让进:如果有一个进程要求进入空闲的临界区,便允许该进程进入。
  • §无空等待:任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
  • §多中选一:有多个进程同时申请进入临界区,只能选择其中一个进入。
  • §有限等待:进入临界区的进程要在尽量短的时间内退出,以便其它进程能及时进入临界区。
  • §让权等待:如果进程不能进入临界区,则应让出CPU,避免进程出现“忙等”现象。

3、信号量的P、V操作

(1)P、V操作

(2)P、V操作的原则

  • P、V操作必须成对出现,有一个P操作就一定有一个V操作:
  • 用于互斥时,P、V操作必须处于同一个进程。
  • 用于同步时,则同步进程之间的P、V操作成对。
  • 同时使用同步和互斥时,同步P操作在前,互斥P操作在后。

(3)用信号量解决进程间互斥问题

semaphore mutex.value=1;
cobegin  process pi 
  begin 
  …
  P(mutex); 
  临界区
  V(mutex); 
  … 
  end;
coend;

4、 生产者---消费者问题(解决访问缓冲区问题)

(1)问题描述

一组生产者进程和一组消费者进程共享一个初始为空、大小为n的缓冲区,只有缓冲区为满时,生产者才把消息放入缓冲区,否则必须等待;只有缓冲区不为空时,消费者从中取出消息,否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入消息,或一个消费者从中取出消息。

 

(2)信号量的设置

  • mutex:互斥信号量,初值为1;
  • full:满缓冲区数,初值为0;
  • empty:空缓冲区数,初值为N。
  • 如果mutex的值为0,则P(mutex)操作会导致进程阻塞状态
  • 如果empty的值为0,则P(empty)操作会导致进程阻塞状态
  • 如果full的值为0,则P(full)操作会导致进程阻塞状态

5、哲学家就餐问题

(1)问题描述

  • 哲学家就餐问题可以这样表述:

        假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。

       哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)。即使没有死锁,也有可能发生资源耗尽。

       例如,假设规定当哲学家等待另一只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。这个策略消除了死锁(系统总会进入到下一个状态),但仍然有可能发生“活锁”。如果五位哲学家在完全相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些哲学家就会等待五分钟,同时放下手中的餐叉,再等五分钟,又同时拿起这些餐叉。

        在实际的计算机问题中,缺乏餐叉可以类比为缺乏共享资源。一种常用的计算机技术是资源加锁,用来保证在某个时刻,资源只能被一个程序或一段代码访问。当一个程序想要使用的资源已经被另一个程序锁定,它就等待资源解锁。当多个程序涉及到加锁的资源时,在某些情况下就有可能发生死锁。

      例如,某个程序需要访问两个文件,当两个这样的程序各锁了一个文件,那它们都在等待对方解锁另一个文件,而这永远不会发生。

 (2)解决思路

可以创建五个线程表示五位哲学家,五个线程相互独立(异步)。 

 6、读者和写者问题(共享文件/存储区)

(1)问题描述

        有读者和写者两组并发进程,共享一个文件,当两个或以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。

因此要求:

①允许多个读者可以同时对文件执行读操作;

②只允许一个写者往文件中写信息;

③任一写者在完成写操作之前不允许其他读者或写者工作;

④写者执行写操作前,应让已有的读者和写者全部退出。

(2)问题分析

  • 1) 关系分析。由题目分析读者和写者是互斥的,写者和写者也是互斥的,而读者和读者不存在互斥问题。
  • 2) 整理思路。两个进程,即读者和写者。写者是比较简单的,它和任何进程互斥,用互斥信号量的P操作、V操作即可解决。读者的问题比较复杂,它必须实现与写者互斥的同时还要实现与其他读者的同步,因此,仅仅简单的一对P操作、V操作是无法解决的。那么,在这里用到了一个计数器,用它来判断当前是否有读者读文件。当有读者的时候写者是无法写文件的,此时读者会一直占用文件,当没有读者的时候写者才可以写文件。同时这里不同读者对计数器的访问也应该是互斥的。
  • 3) 信号量设置。首先设置信号量count为计数器,用来记录当前读者数量,初值为0; 设置mutex为互斥信号量,用于保护更新count变量时的互斥;设置互斥信号量rw用于保证读者和写者的互斥访问。 

(3)信号量的设置 

  • mutex:操作读者个数的互斥信号量,
  • writer:是写者互斥信号量(就是共享存储区的互斥信号量)。
  • 读者:一批读者之间可以不互斥地共享存储区,但要与写者互斥。
  • 写者:写者需要互斥地访问共享区。

 7、理发师问题(调度的问题模拟)

(1)问题描述

一个理发店由一个有几张椅子的等待室和一个放有一张理发椅的理发室组成。

      ①若没有要理发的顾客,则理发师去睡觉;

      ②若一顾客进入理发店,理发师正在为别人理发,且等待室有空椅子,则该顾客就找张椅子按顺序坐下;

     ③若一顾客进入理发店,理发师在睡觉,则叫醒理发师为该顾客理发;

     ④若一顾客进入理发店且所有椅子都被占用了,则该顾客就离开。

(2)信号量的设置

  •     1)控制变量waiting用来记录等候理发的顾客数,初值均为0; 
  •     2)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0; 
  •     3)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0(刚开始时理发师在睡觉,所以理发师这个资源数目为0); 
  •     4)信号量mutex用于互斥,初值为1. 

8、苹果橘子问题

(1)问题描述

桌上有一个盘子,每次只能放入一个水果,爸爸专门向盘子放入苹果,妈妈专门向盘子放入橘子;有一儿一女,儿子只吃橘子,女儿只吃苹果。

(2)信号量的设置

  • plate:为互斥信号量,表示是否允许向盘子放入水果,初值为1,表示允许放入,且只允许放入一个。
  • apple:表示盘子中是否有苹果,初值为0,表示盘子为空,不许取,若apple=l可以取。
  • orange:表示盘子中是否有橘子,初值为0,表示盘子为空,不许取,若orange=l可以取。

 

如有错误,敬请指正。

您的收藏与点赞都是对我最大的鼓励和支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[开发浏览器实战]关于Firefox火狐浏览器的说明一二(国内版 国际版区别 账号切换 插件-恢复关闭的标签页 插件-tempermonkey油猴)

[开发浏览器实战]关于Firefox火狐浏览器的说明一二1.下载地址2.同步账号不一样国内版3.浏览器关于内容不同:国内版国际版![在这里插入图片描述](https://img-blog.csdnimg.cn/8ca563d2aa2d43b0b52b6cf50bbffa0c.png)灵活使用firefox推荐插件1.tempermonkey油猴2.恢复关闭的标签…

从零学习VINS-Mono/Fusion源代码(五):VIO初始化

本节分析VIO初始化部分 VINS-Mono/Fusion代码学习系列: 从零学习VINS-Mono/Fusion源代码(一):主函数 从零学习VINS-Mono/Fusion源代码(二):前端图像跟踪 从零学习VINS-Mono/Fusion源代码&#x…

Orin PPS failed to request pps gpio修改

前言 在使用Orin PPS过程中,已经配置了设备树文件,但是遇到了申请GPIO失败的问题,如下图: 申请GPIO失败。 1.分析及解决过程 1.1 设备树文件修改 在设备树文件hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-0000-a00.dtsi 中,添加关于pps gpi…

k8s,30分钟部署一个kubernetes集群【1.17】

作者:李振良 官方网站:http://www.ctnrs.com kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm init# 将一个 Node 节点加入到当前集群中 $ kubeadm join <Mast…

基于jsp+java+ssm的农产品购物商城系统-计算机毕业设计

项目介绍 随着计算机、信息化网络的普及&#xff0c;电子商务的兴起&#xff0c;网络支付以及网络安全体系逐渐完善&#xff0c;将人们的生活带入到网络时代&#xff0c;越来越多的人喜欢网上购物&#xff0c;消费者足不出户便可以买到自己喜欢的物品&#xff0c;只要轻轻点击…

TypeScript算法题实战——二叉搜索树篇

二叉搜索树&#xff0c;也叫二叉查找树、二叉排序树&#xff0c;是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值。 注意…

零拷贝(Zero Copy)技术

概念 我们知道Linux系统分为用户态和内核态&#xff0c;在用户态每发起一次IO请求&#xff0c;就需要进行2次上下文切换&#xff08;分别是用户态->内核态&#xff0c;内核态→用户态&#xff09;&#xff0c;和一次CPU拷贝&#xff08;将数据从内核缓存拷贝到用户缓存&…

redis设置密码并修改查看的几种方式

前言 最近正值世纪杯期间&#xff0c;不知道大家心目中的球队成绩如何&#xff0c;最近在工作中需要设置redis服务器的密码的场景 设置密码可以在很大的程度保护redis服务器&#xff0c;但是相关的命令需要通过密码校验之后才能使用 下面就分享给大家两种设置redis服务器的密…

Java并发编程—CompletableFuture的异步执行案例

在博主前几篇博客中&#xff0c;https://blog.csdn.net/qq_52545155/article/details/128167519?spm1001.2014.3001.5501&#xff0c;给大家分享了关于多线程中异步任务的执行和一些相关概念&#xff0c;在这篇博客中&#xff0c;主要是通过一个实际的案例让大家对于Completab…

利用卷神经网络实现IOSLab数字手写图像识别

利用卷神经网络实现IOSLab数字手写图像识别 文章目录利用卷神经网络实现IOSLab数字手写图像识别一、前言二、作业要求三、数据集样本分析四、代码实现1、运行环境2、导入依赖项3、导入数据集4、加载数据和数据预处理5、划分数据集6、CNN网络结构构建7、编译模型8、训练模型9、模…

性能分析之解析 RESAR 性能分析七步法

文章目录一、压力场景数据分析二、架构分析三、响应时间分析四、全局监控分析五、定向监控六、判断性能瓶颈七、提出解决方案一、压力场景数据分析 下面是⼀个登录接⼝的基准场景测试&#xff0c;JMeter 启动后&#xff0c;线程在 1-2 个的时候 TPS 已经达到 200 左右&#xf…

JavaScript -- 字符串常用方法及示例代码介绍

文章目录字符串的方法1 length2 索引3 str.at()4 str.charAt()5 str.concat()6 str.includes()7 str.indexOf() 和 str.lastIndexOf()8 str.startsWith() 和 str.endsWith()9 str.padStart() 和 str.padEnd()10 str.replace() 和 str.replaceAll()11 str.slice() 和 str.substr…

Mysql调优(一)——性能监控

一、大纲图 【Mysql调优.xmind】 二、Mysql调优简写 2.1 性能监控 2.1.1 使用show profile查询剖析工具&#xff0c;可以指定具体的type 此工具默认是禁用的&#xff0c;可以通过服务器变量在会话级别动态的修改&#xff1a; set profiling1;当设置完成之后&#xff0c;在…

某Android大厂面试100题,涵盖测试技术、环境搭建、人力资源......【速度领取】

最近看到网上流传着各种面试经验及面试题&#xff0c;往往都是一大堆技术题目贴上去&#xff0c;但是没有答案。 为此&#xff0c;小编用业余时间整理了这份软测常见的面试题及详细答案&#xff0c;包含测试技术面试题、开发及环境搭建类面试题以及人力资源方向的面试题&#…

代码随想录训练营第42天|01背包问题、LeetCode 416. 分割等和子集

参考 代码随想录 01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里&#xff0c;每件物品的体积为W1&#xff0c;W2至Wn&#xff0c;与之相对应的价值为P1,P2至Pn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品&#xff0c;每种物品有且只有一…

java计算机毕业设计ssm网上拍卖系统vdum4(附源码、数据库)

java计算机毕业设计ssm网上拍卖系统vdum4&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

MySql分库分表

问题分析&#xff1a; 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; 1、IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&#xff0c;产生大量磁盘…

小快轻准,5分钟自助上线,中小型制造企业数字化转型

中小企业作为国民经济的重要组成部分&#xff0c;占据我国企业数量的90%以上。 继《中小企业数字化赋能专项行动方案》发布后&#xff0c;工信部近日印发《中小企业数字化转型指南》&#xff0c;提出14条具体举措&#xff0c;为中小企业明确数字化转型路径。 地方政府也纷纷出…

Linux系统管理、运行级别、关闭防火墙

目录 一、Linux服务管理 1.1 基本概念 1.2 systemctl&#xff08;centos7&#xff0c;很重要&#xff09; 1.2.1 基本语法 1.2.2 查看服务 1.2.3 防火墙操作 1.3 systemctl 设置后台服务的自启配置 二、系统运行级别 2.1 运行级别 2.2 查看当前运行级别 2.2修改当前运行…

8年三届世界杯,8年前端开发,梅西一共踢没了我八千八

转眼2022年即将过去&#xff0c;我已经做了那么久的开发了&#xff0c;一路走来&#xff0c;不断的工作&#xff0c;换工作&#xff0c;找工作&#xff0c;不断的学习新知识。 同时也看着梅西参加了3届世界杯了&#xff0c;逝者如斯夫&#xff0c;不舍昼夜啊。 在这8年里&#…