您的位置:首页 > 运维架构 > Linux

linux内核同步的一些基本理解

2011-09-27 15:05 162 查看
进程调度的一些基本事实:

1.调度是优先级和时间片共同决定的

2.I/O消耗型的优先级较高,时间片较长,计算消耗型反之。

3.当进程阻塞或者主动schedule()或者被抢占时候,则发生调度

4.当时间片耗尽时,进程将被挂到另一个队列中。

5.用户抢占发生在系统调用返回到用户空间时候或者从中断处理程序返回用户空间时候

6.只要没有锁,内核就可以抢占,

中断:

1.中断处理程序可分为上半部和 下半部,必须完成的时间短的放在上半部,因为此时禁止低级别和同级别的中断。

2.

内核同步:

1.非对其的内存访问不是原子操作

2.自旋锁的争用失败会导致忙等待,所以自旋锁的持有应该尽量短的时间。

3.若内核抢占被关闭,则自旋锁会在编译时候,清除出去。(可能是关掉内核抢占后,内核代码就不会被重入了?

4.自旋锁不可递归。

5.在中断处理程序中不能使用信号量(因为这样会导致睡眠)

6.中断处理程序使用自旋锁时候,一定要关闭本地中断;否则其他中断打断当前中断并且要争用同一个自旋锁时候,就会导致忙等待,而持有锁的前一个中断也得不到释放锁的机会

7.当一个任务获取信号量失败后,就会被处理器挂在一个队列上睡眠。

8.信号量适用于锁会被长时间持有的情况。短的话,睡眠维护等待队列以及唤醒的开销成本太大。

9.占用信号量的同时不能占用自旋锁,因为持有自旋锁是不允许睡眠的

10.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: