操作系统-信号量机制(整型信号量 记录型信号量)与用信号量实现进程互斥,同步,前驱关系

文章目录

  • 信号量机制
    • 总览
    • 信号量机制
      • 整型信号量
      • 记录型信号量
        • 例子
        • 记录型信号量小结
    • 小结
  • 用信号量实现进程互斥,同步,前驱关系
    • 总览
    • 信号量机制实现进程互斥
    • 信号量机制实现进程同步
      • 进程同步
      • 信号量实现进程同步
    • 信号量机制实现前驱关系
    • 小结

信号量机制

总览

在这里插入图片描述

信号量机制

wait:进入区的操作
signal:退出区的操作
在这里插入图片描述

整型信号量

wait:检查当前的资源是否足够,不够则卡住循环,够则信号量减少一个
signal:信号量加一个

检查和上锁一气呵成,所以不会出现未及时上锁而切换进程导致其他进程通过检查进入临界区的情况

在这里插入图片描述

记录型信号量

在这里插入图片描述

例子

首先要进行P0进程的wait,value的初始值是2在这里插入图片描述
然后wait后value的值为1,P0进程开始使用得到的打印机资源。然后进程切换到P1,然后P1要执行wait
在这里插入图片描述
然后wait后value的值为0,P1进程开始使用得到的打印机资源。此时value为0资源分配完,然后进程再切换到P2,准备执行wait
在这里插入图片描述
然后wait后value的值为-1,此时小于0,意味着此时无法使用资源,此时会使用block函数使得P2进程挂到信号量的等待队列里
在这里插入图片描述
此时由于进程P2进入阻塞态,CPU转而为P3进程服务,然后wait后值为-2小于零,所以也会执行block,然后P3挂入等待队列队尾
在这里插入图片描述
接下来CPU为P0服务,假设此时P0进程使用完打印机,执行signal原语,value值加一个,此时如果value值依然小于等于0,那么会执行wakeup,唤醒等待队列中队头的进程。然后进等到程切换时,CPU会切换到P2
在这里插入图片描述
此时P2可以开始使用打印机资源,使用完后再执行signal,此时value+1,然后唤醒等待队列队头进程,P3进程由阻塞态变为就绪态

在这里插入图片描述

此时如果进程切换到P1,此时P1使用完打印机会执行signal,此时value大于0,所以不会唤醒

在这里插入图片描述
然后进程切换到P3,使用完打印机后,然后value值+1,不会唤醒
在这里插入图片描述

记录型信号量小结

自我阻塞:主动放弃CPU的使用权
在这里插入图片描述
记录型信号量通过P操作(wait/申请)和V操作(signal/释放)实现系统资源的申请和释放。以下是这两种操作的具体实现机制:

  • 资源申请(P操作/Wait操作):当一个进程需要使用某个资源时,它会执行P操作来申请该资源。在执行P操作时,进程会检查信号量的值。如果信号量的值大于0,表示有可用的资源,进程将进入临界区,并将信号量的值减1。如果信号量的值为0,表示没有可用资源,进程不能立即进入临界区,而是会被阻塞,放入等待队列中,直到信号量的值变为正数。
  • 资源释放(V操作/Signal操作):当一个进程完成了对资源的使用,并准备退出临界区时,它会执行V操作来释放资源。这个操作会将信号量的值加1,表示增加了一个可用资源。同时,如果有其他进程因为资源不足而被阻塞在等待队列中,系统会选择其中一个或多个进程解除阻塞,允许它们继续执行。

小结

block:value<0
wakeup:value<=0

在这里插入图片描述

用信号量实现进程互斥,同步,前驱关系

总览

在这里插入图片描述

信号量机制实现进程互斥

在这里插入图片描述
缺少P:没有P,没有限制,那么不会互斥访问

在这里插入图片描述

信号量机制实现进程同步

进程同步

在这里插入图片描述

信号量实现进程同步

在这里插入图片描述

信号量机制实现前驱关系

前驱:及当前事件的发生必须要指向该事件的所有事件都发生完才行

在这里插入图片描述

小结

在这里插入图片描述

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

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

相关文章

索引失效问题

1、 like 以%开头&#xff0c;索引无效&#xff1b;当like前缀没有%&#xff0c;后缀有%时&#xff0c;索引有效。 &#xff08;1&#xff09;创建索引 create index text1 on emp(name); &#xff08;2&#xff09;不走索引 EXPLAIN select id,name,age,workno from emp wh…

什么是MVVM模型

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种用于构建 Web 前端应用程序的架构模式。它是从传统的 MVC&#xff08;Model-View-Controller&#xff09;模型演变而来&#xff0c;旨在解决界面逻辑与业务逻辑之间的耦合问题。 在传统的 MVC 架构中&#xff0c;View …

【Linux笔记】文件系统与软硬链接

一、文件系统概述 1.1、先来聊一聊“磁盘” 在讲解文件系统之前&#xff0c;我觉得有必要先聊一下“磁盘”&#xff0c;因为我觉得如果弄懂了磁盘的存储原理&#xff0c;大家可能更容易理解文件系统是怎么管理数据的&#xff0c;并且理解计算机是怎么将磁盘抽象到文件系统的。…

前端常用代码整理(不断更新中)— js,jquery篇

1.随机函数代码 function getRandom(min, max) {return Math.floor(Math.random() * (max - min 1)) min}2.倒计时代码 let now new Date()// 2. 得到指定时间的时间戳let last new Date(这里写想要达到的时间)// 3. &#xff08;计算剩余的毫秒数&#xff09; / 1000 剩余…

如何在 Linux 中安装 s3cmd 并管理 Amazon s3 存储桶

概述 S3&#xff0c; – 简单存储服务- 是亚马逊的存储服务&#xff0c;为 IT 团队提供一种安全、可扩展且可靠的方式来存储和检索云上的文件和文件夹。 S3 可确保数据在需要时可用并随着需求的增长而扩展&#xff0c;从而帮助您充分利用数据。 通常&#xff0c;在登录到您的…

RabbitMQ-5.消费者的可靠性

消费者的可靠性 5.消费者的可靠性5.1.消费者确认机制5.2.失败重试机制5.3.失败处理策略5.4.业务幂等性5.4.1.唯一消息ID5.4.2.业务判断 5.5.兜底方案 5.消费者的可靠性 当RabbitMQ向消费者投递消息以后&#xff0c;需要知道消费者的处理状态如何。因为消息投递给消费者并不代表…

【数据结构与算法】堆 / 堆排序 / TopK问题(Heap)

文章目录 1.堆2.C语言实现堆2.1 堆结构与基本操作2.2 其它辅助操作2.3 堆的基本操作2.3.1 插入2.3.2 删除 3. 堆排序4. TopK5. 所有代码 1.堆 堆总是一棵完全二叉树&#xff0c;而完全二叉树更适合使用**顺序结构&#xff08;数组&#xff09;**存储&#xff0c;完全二叉树前h…

阿里云企业用户2核4G5M固定带宽199元一年,续费不涨价

2024年2月阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核…

Echarts统计用户近七日走量趋势:前后端实现

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525;网站…

嵌入式学习Day14 C语言 --- 位运算

位运算 注意&#xff1a;符号位也遵循这个规则 一、按位与(&) 运算规则&#xff1a;一假则假 int a 0x33;a & 0x55;0011 00110101 0101 &----------0001 0001 //0x11 二、按位或(|) 运算规则&#xff1a;一真则真 int a 0x33;a |0x55;0011 00110101 0101 |…

STM32Cubmax stm32f103zet6 SPI通讯

一、基本概念 SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM&#xff0c; FLASH&#xff0c;实时时 钟&#xff0c; AD 转换器&#xff0c;还有数…

GLSL ES 1.0

GLSL ES 概述 写在前面 程序是大小写敏感的每一个语句都应该以英文分号结束一个shader必须包含一个main函数&#xff0c;该函数不接受任何参数&#xff0c;并且返回voidvoid main() { }数据值类型 GLSL支持三种数据类型&#xff1a; 整型浮点型&#xff1a;必须包含小数点&…

eclipse使用google的Java代码格式

插件下载地址 1.下载eclipse的插件 2.下载的jar包放到eclipse安装目录的dropins文件夹 D:\install_package\STS\sts-4.10.0.RELEASE\dropins&#xff13;.重启后设置 eclipse - windows - preference - java - code style - formatter -

Excel——合并计算

1.表格的合并计算&#xff08;单张表格/多个表格&#xff09; Q&#xff1a;请统计两个表格中各商品的总销量和总销售额&#xff0c;将结果放置在下方任意位置。 A&#xff1a;选择一个需要将合并计算数据放置区域的空白单元格 选择【数据】——【合并计算】&#xff0c;【函…

Linux安装Java

yum安装 下面命令直接复制粘贴一件安装java17 yum list installed | grep java #查看已经安装的javayum remove java* -y #移除现在系统已经安装的javayum list | grep java-17 #查看安装java17yum install -y java-17-openjdk #安装java17此处可…

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来&#xff0c;算子的 sub-task 需要处理的数据量 > 能够处理的数据量&#xff0c;比如&#xff1a; 当前某个 sub-task 只能处理 1w qps 的数据&#xff0c;但实际上到来 2w qps 的数据&#xff0c;但是实际只能处理 1w 条&#…

JVM 性能调优- 五种内存溢出(5)

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…

裸机开发及开发环境搭建

ARM 的裸机开发&#xff0c;也就是不带操作系统开发&#xff0c;就和我们开发 STM32 一样&#xff0c;如果 有 STM32 开发经验的话学起本篇会很容易 1 、裸机开发是了解所使用的 CPU 最直接、最简单的方法&#xff0c;裸机开发是直接操作 CPU 的寄存器。 Linux 驱动开发…

人工智能 | 深度学习的进展

深度学习的进展 深度学习是人工智能领域的一个重要分支&#xff0c;它利用神经网络模拟人类大脑的学习过程&#xff0c;通过大量数据训练模型&#xff0c;使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来&#xff0c;深度学习在多个领域取得了显著的进展&#…

React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)

1、先上效果 树型控件&#xff0c;选中项形成一棵新的树&#xff0c;若父选中&#xff0c;子自动选中&#xff0c;子取消&#xff0c;父不取消&#xff0c;子选中&#xff0c;所有的父节点自动取消。同时支持模糊检索&#xff0c;会检索出所有包含该内容的关联节点。 2、环境准…