内核同步

1. 内核为什么引入同步机制呢?

由于中断、异常机制的引入,以及内核态抢占导致了这些内核控制路径(进程)以交错的方式运行。对于这些交错路径执行的内核控制路径,如不采取必要的同步措施,将会对一些关键数据结构进行交错访问和修改,从而导致这些数据结构状态的不一致,进而导致系统崩溃。因此,为了确保系统高效稳定有序地运行,内核必须要采用同步机制。

2. 内核同步机制的概念

在linux系统中,我们把对共享的资源进行访问的代码片段称为临界区。把出现多个进程对同一共享资源进行访问的资源称为临界资源。
当两个内核任务处于同一临界区时称为竞争状态。把避免并发和防止竞争状态称为同步。

3. 内核中造成并发执行的原因

1. 中断处理

当进程在访问某个临界资源的时候发生了中断,随后进入中断处理程序,如果在中断处理程序中,也访问了该临界资源。虽然不是严格意义上的并发,但是也会造成了对该资源的竞态。

2. 内核态抢占

当进程在访问某个临界资源的时候发生内核态抢占,随后进入了高优先级的进程,如果该进程也访问了同一临界资源,那么就会造成进程与进程之间的并发。

3. 多处理器并发

多处理器系统上的进程与进程之间是严格意义上的并发,每个处理器都可以独自调度运行一个进程,在同一时刻有多个进程在同时运行。

4. 睡眠

在内核执行的进程可能会睡眠,这就会唤醒调度程序,从而导致调度程序调度一个新的进程执行。

4. 内核同步措施

1. 原子操作

原子操作就是可以保证指令以原子的方式被执行,也就是执行过程不被打断。
那么x++是原子操作吗?
x++由3条汇编指令完成,其步骤包括从内存中取x值放入寄存器,对寄存器的内容加一,把值写入内存三个指令,因此它不是原子操作。对应的三条汇编指令为:

movl x, %eax
addl $1, %eax
movl %eax, x

那么如何实现x++的原子操作呢?
在单处理器上,如果执行x++时,禁止多线程调度,就可以实现原子操作。因为单处理的多线程并发是伪并发。在多处理器上,需要借助cpu提供的Lock功能锁,锁总线读取内存值,修改,写回内存三步期间禁止别的cpu访问总线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值