对信号量的临界区保护

17.进程同步与死锁——信号量临界区保护 1.温故知新通过对信号量的访问和修改,让进程有序推进 问题: empty值必须是正确的,如果empty错了,就不能有序推进了2.共同修改信号量引出的问题//生产者 Producer(item) { P(empty);//生产者先判断 缓存区个数 empty是否满了,empty == 0,阻塞 ... }//生产者P1 register = empty; register = reg 阅读详情

一、概念介绍

临界区(critical section)在任意时刻只允许一个进程对共享资源进行访问。一次只允许一个进程进入的该进程的那一段代码。对于临界资源的访问必须是互斥进行的,也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被称为临界区。

while(TURE){
    进入区
    临界区
    退出区
    剩余区
}

这里写图片描述

信号量(semaphores)允许多个进程(也可以是多个线程)同时使用共享资源。它指出了同时访问共享资源的最大进程数目。它允许多个进程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大进程数目。
信号量除初始化外,仅能通过两个标准的P、V原子操作来访问。量用来记录,信号用来sleep和wakeup。
P的名称来源于荷兰语proberen,即test。
V的名称来源于荷兰语verhogen,即increment。

struct semaphore
{
   int value;//记录资源个数
   PCB *queue;//记录等待在该信号量上的进程
}
P(semaphore s);//消费资源
V(semaphore s);//产生资源

P操作

P(semaphore s){
   s.value--;
   if(s.value<0){
     sleep(s.queue);
   }
}

V操作

V(semaphore s){
  s.value++;
  if(s.value<=0){
     wakeup(s.queue);
  }
}

可以用临界区保护信号量,用信号量实现同步。

二、生产者消费者问题引入

共同修改信号量引出的问题:
这里写图片描述
第j次执行的empty结果就不对了。
错误由多个进程并发操作共享数据引起,且和调度顺序有关,难于发现和调试。

三、解决问题的直观想法

在写共享变量empty时阻止其他进程也访问empty。
这里写图片描述

四、临界区代码的保护原则

(1)互斥进入:如果一个进程在临界区中执行,则其他进程不允许进入。这些进程间的约束关系称为互斥,且这也保证了是临界区。
(2)有空让进:若干进程要求进入空闲临界区时,应尽快使一进程进入临界区。
(3)有限等待:从进程发出请求到允许进入,不能无限等待。

五、进入临界区的尝试

(1)轮换法:

这里写图片描述
互斥进入满足。
有空让进不满足,P0完成后不能接着再次进入,尽管进程P1不在临界区。

(2)标记法:

这里写图片描述

有限等待不满足。

(3)Peterson算法:

结合标记和轮转两种思想。
Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个进程访问一个共享的单用户资源而不发生访问冲突。
这里写图片描述

互斥进入满足:如果两个进程都进入,则flag[0]=flag[1]=true,turn==0==1,矛盾。
有空让进满足:如果P1不在临界区,则flag[1]=false,或者turn=0,都能使p0进入。
有限等待满足:P0要求进入,flag[0]=true,后面的p1不可能一直进入,因为P1执行一次就会让turn=0。

(4)面包店算法:

仍然是标记和轮转的结合,不过这次是解决多个进程访问资源冲突的问题了。
轮转:每个进程都获得一个序号,序号最小的进入。
标记:进程离开时序号为0,不为0的序号即标记。
这里写图片描述

互斥进入满足:Pi在临界区内,Pk试图进入,一定有(num[i],i)<(num[k],k),Pk循环等待。
有空让进满足:如果没有进程在临界区中,最小序号的进程一定能够进入。
有限等待:离开临界区的进程再次进入一定排在最后,所以任一个想进入的进程至多等n个进程。

为实现进程互斥地进入自己的临界区,有软件方法,也有硬件方法。上面介绍的都是软件方法。

进程同步与信号量、信号量临界区保护、信号量代码实现 生产者-消费者实例 当生产者发现 counter == BUFFER_SIZE 生产者等待(阻塞) 当消费者发现 counter == 0 消费者等待(阻塞) 存在问题: 只用counter做判断,在图中情况下会导致P2不会被唤醒。 应该需要另一量(信号量)考虑记录有多少进程阻塞等信息,并进行判断。 信号量 当 sem < 0表示 sem 有多个进程在等待 当 sem > 0 表示有空闲 B,有2个资源可以使用 信号量的定义 queue代表阻塞队列 V()的模型: V(semapho 阅读详情

相关推荐

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

13.信号量临界区保护

1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;2.操作系统使用信号量实现进程同步(合作),走走停停,推进多进程合理有序向前执行; 3.靠临界区保护信号量,靠信号量实现进程同步;0)信号量1)问题 图解: 并发问题例子,empty = -1,但有2个生产者进程睡眠,这说明empty信号量的值是错误的;1)竞争条件: 图片解说:错误和调度顺序有关;2)解决竞争条件的方法 上图显示的执行顺序如下:时间进程代码或操作1P1检查并给empty上锁2P1.register=empt

PacosonSWJTU的博客 820

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 326

操作系统5——同步问题: 信号量实现临界区

用信号量实现临界区 信号量是操作系统提供的一种协调共享资源访问的方法 信号量的抽象数据类型 一个整形(sem),具有两个原子操作 P(): sem减一,如果sem<0,等待,否则继续 V(): sem加一,如果sem≤0,唤醒一个等待的P 信号量是整数 信号量是被保护的变量 初始化完成后,唯一改变一个信号量的值的办法是通过P()和V() 操作必须是原子(p()、v()优先级高于进程的用户代码,不受应用进程代码的干扰) P()能够阻塞,V()不会阻塞 我们假定信号量是公平的 线程不会被无限期阻

qq_40662405的博客 699

AI Agent技术架构与规模化应用:2025年技术深度解析

2025年,AI Agent(人工智能智能体)迎来了规模化应用的拐点时刻。根据Gartner等权威机构预测,企业软件中整合自主型AI的比例将从2024年的不足1%跃升至2028年的33%。本文深入剖析AI Agent的核心技术架构,从规划模块、记忆模块、工具调用模块到底层实现原理,结合Python和Go语言的实际代码示例,全面阐述AI Agent的技术实现路径。同时,本文探讨多智能体协作系统、企业级部署架构以及未来的技术演进方向,为开发者和技术决策者提供系统性的技术参考。关键词:AI Agent、大语言模型

shao.bing的专栏 1348

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理

多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光...

weixin_28963467的博客 2352

操作系统原理:临界区、信号量、管程的同步和互斥

临界区:要访问(读写)的共享资源那段代码称之为临界区。这里的代码并不是指C语言等高级语言的代码,而是指机器语言的代码。 互斥:当线程处于临界区并访问共享资源时,其他线程将不会访问相同的共享资源。 锁 :对资源加上一种保护机制,使得外部程序无法进行访问。对应的反向操作称之为解锁。 死锁:两个或以上的进程,进程之间相互等待对方完成特定任务,造成等待的死循环。 饥饿:一个可执行的进程长期无法获取到CPU的使用权。 信号量:有些进程只需要访问共享资源的某个...

superSmart_Dong的博客 2395

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

用信号量解决进程的同步与互斥探讨

现代操作系统采用多道程序设计机制,多个进程可以并发执行,CPU在进程之间来回切换,共享某些资源,提高了资源的利用率,但这也使得处理并发执行的多个进程之间的冲突和相互制约关系成为了一道难题。如果对并发进程的调度不当,则可能会出现运行结果与切换时间有关的情况,令结果不可再现,影响系统的效率和正确性,严重时还会使系统直接崩溃。就比如你只有一台打印机,有两个进程都需要打印文件,如果直接让他们简单地并发访问

shengxiaweizhi的专栏 1316

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4818

基于情感分析+聚类分析+LDA主题分析对服装产品类的消费者评论分析

本研究旨在通过对服装产品类的消费者评论进行综合分析,为企业提供更全面、更深入的市场洞察和决策支持。同时,本研究的方法和结果也可以为其他领域的消费者评论分析提供借鉴和参考。

m0_64336780的博客 2万+

清华向勇《操作系统》学习笔记10:信号量与管程

10.1 信号量概念 信号量(Semaphore)是另一种临界区的保护机制,它是操作系统提供的一种协调共享资源访问的方法。 它将资源纳入全局考虑,从操作系统的层面对资源进行宏观的调配。 这个机制由Dijkstra在20世纪60年代提出,是早期操作系统的主要同步机制。 信号量Semphore中的整数sem就是这个系统资源剩余量。申请时减少,释放时增加即可,没有时等待分配,所以先进先出。 实现的结构和lock很像。 具体的实现接口为P()和V(),分别是荷兰语(?)增加prolagg和减少verhoog的缩写。

hnZone 664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

L17 信号量临界区保护

为什么要保护信号量和临界区? 在现实中如何保护信号量和临界区? empty = -1:的含义? 表示有一个进程正在睡眠 为什么要保护? 进程中存在一种调度,使得信号量引发错误。所以要保护! 怎么保护信号量? 要上锁 什么是临界区? 当一个进程在进入一段代码时,另外一个进程不能进入对应的修改信号的代码。所以出现了保护修改信号量的临界区。 临界区代码的保护原则? 临界区怎样设计呢? 方法一 用一个轮...

qq_1316238389的博客 300

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

进程与线程:10 信号量临界区保护

信号量临界区保护

weixin_44399845的博客 911

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

操作系统—信号量和信号量临界区的保护

一、背景 008调度主要问题:能够克服竞态条件得到一些不确定结果情况。那么引入了lock锁机制,通过锁机制,形成互斥机制。有了互斥并不完全可以,还需要同步机制。是因为在临界区允许多个进程执行,所以需要同步机制。 二、信号量 信号量的引入: 在临界区中希望多个进程运行,那么不光有互斥,也要有同步功能。比如说读写操作,那么可以用量进程进行执行。 抽象数据类型:一个整形(sem)来表示信号量,两原子操作 p():sem减1,如果sem<0,等待,否则继续。(信号量减一,小于零,那么当前执行p操作的进

weixin_43989347的博客 2381

3.17信号量的临界区保护

date comments categories tags permalink title 2020/3/1 true 操作系统 操作系统 进程 同步 信号量 3.17 信号量的临界区保护 由于信号量是共享数据,生产者...

libing的专栏 336

操作系统 2.10-信号量临界区保护

定义:临界区是指一次只允许一个进程进入的该进程的那一段代码。在这段代码中,多个进程不能同时执行,以避免数据不一致或竞争条件。识别临界区:一个非常重要的工作是找出进程中的临界区代码。例如,在生产者-消费者问题中,读写信号量的代码一定是临界区。用临界区保护信号量用信号量实现同步!

2302_80490510的博客 887

17、信号量临界区保护

ad

qq_43579103的博客 358

操作系统系列学习——信号量临界区保护

一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油!

qq_43264167的博客 550

操作系统学习笔记【P17】——用临界区保护信号量

哈工大李治军老师操作系统课程,P17信号量临界区保护

博客简介 857

操作系统-信号量临界区保护

什么是信号量?通过对这个量的访问和修改,让大家有序推进 1. 共同修改信号量引出的问题 2. 竞争条件 3. 解决竞争条件的直观想法 4. 临界区 临界区:临界区是指进程中的一段需要访问共享资源并且另一个进程处于相应代码区域时便不会被执行的代码区域 互斥:当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享资源 临界区代码的保护原则 5. 临界区...

山丘i 372

linux 临界区保护方法,操作系统-信号量临界区保护

什么是信号量?通过对这个量的访问和修改,让大家有序推进1. 共同修改信号量引出的问题2. 竞争条件3. 解决竞争条件的直观想法4. 临界区临界区:临界区是指进程中的一段需要访问共享资源并且另一个进程处于相应代码区域时便不会被执行的代码区域互斥:当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享资源临界区代码的保护原则5. 临界区尝试一:轮换法如果turn=0,那就...

weixin_30624767的博客 646

信号量临界区保护

qq_46557722的博客 135

【哈工大_操作系统理论】L16&17&18&19 进程同步与信号量&信号量临界区保护&信号量的代码实现&死锁处理

隐蔽的队列:tmp作为局部变量,存放在当前进程内核栈中。下个进程PCB找到下个进程的内核栈,内核栈找到tmp;修改empty需要 mutex 保护,但其实mutex也是一个变量,将导致修改mutex也需要保护,修改mutex的保护也需要保护,没完没了。关中断:两个进程不能同时进入临界区 -> 阻止调度 -> 关中断(cli)。若empty修改到一半,跳转到其他进程运行,将导致少减一个。定义了一个信号量结构体,包含信号量名称、值、等待唤醒进程队列。磁盘读完后,睡眠的进程将由中断唤醒。

weixin_53159274的博客 977

操作系统——临界区对信号量保护的实现

一、临界区的引出 从上一篇文章中,我们了解到了信号量的概念。信号量的数值表达的语义用来控制进程的走和停,因此,信号量的数值是非常重要的,信号量的数值吧必须和信号量的语义相一致,才能正确地决定进程的同步。比如信号量的数值为0,但此时实际上有一个进程阻塞在该信号量,那么即使对该信号量执行V操作也不会唤醒被阻塞的进程。 但是信号量是一个会被多个进程操作的共享变量,各个并发进程竞争使用CPU会导致各种各样的调度问题,部分调度顺序可能会导致信号量出现语义错误。 以生产者——消费者问题为例,初始情况empty

m0_56561130的博客 947
上一篇: /etc/skel/目录
下一篇: 用户管理(4)---chage、whoami
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值