*交互和响应特性
版本2.6有一个惹眼的“卖点”。2.6将更加适合于桌面用户和那些高度倚赖事件驱动的场合。尽管这是两个不同的机制,但是一些努力已经可以使得二者可以得兼。
一个不能不提的重大改进是版本2.6已经是强占式内核了。在以前的版本中,当操作系统在做事情的时候是不能被中断的(在多处理机系统中,每个结点同样遵循)。现在内核允许自己被中断,这样如果内核在做一些复杂的维护时,用户进程就不至于耽误太久。(当然为了避免死锁等,内核还是要确定一些绝对不可中断的临界区) 最大的受益者是那些交互式程序(桌面用户),他们将感到系统飞起来了。
另一个重大改进是新式的"Futexes"(可以理解成高速用户看见互斥工具)。Futexes在多进程、线程情况下可以串行话事件,以避免竞争条件的发生。与包含在线程包内的传统的互斥工具不同,这是基于内核的,并且可以设置优先级别。这个改变会使得一些有实时要求的程序更好完成。
Linux I/O子系统也在这次的革命中得到更新:它获得了一个全新的I/O调度。这部分代码的工作是决定谁(进程)、何时还是读设备,而不会让某个进程长时间苦苦等待。同时也保留了原有的算法。
所有这些改进都有助于实时应用的部署。当然版本2.6还不是一个完全的实时内核,但这些努力使得一个完全的实时Linux正变得可能(一些补丁提供了此类的支持)。
*模块系统:设备启动
模块子系统也是随着版本2.6的出世而得到改进的一个部分。大量的代码被重写用于改进其稳定性和透明性。In addition to these obvious external changes, many more
things have changed "under the hood" with how the kernel sees and uses
modules.
最明显的(尽管意义不大)一个改变是文件扩展名。以前的"*.o"(通用的目标文件,程序编译之后,链接之前的状态)成了"*.ko"(kernel object)。这仅仅是为了表明模块不同于中间文件,面子工程。
一个有意义的变化是为避免以前多次出现过的竞争条件而大量改写的代码。The
crux of the problem is that it was possible to have a device start using
a module while it is being unloaded, but after the module checks to make
sure no one is using it. The new kernel module coding should make this
condition much harder to trigger. To take this solution a step further,
it is also now also possible to simply disable unloading of modules
altogether.
更大的透明性是新模块系统的特性。以前的版本主模块具备了检查支持的设备的ID能力(PCI/PC Card/ISA pnp)。版本2.6中,这将被标准化。这有助于核外程序、模块加载进程和类似RH kudzu的管理器方便的找到所需模块。
ic. so good luck. i think that test and the preparation is a hard work. at that time, i live like a pig as you said. so i do not know the feeling. but i can understand.