[FZH] What is a kernel?

microcai microcai at fedoraproject.org
Sat Sep 8 09:59:09 UTC 2012


Linus 说, Kernel is a collections of code to help run user program.

That's not ture.

开发过嵌入式的童鞋都知道,编译器提供的C库就已经能做到了。并不需要一个操作系统。如果嵌入式程序需要文件系统,在C库里有何尝不能实现呢?


我仅认为,kernel is a trusted library to share hardware.
内核就是用来共享硬件的,我谨认为,内核就是一个 multiplexer.

进程: 是用来共享主存储器的。内核是 RAM 的 multiplexer.
线程: 是用来共享CPU的。内核是 CPU 的 multiplexer.
socket:是用来共享网卡的。内核是 网卡 的 multiplexer.
文件系统:是用来共享外部存储器的。内核是 disks/blockdevice 的 multiplexer.
.
.
.
.
.
.

需要在内核里实现的功能,必定是需要内核去 multiplex 的。而不需要 multiplex 的功能,必须是不用在内核里实现的。

例1:
打印机驱动,从来没有哪个系统是在内核实现的。
Windows下,打印机驱动是 GDI 调用到 PCL(Printer Control Language)的解释器,是在非内核实现的。
UNIX/Linux下,打印机驱动是 PS -> PCL 的翻译器。顾名称为 cups-filter .
最终,PCL命令才需要内核的 USB驱动(或者并口etc)将命令发送给打印机。而 CUPS 利用了 libusb 连这点都不需要内核操心了。

例2:
拨号连接。
拨号连接是在用户层( pppd )实现的。内核创建一个 ppp0 ( ppp? 设备) 虚拟设备,然后内部的 socket 代码就
multplex 这个设备为别的程序提供网络功能。 ppp0 设备是个虚拟设备,其数据最终全部转给了 pppd , 由 pppd 实现和
“猫” 的通信。

但是 。。。。。。。

以上都是我的铺垫。因为我最终要讲的东西是:

尼玛图形界面啥时候能在内核实现?!


图形界面分成3个子系统:
窗口管理
窗口内容渲染
字体管理和文字渲染



字体管理是字体的 multplex , 但是文件系统已经为我们做到了multplex字体文件,所以在用户空间实现没什么问题。
文字的渲染归根结底还是属于渲染功能。

硬件加速的渲染(现在谁还想用 CPU纯软件渲染啊)是 GPU 的 multiplex .
窗口是 “屏幕空间”  的 multiplex,窗口伴随者键盘鼠标设备,这是输入设备的 multiplex .


这样 3 个 multiplex 就需要实现:
GPU multiplex
Screan Space Multiplex
HID multiplex (不是啥输入设备都行的,是要 Human Input Device,人体输入设备)

这3样东西的 multiplex , 尼玛为何不是在内核做的?!
为何?!?

要搞个 Xserver !!!!
要搞个 Xserver !!!!
要搞个 Xserver !!!!
要搞个 Xserver !!!!
要搞个 Xserver !!!!

绝对是内核偷懒 绝对是内核偷懒 绝对是内核偷懒。。。。。。

尼玛差点忘记,声卡也是要 multiplex  的,尼玛从古时候的 OSS 到进化的ALSA
现在都没支持内核混音!!!!还得靠学Xserver的 pulseaudio 来混音。
有内核混音的 OSSv4 尼玛就是不肯合并。有木有有木有有木有!


More information about the Chinese mailing list