早晨打开lwn,比较引人注意的三个补丁[][][]映入眼帘。前两个出自同一个作者,分别实现了信号和定时器的文件描述符绑定;后一个的作者是,他实现了一个可以绑定任何事件的伪文件系统,不过目前这个版本的实现只能绑定信号事件。实际上这三个补丁基于的思想是一样的:通过文件描述符传送非文件事件。
这么做的好处是什么呢?
我们一定还记得那个致力于统一Linux内核事件接口的项目吧!因为目前的select/poll/epoll机制只能对文件描述符有效,而对其他的内核事件(如:文件改变、定时器和信号等)都无能为力,对于他们目前的做法是采用另外一套接口(如针对文件改变事件的接口)。这种状况无论是对API的学习,或者是实际的编程开发都是无益的,只能带来混乱。为了解决目前这种让人尴尬的局面才出现了kevent项目。实际上还有另外一种解决方案:就是把各种事件都通过文件描述符来传递,也就是说把其他事件表示成文件描述符上的事件。这样,就能够通过我们所熟悉的select/poll/epoll接口象处理文件描述符一样处理他们了,岂不快哉?!
这么做有什么缺点吗?
因为要对各种事件做到文件描述符事件的转化,这其间无疑又要引入新的系统调用接口以实现事件和文件描述符的绑定。可能会多引入些系统调用,可是kevent的事件类型的增加方式也应该可以看成是类“ioctl问题”,从这方面来说两者应该是不相伯仲的。但是从API的学习周期来考虑,kevent的API似乎更加短些,容易些。
你认为两者哪个会进入最终的官方内核呢?还是都会进入官方内核?
参考资料:
[1]
[2]
[3]
阅读(2343) | 评论(3) | 转发(0) |