Linux内核中的同步机制:进程的同步同步机制,线程的同步机制 原文地址:https://blog.csdn.net/weixin_/article/details/ 1. 什么是同步,为什么要同步,什么是互斥 1.1 同步和互斥 同步:用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。 互斥:实现控制某些系统资源在的机制。 1.2 为什么要同步 在操作系统引入了进程概念,进程成为调度实体后,系统就具备了并发执行多个进程的能力,但也导致了系统中各个进程之间的资源竞争和共享。另外,由于中断、异常机制的引入,以及内核态抢占都导致了这些内核执行路径(进程)以交错的方式运行。对于这些交错路径执行的内核路径,如不采取必要的同步措施,将会对一些关键数据结构进行交错访问和修改,从而导致这些数据结构状态的不一致,进而导致系统崩溃。因此,为了确保系统高效稳定有序地运行,linux必须要采用同步机制。 内核中造成竞争条件的原因:竞争原因说明中断中断随时会发生,也就会随时打断当前执行的代码。如果中断和被打断的代码在相同的临界区,就产生了竞争条件软中断和tasklet软中断和tasklet也会随时被内核唤醒执行,也会像中断一样打断正在执行的代码内核抢占内核具有抢占性, 发生抢占时,如果抢占的线程和被抢占的线程在相同的临界区,就产生了竞争条件睡眠及用户空间的同步用户进程睡眠后,调度程序会唤醒-个新的用户进程,新的用户进程和睡眠的进程可能在同一个临界区中对称多处理2个或多个处理器可以同时执行相同的代码 举一个多进程访问同一个资源的例子小明房间里有一双滑板鞋,早上起床上学时看到还在,于是在学校里和同学约好下课一块玩滑板,结果小明房间的门没有锁,在小明离开房间期间,他的弟弟进入房间将滑板拿走了,等小明回去一看,滑板鞋已经不在了。造成的后果就是小明将失信于同学,解决办法就是将房间锁住。 上面的滑板鞋就是临界区,所谓 小明和他弟弟构成了竞争条件() 同步技术就是为了解决资源访问竞争产生问题的一种方法。上面的锁门就说同步技术的其中一种方法 2. 死锁 2.1 概念死锁就是所有线程都持有对方所需要的资源,他们在相互等待对方释放,导致谁也无法继续执行下去。死锁就是所有线程都持有对方所需要的资源,他们在相互等待对方释放,导致谁也无法继续执行下去。 2.2 例子ABBA死锁 线程1 线程2获得锁A 获得锁B试图获得锁B 试图获得锁A等待锁B 等待锁A 2.3 死锁的起因1.竞争不可抢占性资源引起死锁2.竞争可消耗资源引起死锁3.进程推进顺序不当引起死锁(对资源申请和访问的不当) 2.4.产生死锁的必要条件(*)条件(在一段时间,一个资源只能被一个进程占用)条件(进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已经被其他进程占有,此时的进程被阻塞,但对自己的资源又保持不放)资源(进程已经获得的资源未被用完不能被抢占,只能在进程使用完时由自己释放)条件(在发生死锁时,必然存在一个进程——资源的循环链) 2.5.处理死锁的方法预防死锁(设置某些限制条件去破坏产生死锁四个必要条件之一)避免死锁(在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免发生死 锁,如,它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。)检测死锁(在进程运行过程红发生死锁后,通过检测机构检测死锁的发生,然后采取适当的措施,把进程从死锁中解救出来)解除死锁(撤销一些进程,或回收资源,将他们分配给已处于阻塞状态的进程)对死锁的防范程度: 预防死锁>避免死锁>检测死锁>解除死锁对资源的利用率的提高,以及进程因资源因素而阻塞的频度:解除死锁>检测死锁>避免死锁>预防死锁(四个方法讲其中的考点方法) 下面一些简单的规则可以帮助我们避免死锁:如果有多个锁的话,尽量确保每个线程都是。(即加锁a->b->c,解锁c->b->a)。即设置一个超时时间,防止一直等待下去。。设计应。加锁的方案越复杂就越容易出现死锁。 3. 同步的几种手段 原子操作——指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束自旋锁——当一个线程了锁之后,其他试图这个锁的线程一直在循环等待这个锁,直至锁重新可用。读写自旋锁——对读和写特殊要求的自旋锁信号量——和循环检测的自旋锁不同,线程不到信号量的时候,会进入睡眠,直至有信号量释放出来时,才会唤醒睡眠的线程,进入临界区执行。读写信号量——对读和写特殊要求的信号量互斥体——互斥体也是一种可以睡眠的锁,相当于二值信号量,也就是最多只允许一个线程访问临界区完成变量大内核锁顺序锁禁止抢占顺序和屏障读-复制-更新(RCU)每CPU变量 本节讨论了大约11种内核同步方法,除了大内核锁已经不再推荐使用之外,其他各种锁都有其适用的场景。 了解了各种同步方法的适用场景,才能正确的使用它们,使我们的代码在安全的保障下达到最优的性能。 同步的目的就是为了保障数据的安全,其实就是保障各个线程之间共享资源的安全,





2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/87578.html


