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

news2024/11/15 23:32:57

文章目录

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

信号量机制

总览

在这里插入图片描述

信号量机制

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,没有限制,那么不会互斥访问

在这里插入图片描述

信号量机制实现进程同步

进程同步

在这里插入图片描述

信号量实现进程同步

在这里插入图片描述

信号量机制实现前驱关系

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

在这里插入图片描述

小结

在这里插入图片描述

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

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

相关文章

mysql项目实战,常用sql语句的实战笔记

1.使用sql语句对数据库进行创建 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20) NOT NULL COMMENT 学生姓名,ssex VARCHAR(10) NOT NULL…

北斗导航助力春运,让回家之路更温馨便捷

北斗导航助力春运&#xff0c;让回家之路更温馨便捷 春运&#xff0c;即春节运输&#xff0c;是中国在农历春节前后发生的一种大规模的高交通运输压力的现象。它它不仅考验着国家的交通运输能力&#xff0c;也考验着公共服务和应急管理的水平。在这样一个背景下&#xff0c;北…

计算机毕业设计 | SpringBoot大型旅游网站 旅行后台管理系统(附源码)

1&#xff0c; 概述 1.1 项目背景 随着互联网技术的快速发展和普及&#xff0c;旅游行业逐渐转向线上&#xff0c;越来越多的游客选择在线预订旅游产品。传统的线下旅行社模式已不能满足市场需求&#xff0c;因此&#xff0c;开发一个高效、便捷的旅游网站成为行业的迫切需求…

L1-080 乘法口诀数列

一、题目 二、解题思路 三、代码 #include<iostream> using namespace std; int main() {int a1,a2,n;cin>>a1>>a2>>n;if(n1){cout<<a1;return 0; }int a[n*2];cout<<a1<<" "<<a2;a[0]a1;a[1]a2;for(int i2,j2;i&l…

NX/UG二次开发—其他—矩形套料(排料)简介

算法逻辑 排料方法一定时间内获取近似解的算法 看了一些论文和博客&#xff0c;一般排料方法采用最低水平线算法排料&#xff0c;再此基础上增加空余区域填充。 然后配合遗传学算法||模拟退火算法||蚁群算法||免疫算法等&#xff0c;在一定时间内求得一组最优解。 在最简单的…

Windows 启动项无法打开 Aanconda 问题。pyqt noBinding

windows中点击Anaconda navigator 没有反应: ## 解决 (右键运行Anaconda prompt) 以管理员身份运行&#xff1a; 分别运行以下命令&#xff1a; conda update conda conda update anaconda-navigatorpip uninstall PyQt5 pip install PyQt5 pip install pyqtwebengine

Spring GateWay

概述简介 能干什么 反向代理 鉴权 流量控制 熔断 日志监控 Spring Cloud Gateway 与Zuul的区别 在SpringCloud Finchley正式版之前&#xff0c;Spring Cloud推荐的网关是 Netflix提供的Zuul: 1、Zuul 1.x&#xff0c;是一个基于阻塞Ⅳ/O的APl Gateway 2、Zuul 1.x基于Servl…

双非本科准备秋招(19.1)—— Synchronized优化

轻量级锁 流程 一个对象虽然有多线程加锁&#xff0c;但是加锁时间是错开的&#xff0c;那么可以用轻量级锁优化。 语法还是synchronized&#xff0c;只是对使用者是透明的。 static final Object obj new Object(); public static void method1() {synchronized( obj ) {//…

Unity AnimationRigging无法修改权重?

个人理解&#xff0c;已解决无法修改权重的问题: unity自带的动画系统是在FixUpdate和Update之后LateUpdate之前执行&#xff0c;如果在这FixedUpdate或Update函数内更新AnimationRigging内的权重后&#xff0c;内部动画系统会覆盖权重的修改&#xff0c;导致无法正确更新&…

C语言:函数递归

创作不易&#xff0c;给个三连吧&#xff01;&#xff01; 一、什么是递归 递归式一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是自己调用自己。 递归的思想&#xff1a; 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似&#xff0c;但规模较小的⼦问题来求解…

FPC概述及仿真

柔性印刷电路(FPC)是由聚酰亚胺或聚酯薄膜制成的高可靠性和优异的柔性印刷电路板。它具有布线密度高、重量轻、厚度薄、可弯曲性好等特点。 概述 FPC&#xff0c;也被称为柔性印刷电路&#xff0c;因其重量轻&#xff0c;厚度薄&#xff0c;自由弯曲和折叠等优异特性而受到青睐…

Nicn的刷题日常之操作一维数组

1.题目描述 创建一个整形数组&#xff0c;完成对数组的操作 实现函数init() 初始化数组为全0实现print() 打印数组的每个元素实现reverse() 函数完成数组元素的逆置。 要求&#xff1a;自己设计以上函数的参数&#xff0c;返回值。 2.解题 void Init(int arr[], int sz, …

网站被攻击有什么办法呢?

最近&#xff0c;德迅云安全遇到不少网站用户遇到攻击问题&#xff0c;来咨询安全解决方案。目前在所有的网络攻击方式中&#xff0c;DDoS是最常见&#xff0c;也是最高频的攻击方式之一。不少用户网站上线后&#xff0c;经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码

TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…

Appium报错:无法打开appPackage

能打开微信、微博&#xff0c;但是要打开另一个app的时候&#xff0c;就出现上面的报错信息。 报错信息说参考&#xff1a;https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md &#xff0c;链接地址变了&#xff0c;找…

数据结构——单链表详解

目录 前言 一.什么是链表 1.概念 ​编辑 2.分类 二.单链表的实现(不带头单向不循环链表) 2.1初始化 2.2打印 2.3创建新节点 2.4头插、尾插 2.5头删、尾删 2.6查找 2.7在指定位置之前插入 2.8在指定位置之后插入 2.9删除pos位置 2.10删除pos之后的 2.11销毁链表…

JavaScript 入门

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

B站UP主实时信息获取展示php源码

B站UP主实时数据展示系统 - PHP源码分享 想要实时追踪你心仪的B站UP主的最新动态吗&#xff1f;现在&#xff0c;你可以轻松获取并展示B站UP主的实时数据&#xff0c;包括粉丝数、作品数、头像、播放量等关键信息。 功能亮点&#xff1a; 实时更新&#xff1a;系统通过B站AP…

高中学校档案室主要做什么

高中学校档案室主要负责管理、保存和维护学校的各类档案文件。具体工作内容包括&#xff1a; 1. 档案收集&#xff1a;负责收集学校各个部门的档案文件&#xff0c;包括学生档案、教职工档案、教学档案、行政档案等。 2. 档案分类和整理&#xff1a;对收集到的档案文件进行分类…

LeetCode Python - 1.两数之和

文章目录 题目答案运行结果 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能…