大头
标签云
3G
AWS
Android
BeautifulSoup
Boto
CC
DONT_MAKE_ME_THINK
DTV
DVB-T
Haskell
ISDBT
JUnit
LUdecomposition
Linux内核
MIPS
MiniBlog
Perl
PyInstaller
S3
SI
STM
Subtitle
UED
VideoDemystified
VideoResolution
audio
c/c++
cassandra
colorspace
colorspace VideoDemystified
compile
debug
dvb
eLocutor
format
fortran
gui
h.264
icon
interlaced
java
joke
kernel
linux
matlab
mono
ota
php
project
pyExcelerator
python
resource
ruby
spec
stb_design
stereo
svn
twitter
unicode
warning
书债
书托
交互设计
会议管理
信号量
出差
出版
勘误
反思
哲学
团购
团队
图书
图灵新知
培训
妈妈
娱乐
并发
弗洛伊德
微博
抑郁症
投诉
捉虫日记
改变心理学的40项研究
敏捷
敏捷开发的艺术
数学
数据库
新闻
森田心理疗法实践
森田正马
津巴多普通心理学
测试
烂书
用户体验
界面
瞬间之美
神经症
神经质症
科普
管理
精神病
精神病学
编译
编辑
翻译
药物治疗
设计
证实偏差
质量
逻辑
配置管理
重构
高良武久
分类
日历
十一月 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
评论
留言
微博
热门文章
随机文章
豆瓣上谁关注这里
链接
搜索栏
RSS
功能
页面
计数器
481062
访客统计
存档
代码之美 - 081008
《Linux内核驱动模型:协作的好处》这章篇幅不大,可读得费劲。
上来就有两句话没看懂:在2.4版本的内核中,每一个设备的物理部分都由一段总线特定的代码来控制。总线代码负责各种不同类型的任务,而每一种具体总线的代码之间则没有交互。
后一句的原文是:This bus code was responsible for a wide range of different tasks, and each individual bus code had no interaction with any other bus code.
这里,总线特定代码(bus-specific code)是什么意思?
然后,Greg Kroah-Hartman提出两个问题,1是在解决电源管理问题时,内核需要知道不同设备的连接关系;2是不论哪一台USB打印机先启动,两台打印机的名字永不变。
其他系统的一般解决方法,1是内核中放一个处理设备名的小数据库,2是通过文件系统中可以直接访问设备的devfs类型来导出设备的所有信息。
对Linux来说,内核里放数据库是不能接受的,同时,Linux的devfs文件系统实现中“存在一些众所周知的且难以消除的竞争条件,导致几乎所有的Linux发布的版本中都不能依赖它。”这句话怎么理解?
再然后,作者用一个“简单”的例子展现了,展现了什么呢,我觉得是展现了C语言的复杂用法。如作者所说:是的,非常强大,只要你清楚地知道你正在做什么。
不信就看看这个宏吧:
-
#define container_of(ptr, type, member) ({ \
-
const typeof( ((type *)0) ->member ) * _mptr = (ptr); \
-
(type *)( (char *)_mptr - offsetof(type, member) );})
作者通过介绍Linux内核中解决前面提到的两个问题所需的数据结构和支持函数的演变,来说明协作给Linux带来的好处,还好文末有个总结,否则我又要忘了他要说什么。