经过近两个月的紧张开发后,Linus终于了2.6.22版的Linux内核。
和以前的2.6版内核一样,这个内核也包含了很多有趣的特性和更新,Kernel Newbies上有较为详细的。我从其中选择些自己感兴趣的内容进行简单的分析:
- :内存管理部分经过了较长时间的沉默后又进入了活跃的开发阶段,这次的改进主要是针对:当前的Slab内存管理代码较为晦涩难懂,不易于维护,这也是内存管理部分一直没人“敢”动的原因,不过它确实一直工作得不错;复杂的不仅仅是代码还有它所采用数据结构,大量的链表和Slab元数据占用了大量的内存空间,这种情况在“大”系统上尤其严重;这些复杂性也导致了内存的垃圾回收工作比较难做。终于,还是有人跳出来接受了这个挑战,他的对策就是SLUB内存分配系统。SLUB不仅精简了Slab的代码,而且改进了它所用的数据结构,避免了不必要的内存消耗,提高了空间利用率,当然时间效率上也有不小的提升:5-10%,而这些对于用户(内核开发人员)来说都是不可见的,因为他保留了原Slab的API。
- krealloc:对于用户空间的C程序员来说realloc应该不陌生,没错,krealloc就是相应的内核版本,它能增加或缩小动态申请的内存空间,并尽量不重新分配内存空间,还能在一定程度上减小内部碎片。
- :有的时候Slab的内存管理方式都有些显得沉重,为此内核的开发人员发明了面向页的内存管理方式,通过基于percpu单向列表的cache机制降低了重复调用__get_free_page和free_page的开销。
- 异步加密API:它的实现方式比较有意思,是通过一个加密守护进程(cryptd)将原本同步的加密操作异步化。其实,异步和同步本身就是可以相互转化的,这方面的例子还有glibc中模拟库和正在进行中的内核异步事件接口。另外,syslets似乎比较占优势,乘着多核的东风多线程的时代已经在悄然逼进...
- cancel_work_sync():同步取消一个任务是这次重构工作队列(workqueue)的一个产物,这个东西应该是很有用的,就像同步取消一个定时器的操作del_timer_sync()一样。有添就有删,这次的倒霉鬼是run_scheduled_work()。
- :它属于环保节能工程的一部分,体现了Linux内核程序员对全球气候的关注,降低功耗的同时也增加了笔记本等移动设备的续航时间。那么它的原理呢?这得从说起,它能在系统没有负载时取消作为操作系统“心跳”的定时器,使系统进入“休克”状态,从而系统的能耗;在接下来的休克过程中,如果有中断发生,系统将被唤醒,这个中断有可能是系统休克前设定的最近定时器的中断或者其它,但是并不是所有的定时器都有严格的时间限制,如果一个定时器可以推迟,那么唤醒操作将是不必须的,所以可推迟定时器的概念产生了...另外,工作队列中也了类似的工作。
- :最终还是signalfd/timerfd进入了Linux内核,并且内核维护人员们我前面一篇文章提到过的用户空间的实现方式为hack,并称前者才是正途,更加Unixy,我想这一定是指“功能正交”。与他们同时引入的还有更加通用的eventfd系统调用,能用于用户空间的事件分发和等待和内核空间的事件分发。
- 网络:新引入了两个TCP拥塞控制算法:和,其中前者的作者还是一名华人,可以让我们华人小高兴一下!另一个高速的TCP拥塞控制算法CUBIC(BIC的加强版)也得到了。
另外,发现上多了两个旗帜:一个是老美的,一个是欧盟的,什么时候能看到上面飘舞着鲜艳的五星红旗呢?盼望着,盼望着...
阅读(3467) | 评论(3) | 转发(0) |