精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>unix,linux,free bsd>>Linux内核编程指南>>《Linux内核模块编程指南》(十三)

主题:《Linux内核模块编程指南》(十三)
发信人: kevintz()
整理人: kevintz(2000-06-24 00:44:56), 站内信件
《Linux内核模块编程指南》
《Linux Kernel Module Programming Guide》
作者:Ori Pomerantz 中译者:谭志([email protected])
  
译者注:
1、LKMPG是一本免费的书,英文版的发行和修改遵从GPL version 2的许可。为了
节省时间,我只翻译了其中的大部分的大意,或者说这只是我学习中的一些中文
笔记吧,不能算是严格上的翻译,但我认为这已经足够了。本文也允许免费发布
,但发布前请和我联系,但不要把本文用于商业目的。鉴于本人的水平,文章中
难免有错误,请大家不吝指正。
2、本文中的例子在Linux(kernel version 2.2.10)上调试通过。你用的Linux必
须支持内核模块的加载,如果不支持,请在编译内核时选上内核模块的支持或升
级你的内核到一个支持内核模块的版本。     



                      第十三章  SMP及其他

1、SMP(Symmetrical Multi-Processing)对称多处理

    一个最简单的提升硬件性能的方法是使用多个CPU。多个CPU既可以各个CPU运
行不同的分工(非对称多处理),也可以让他们运行在平行的方式下,做相同的分
工工作(Symmetrical Multi-Processing--SMP对称多处理)。非对称多处理技术要
对计算机所要完成的任务有相当的知识才能工作好,它不能用于一个通用目的的
操作系统里,如Linux。另一方面,对称多处理技术相对来说较易实现。这里的相
对较易并不是说很容易。在对称多处理环境下,所有的CPU共享相同的内存,结果
,运行在一个CPU上的代码可以影响到在另一个CPU上运行的代码要访问的内存。
你不再能肯定在前一行设定的变量值在运行到当前行时值仍然不被改变。因为另
一个CPU的代码可能改变了它。

    在进程编程上这不成问题,因为一个进程通常在某一时刻只在一个CPU上运行
。而内核就不同,它可能同时被运行在不同CPU上的的进程调用。

    在2.0.x的内核里,整个内核在一个大spinlock(自旋琐)的控制之下。这意味
着一个CPU在运行内核代码时,另一个CPU想进入内核,例如系统调用,它必须等
到第一个CPU完成。这可以使Linux是SMP安全的。但效率却很低。

    在2.2.x的内核里,多个CPU可以同时进入到内核里。这是内核模块编写程序
员要注意的。由于我没有一个SMP系统,所以我不能写一章来说明如何正确编写S
MP内核模块。


2、共同的缺陷
  
    在我把你带进编写内核模块之前,有些事情你是要知道的。如果我没有提醒
你的情况下一些坏事情发生了,请把问题报告给我,作为你获得本书拷贝的回报


1)不要使用标准库。内核模块里只能使用内核提供的函数,你可以在/proc/ksym
s得到这些函数的列表。

2)如果你屏蔽中断一段很短的时间并很快就处理完,这没问题,但如果你完成后
不打开中断,你的系统就会停滞,而你必须重启。

3)我可能没提醒你别把头放到大食虫植物里,但我也会指出来提醒你的,这只不
过是以防万一。


3、本书是从那里来的?

    我可以把一些更多的章节加入到本书。例如加入一章关于建立新文件系统的
,或关于添加新协议栈的(这里有一个原因需要它,你要添加Linux不支持的协议
栈),我可以解析我们还没涉及的内核机制,例如bootstrapping和磁盘接口。

    然而,我没有这样做。我写本书的目的是使你们开始认识神秘的内核模块编
程并教会你一些通用的技术。对于对内核编程有很大兴趣的人,已经有两本书收
录在Linux Documnetation Project里,它们解析了如何进行内核编程。如果你需
要纸印版,也有很多已经出版的书。正如Linus所说,学习内核的最好方法是自己
阅读内核的源代码。

    如果你对简短的内核模块编程有兴趣的话,我推荐Phrack杂志。即使你对安
全不感兴趣,但作为一个程序员,那里有很多简短的好例子,你并不需要很多的
精力就可以理解。

    我希望我已经在你寻求成为更好的程序员上帮助了你,或至少在技术上使你
感到有趣。如果你写了一些有用的内核模块,我希望你能够在GPL许可下公布,以
便我也能使用它们。


kevintz注:
    以上的都是原作者的话,其中体现了GPL的精神。我希望大家在学习的时候,
也能够学习这种精神。如有可能我会再翻译Phrack里的一些关于内核模块编程的
文章。
    本书的翻译就到此结束了。希望本书的中文版能够给到你帮助。
    如果有什么问题可以和我联系讨论: [email protected]

                                          谭志 于2000.6.14日

--
那一刹那,我开始用心去看这个世界,所有的事物真的可以看得前
所未有的那么清楚…… 

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.73.203]

[关闭][返回]