Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3173303
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类:

2012-12-18 19:49:44

原文地址:数据同步 作者:zhanglong71

p { margin-bottom: 0.21cm; }

Linux内核中的数据同步

1.内核控制路径的三种执行环境:

1>异常

2>中断

3>可延迟函数(中断的的下半部分bottom half)


2.在内核环境下,如何选择自旋锁,信号量及中断禁止三种


2.1异常时的数据访问保护

1>异常处理时,最常见的就是系统调用,此时的CPU运行在内核态为用户进程提供服务。此竟争条件可通过信号量避免。

2>访问per-cpu变量时,还要禁用抢占。

信号量工作方式在单处理器上系统和多处理器系统上完全相同。


2.2中断时的数据访问保护

1>在单处理器环境中只有一个中断的“上半部分”访问时。中断都相对自己串行地执行,无需同步。

2>在单处理器环境中有多个中断的“上半部分”访问时,要关中断。

3>多处理器环境下,多个中断可访问时,要关中断,并加上自旋锁。


2.3可延迟函数(软中断和tasklet)中的数据访问保护

1>单处理器上不存在竞争问题

2>多处理器系统上,软中断访问的数据使用自旋锁

3>多处理器系统上,仅由一种tasklet访问的数据结构不需要保护

4>多处理器系统上,被多种tasklet访问需要用自旋锁保护


2.4.异常和中断时的数据访问保护

1>单处理器系统上,关闭中断

2>多处理器系统上,关闭本地中断,加上自旋锁(可用紧循环和down_trylock代替自旋的功能)


2.5.异常和可延迟函数中的数据访问保护

1>单处理器系统上,关闭本地中断,加上自旋锁

2>多处理器上加上自旋锁


2.6.中断和可延迟函数中的数据访问保护

1>关闭本地中断

2>多处理器上,加上自旋锁


2.7.异常,中断和可延迟函数中的数据访问保护

1>关闭本地中断,加上自旋锁



阅读(469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~