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

来源:互联网 发布:求几本好看网络黄书 编辑:程序博客网 时间:2024/05/16 18:15

                                                           内核同步(基础)

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

临界区:

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

造成并发的原因:

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

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

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

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

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

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

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

死锁:

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

还需要注意的是:

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

0 0
原创粉丝点击