云晶Cloud:解说已有的操作系统(二)
接着上期为大家继续讲解操作系统。
03操作系统分类
按照家族分类
如下为Unic的家族史:

从上图可以看到,Unix(Unics)实际上是大部分操作系统的祖先。很多操作系统都是从Unix演变而来。
Unix家族演进图

从上图可以看出:
目前非常著名的苹果公司的PC领域的操作系统MAC OS以及移动端操作系统IOS均是由Unix系统改写而来。
谷歌的Android操作系统,ChromeOS 均是由Linux系统修改而来。
Ubuntu 更是Linux系统的社区开源版本。
还有在车载系统中,号称是实现很强的微内核系统QNX均来自Unix系统。
按照内核类型分类

微内核/宏内核的概念
操作系统最核心的功能,任务调度、内存和设备的抽象和管理。然后,为了我们方便使用,才集成进了系统服务、驱动程序、文件系统之类的东西。
我们平时运行的程序,每个程序各运行几十毫秒,大家来回轮换,这样子我们看起来这些程序好像在“同时”运行一样。
应用程序之所以能够被操作系统通过时间片的方式调度,是因为对于CPU而言,普通的应用程序和操作系统的内核运行在不同的特权级别上,我们叫作rings。应用程序运行在Ring 3,而内核运行在Ring 0。
随着科技的发展,操作系统变得越来越复杂,内核里面的东西也越来越多。
人们也就开始考虑是否应该改变原有的架构,从而提高操作系统的性能和稳定性,主要是精简内核降低开发的复杂度,还有就是把各种程序尽可能隔离,保证一个程序的崩溃不会牵连到其他的程序。
上世纪80年代人们讨论得火热的微内核就是这样一种架构。
几种内核架构

理论设计,放到现实的工程中都是要做折中的。所以有混合内核的出现,综合宏内核和微内核的不同优点,在两个方案中折衷设计。OS X和Windows就属于这类。
微内核的优势
微内核考虑在操作系统的内核中保留操作系统最基本的功能,也就是任务调度、内存和设备的抽象和管理。
其他的功能全部从内核移出,放到用户态中实现,并以C/S模式对其他应用程序提供服务。
微内核带来的好处主要是稳定性和实时性,即内核中模块数量少了,结构更精简更优化了,能够影响内核的程序和驱动也减少了,稳定性随之提高;另外就是实时性,内核精简了以后,响应的时延的减小。
并不是精简了以后会使得性能提升,微内核使得内核中只有最关键的部分,其他模块和系统功能全部作为独立模块放到用户态空间中运行,功能分散了以后增加了通信的成本。
不过微内核操作系统的特点尤其适合工控系统的控制,而且设计简单,在小型的系统中有不少的应用。另外亦有不少实时操作系统是使用微内核架构设计。
总结几句
Worse is better.
计算机领域往往经过完善设计的产品,最终结果都是失败的。
像Unix赢了Multics一样。
Lisp(通用高级计算机程序语言)并没有C语言流行。
OSI的愿景最后由TCP/IP协议完成。
相信,国内号称真正的云上操作系统,最终是由云晶-新一代云上操作系统来完成(开玩笑)。
微软的WPF,把MVVM设计模式运用的淋漓尽致,设计的如此纯粹,并没有流行起来。
......
宏内核就是一座华丽的宫殿。
微内核就是一座精致的小别墅。
Linux为什么不采用微内核或者混合内核模式?
理论上完美的问题在实践过程中都会遇到各种不得不妥协的折衷。因为你制造出的东西是要部署到实际生活生产环境中使用。不是要一个只在实验室中看起来很完美的作品。
微内核的高度模块化,自然要付出成本的,那就是增加代码交互的冗余与效率的损耗,而这恰恰是很大的问题。
Linus可以把这些乱七八糟的东西,全都一个人写了,一遍写对了,还能稳定跑起来,无bug,而我们这些渣渣,做不到,只能依靠保护模式来防止几百个工程师写出来的那一坨垃圾,动不动蓝屏,自己弱,却质疑天才的做法,和明知自己弱,还要模仿天才的做法,都是认不清现实的表现。
Linux本身在实现之初仅仅作为Linus一个业余项目而存在。而Monolithic Kernel由于不需要处理消息队列等等原因从实现角度来说比Micro Kernel更为方便。
linus 这人对微内核不感兴趣,这个大家都知道,只要有他在一天,kernel就不会考虑微内核化。他是一名实用主义者,他说过一句名言:Talk is cheap. Show me the code。
Linus: "Gaah.Guys,this whole ARM thing is a fcking pain in the ass.” 推动了DeviceTree.(题外话,*霸气)。这就是Linus这个人的张扬与洒脱的一面。大家可以仔细体会。
按照实时性分类
按照实时性,将操作系统分为硬实时和软实时。那么什么优势硬实时和软实时,其实就是通过中断的响应时间来衡量的。
衡量实时性的标准:
中断的相应时间。中断的相应时间==关中断的最长时间+保护CPU内部寄存器的时间+进入中断服务函数的执行时间+开始执行中断服务例程(ISR)的第一条指令时间
任务的切换时间,就是从当前任务挂起,到要切换的任务开始运行的时间。
一个硬实时操作系统面对变化的负载(从最小到最坏的情况)时,必须确定性地保证满足时间要求。跟CPU强悍无关,必须时间具有确定性。
实时操作系统的代表
以下表中,显示了实时操作系统的实时性对比

Linux为实时操作系统的代表
Vxworks(Wind River)为硬实时操作系统的代表。