【操作系统】进程管理——信号量机制(个人笔记)

news2024/9/30 2:44:07

学习日期:2024.7.9

内容摘要:信号量机制,用信号量实现进程的同步与互斥


信号量机制

信号量的概念

在上节内容中,我们学习了进程互斥的软件和硬件解决方案,但这些方案都有各自的问题,双标志法都因为检查和上锁两个步骤不能一气呵成,会导致两个进程一起进入临界区,而Peterson算法和几个基于硬件实现方式的方法虽然解决了这些问题,但这些方法都会导致忙等。

1965年,荷兰科学家Dijkstra(就是《数据结构》图论那位)提出了一种实现进程同步、互斥的方法——信号量机制。

信号量其实就是一个变量(可以是一个整数,也可以是更复杂的数据结构的变量),可以用一个信号量来表示系统中某种资源的数量,比如系统只有一台打印机,就可以设置一个初始值为1的信号量。

用户进程可以通过操作系统提供的一对原语来对信号量进行操作,从而很方便的实现进程互斥和同步。

一对原语:wait(S)原语和signal(S)原语,信号量S是函数调用时传入的一个参数,而wait和signal两个原语常简称为P,V操作(来自荷兰语proberen和verhogen),简写为P(S)和V(S)

整型信号量

用一个整数型的变量作为信号量,用来表示系统中某种资源的变量。

例:假如某系统中有一台打印机,初始化整型信号量S,S=1。P操作是占用资源,S=S-1,V操作是释放资源,S=S+1,每次调用之前先判断S的值,如果S>=1,就P一次,否则等待。

逻辑很简单,就是用S来计数,因为用了原语实现检查和上锁一气呵成,避免了并发、异步导致的问题。

缺点:还是要利用while结果循环等待,不满足“让权等待”原则,没有解决忙等问题。

记录型信号量(重点)

整型信号量的缺陷是存在忙等问题,因此人们又提出了记录型信号量,即用一种记录型数据结构表示信号量

假如S=2,每次进行一次P操作,S.value--,每次执行一次V操作,S.value++,如果P操作后小于0,进程阻塞,当S为负时,S.value的绝对值就是正在等待资源的进程的数目

P操作中一定是先S.value--,之后如果S<0再block;V操作中一定是先S.value++,之后如果S.value<=0再wakeup。注意理解原因

S.value的初始值表示系统中某种资源的数目,S.value++后<=0,说明有进程在等待资源,因此调用wakeup原语唤醒等待队列中的第一个进程(被唤醒进程从阻塞态转换为就绪态)。

S.value==0,资源恰好分配完,S.value==-x,有x个进程正在等待资源。

因为在资源不足时,进程会使用block原语自我阻塞,主动放弃处理机,所以遵循了让权等待原则,不会出现忙等

用信号量机制实现进程的同步与互斥

一个信号量对应一种资源,信号量的值=这种资源的剩余数量(信号量的值如果小于0,说明有进程在等待这个资源,绝对值即为等待的进程数)

信号量机制实现进程互斥

1.分析并发进程的关键活动,划分临界区

2.设置互斥信号量mutex,初始值为1,对不同的临界资源要设置不同的互斥信号量

3.在进入区P(mutex),申请资源

4.在退出区V(mutex),释放资源

注意:P,V操作必须要成对出现,申请资源和释放资源一定会成对出现。

信号量机制实现进程同步

知识回顾:进程同步:让各并发的进程按照某种我们期望的顺序推进。

1.分析什么地方需要同步关系,即分析需要“一前一后”的两个(或更多)操作

2.设置同步信号量S初始值为0

3.在“前操作”之后执行V(S)

4.在“后操作”之前执行P(S)

比如说两个进程A,B,我们希望A先执行,B后执行。此时S代表一个信号,即A已经完成的信号。在A执行完之后,释放信号在B执行之前,检查信号。简记为“前V后P,前后后前

如果先执行到B,因为会先进行P(S)操作,此时S--后S=-1,表示此时没有可用资源,因此P操作中会执行block原语,进程会进入阻塞队列。当执行完A之后,S++,此时S>=0,就会在V操作中执行wakeup原语,唤醒B进程,这样就实现了按我们期望的顺序推进进程。


感谢您看到这里,如果满意的话麻烦您点个赞支持一下,个人主页还有更多内容分享。

内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

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

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

相关文章

机器人三定律及伦理分析

全世界的机器人定律并没有一个统一的标准或体系&#xff0c;但是在科学文献中&#xff0c;最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础&#xff0c;分析现有的机器人伦理和实际应用中的问题&#xff0c;给出若干实例&#xff0c;并对相…

LVS集群及其它的NAT模式

1.lvs集群作用&#xff1a;是linux的内核层面实现负载均衡的软件&#xff1b;将多个后端服务器组成一个高可用、高性能的服务器的集群&#xff0c;通过负载均衡的算法将客户端的请求分发到后端的服务器上&#xff0c;通过这种方式实现高可用和负载均衡。 2.集群和分布式&#…

【光伏仿真系统】光伏设计的基本步骤

随着全球对可再生能源需求的不断增长&#xff0c;光伏发电作为一种清洁、可再生的能源形式&#xff0c;正日益受到重视。光伏设计是确保光伏系统高效、安全、经济运行的关键环节&#xff0c;它涉及从选址评估到系统安装与维护的全过程。本文将详细介绍光伏设计的基本步骤&#…

AI大模型走进汽车车机,智驾将是未来

车机里的AI大模型在汽车行业中的应用越来越广泛&#xff0c;主要体现在智能座舱和自动驾驶系统的深度融合上。通过将AI大模型应用于车机系统&#xff0c;可以实现更高智能化的人车交互体验。AI大模型作为人工智能发展的核心引擎&#xff0c;正在成为汽车智能化发展的关键之一。…

【靶机实战】GeoServer 远程代码执行漏洞复现

# 在线靶场 可以通过访问极核官方靶场开启靶机实验&#xff1a;极核靶场 -> 漏洞复现靶场 -> GeoServer-远程代码执行 原文&#xff1a;【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell (get-shell.com) # 简介 CVE-2024-36401是一个高危的远程代码执行漏…

Springboot项目实训--day2

今天学习的是idea和MySQL的连接&#xff0c;以及一些基本的增删改查的功能实现。 一、软件下载 昨天下载了idea&#xff0c;今天要是西安它们的连接&#xff0c;就需要再下载MySQL&#xff0c;我的MySQL是前面几个学期别人帮忙下载的&#xff0c;所以具体的操作步骤我也不清楚…

VSTO插件功能介绍-清除空行(列)

提示目前我的插件命名为“哆哆Excel”&#xff0c;还没有打包&#xff0c;主要是自己工作中要用到的东西&#xff0c;它能提高我的工作效率&#xff0c;10倍以上开发&#xff1a;Visual Studio 2019语言&#xff1a;VB.net看个图吧 今天要记录的问题是这样子的 当时有一个同事&…

HTTP 概况

Web的应用层协议是超文本传输协议(HyperTextTransferProtocol&#xff0c;HTTP)&#xff0c;它是 Web的核心。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中&#xff0c;通过交换HTTP报文进行会话。HTTP定义了这些报文的结构以及…

基于CentOS Stream 9平台搭建FRP内网穿透

内网穿透方法很多&#xff0c;本文以github上很火的frp为例 1.frp官方 文档&#xff1a;https://gofrp.org/zh-cn/docs/overview/ 1.1 下载 https://github.com/fatedier/frp/releases 选中合适的版本 2. 服务端&#xff08;服务器&#xff09;搭建frps 需要公网IP服务器 选…

Qt Creator仿Visual Studio黑色主题

转自本人博客&#xff1a;Qt Creator仿Visual Studio黑色主题 1.演示 配置文件和步骤在后面&#xff0c;先看成品&#xff0c;分别是QWidget和QML的代码编写界面&#xff1a; 2. 主题配置文件 下载链接&#xff1a;QtCreator _theme_VS_dark.xml 也可以自己新建一个xml文件&…

【单片机毕业设计选题24053】-基于单片机的WiFi控制门禁系统设计

系统功能: 系统上电后OLED显示智能门禁系统 Door:xxxxxx 初始化ESP8266完成后显示 Door:Closed 短按按键SW4可打开电磁锁OLED显示Door:Open&#xff0c;约五秒后电磁锁自动关闭OLED 显示Door:Closed 根据“TCP调试助手使用说明”操作&#xff0c; 在调试助手界面发送Open后…

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算&#xff0c;基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

雷达视频采集卡 HPx-410

产品简介 雷达视频采集卡 HPx-410&#xff0c;应用于接入导航雷达数据&#xff0c;导航雷达视频&#xff0c;适用于JRC雷达、古野furuon雷达、Sperry雷达等多种型号的雷达。 HPx-410 可以接入导航雷达数据&#xff0c;引入导航雷达原始回波&#xff0c;然后将雷达视频采集到计…

PageDTO<T>,PageQuery,BeanUtils,CollUtils的封装

一、PageDTO<T> import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.annotation.JsonIgnore; import com.tianji.common.utils.BeanUtils; import com.tianji.common.utils.CollUtils; import com.tianji.common.utils.…

人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作与代码详解。在上一节课中的OpenCV基础操作我们了解到OpenCV是一个开源的计算机视觉软件库。它提供了各种视觉处理函数&#xff0c;并支持多种编程语言&…

数据结构基础--------【二叉树题型】

1、前提(待补充) 1.**DFS&#xff08;Depth First Search&#xff09;&#x1f617;*递归法得到最终的数组&#xff08;深度优先算法&#xff09; 其过程简要来说是对每一个可能的分支路径深入到不能再深入为止&#xff0c;如果遇到死路就往回退&#xff0c;回退过程中如果遇…

MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 MMGPL: Multimodal Medical Data Analysis with Graph Prompt Learning MMGPL: 多模态医学数据分析与图提示学习 01 文献速递介绍 神经学障碍&#xff0c;包括自闭症谱系障碍&#xff08;ASD&#xff09;&#xff08;Lord等&#xff0c;2018年&#xff09;和阿…

使用Maven命令将第三方jar包安装到maven本地仓库

使用Maven命令将第三方jar包安装到maven本地仓库 事例&#xff1a; 第三方jar包 &#xff1a;common-pojo-1.0-SNAPSHOT.jar Maven命令 mvn install:install-file -Dfilejar包在本地磁盘的路径 -DgroupId组织名称 -DartifactId项目名称 -Dversion版本号 -Dpackaging打包方式 完…

LLM-大模型私有模型训练步骤方法总结

文章目录 前言预训练&#xff08;Pretrained&#xff09;步骤模型选择确定应用场景数据采集清理数据预训练模型 微调&#xff08;Fine Tuning&#xff09;合规对齐 (Alignment)集成 LLM 至 APP总结 前言 本文将从宏观层面说明 LLM 私有模型的训练步骤&#xff0c;包括预训练&a…

【多媒体】Java实现MP4和MP3音视频播放器【JavaFX】【更多功能的播放器】【音视频播放】

在Java中播放视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库。…