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 尼玛就是不肯合并。有木有有木有有木有!