Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657081
  • 博文数量: 185
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2107
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(185)

文章存档

2024年(1)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2011-03-03 22:51:48

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>关闭本地中断,加上自旋锁



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