当前位置: 首页 > Linux kernrl > 正文

内核同步(死锁等,基础)

                                                           内核同步(基础)

在访问共享数据的时候必须使用要留意保护共享资源,防止共享资源并发访问。如果发生并发多个线程就可能会交替的修改或者覆盖内存中的数据,而且这种错误不易调试,因为我们并不能确定到底什么时候会发生并发,但是真的有可能发生这种令人恶心的问题。

临界区:

就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,必须使用原子操作或者锁来保证不要并发。

造成并发的原因:

用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度。如果发生了抢占,然后两个进程还都是需要同一个共享数据段,此时竞争条件便产生了。然后就出事了。

同样的内核中有类似可能造成并发执行的原因:

中断:中断几乎可以在任何时刻异步发生,当然可能打断正在执行的代码然后竞争条件产生

软中断和tasklet:   内核可以在任何时刻唤醒或者调度软中断和tasklet,打断正在执行的代码

内核抢占:因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。

睡眠与用户空间的同步:在内核执行的进程中可能会睡眠,这就会唤醒调度程序,从而导致调度一个新的用户进程执行。

对称多处理器,两个或者多个处理器同时执行代码。

死锁:

         是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 。典型的四路交通问题如果大家都等待其中一个方向的汽车移动那么,整个交通都不可以移动,永远等待下去。

还需要注意的是:

我们用了很大时间精力是为了保护什么?我们是为了保护数据而不是保护代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

]]>

本文固定链接: http://zmrlinux.com/2015/06/12/%e5%86%85%e6%a0%b8%e5%90%8c%e6%ad%a5%ef%bc%88%e6%ad%bb%e9%94%81%e7%ad%89%ef%bc%8c%e5%9f%ba%e7%a1%80%ef%bc%89/ | Kernel & Me

该日志由 root 于2015年06月12日发表在 Linux kernrl 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 内核同步(死锁等,基础) | Kernel & Me
【上一篇】
【下一篇】