http://microkerneldude.wordpress.com/2014/08/29/ok-labs-story-1-the-beginning/
译者注:seL4背景的补充材料
上周,我答应讲一下开放式内核实验室的历史。 这是第一部分。
这一切都始于十几年前,当有一天早上我接到凯文的电话,他说他是高通公司的一个知识产权律师。 当你知道他们的讼棍的本性的话,这通常会让你的脊椎发凉。 但是,谈话是非常友好的,他想知道我们的L4微内核的IP状态的详细信息,我们的L4微内核是嵌入式Pistachio,有基于开源BSD的许可证(June'08的发布仍然存在)。 这是我们从卡尔斯鲁厄的Pistachio内核fork出来的,我们早先移植到多种架构上,包括ARM。 这个分支的特别之处是在于,它对资源受限的嵌入式系统应用进行了优化。
当我在接到电话后走进实验室并告诉我的学生,哈维立刻联想到一个使用雅虎地址的叫埃里克的家伙,已经在邮件列表上问了非常详细的技术问题。
这个电话是在2004年5月,高通明显对我们的内核很感兴趣。总之几个星期后我去了美国,在六月初,我在圣迭戈拜访了他们,带有一个保密协议(很久之前就过期了)。 我花了几个小时与副总裁和一个高级工程师(Eric)做了相当激烈的技术性讨论,其结果是,在8月上旬我又去了一次,加上我的学生本诺,提供一个为期三天的L4设计课程,原理和用法(按咨询价格支付,包括商务舱的航班)。 听众是来自高通的一打左右的工程师,再加上一些客户。
课程很顺利,9月我们得到了一个合同来提供咨询服务帮助高通的工程师做样机的研制。 最初,这项工作是由本诺和卡尔完成,但随着时间的推进扩大到约为6名全职员工。 仅仅半年后,也就是大约2005年2月,我们在相当长一段时间对此一无所知,高通决定把L4投入生产,作为它们的modem固件和BREW操作系统之下的内核。 第一台运行L4的手机(东芝W47T)在2006年的下半年开始在日本出货。
这一切背后的技术原因,我们只是随着时间的推移才知晓。 事实证明,高通在当时有两个问题。 之一是他们的modem堆栈的平面地址空间的设计和高度集成的BREW操作系统。 这已增长到数百万行的代码,调试这样一个没有内存保护的野兽是一场噩梦。随着在那个(前智能手机)时代应用程序的扩散显然变得更加严重。 它显然不可能支持一个开放的环境(使用任意第三方应用程序)的这种方式。 还有一个要模块化modem堆栈的需求。
高通的A计划是改造保护成REX,他们自己的RTOS。 有些人预见到这一努力要失败,并正在寻找一个B计划(显然我们是计划B.2,我从来没有发现B.1是什么。)失败一定是非常引人注目的,这致使从评估到部署L4惊人的快速转变(虽然埃里克在他们找到我们之前显然做了一些原型的工作)。
还有第二个原因驱使他们做出这个选择:摩托罗拉已作出以Linux作为自己的手机操作系统的战略举措,基于Linux的摩托罗拉手机已经在中国出货。 他们想在在Linux的手机使用高通的芯片。高通又不想Linux(或者任何GPL软件)在它们的核心IP附近的任何地方。 为了出售芯片给摩托罗拉,他们需要一种方法来以IP方式来看能够使它们的IP与Linux相隔离。 总之,他们正在寻找一个虚拟化的解决方案,而我们能在我们的L4内核中运行较早的Linux版本。 他们在找满足他们的要求的各种各样的候选,需要满足:
- 支持虚拟化的Linux,
- 具有高效率地运行他们的modem堆栈的能力,并
- 运行于ARM处理器。
他们发现,我们已经最接近这个目标,尽管没有一个人(包括我们!)声称我们具备产品级的质量。 所以,他们基本上和我们签合同来达到这个目标,我的学生们确实做到了。
讽刺的是,虚拟化的Linux并没有太大的影响。 在摩托罗拉的一侧无休止的延期,部分原因是内部斗争,以及它能否提供所需的性能的质疑(来自L4以外的工作组)。这种怀疑,虽然不合理,在某种程度上是可以理解的。 那时(基于ARMv5的架构)使用的ARM9核具有虚拟索引,虚拟标记的高速缓存。 这意味着该硬件不能区别属于不同的地址空间的数据,因此Linux(以及其他的操作系统,如Windows CE)在每个上下文切换时都要清除高速缓存。 由于在虚拟化设置中,Linux运行在它自己的地址空间,调用Linux的系统调用需要上下文切换(从系统调用返回时还需要另一个)。即使在本地Linux,很多时候缓存也经常被清除,Linux的表现并不好,人们会合理地认为虚拟化将使这更糟糕。
事实上,它是倒过来:在ARM9处理器上,在L4上运行虚拟化的Linux速度比原生的更快! 这是由于一个相当漂亮对硬件的功能的利用,这使我们在L4下能够使上下文切换非常快(高达50倍!),我们实际上已经发表这个“快速地址空间切换”(FASS)的技巧 ,却没有一个人我们的竞争对手把它捡起来,它似乎已经超出了他们的能力(这并不奇怪,因为我们经过一段时间的竞争发现这个事实,但我会在下次说这个话题)。 我们已经在Linux中实现了原来的FASS,我们已经提供给主线,但维护人员拒绝了因为它过于复杂。 50倍算得了什么?
在L4上开发的专业的摩托罗拉工程师最终得到了一个基于ARM9,虚拟化的Linux手机投入市场(Motorola Evoke)。 我用过它,它很好用,无缝集成了基于Linux的和基于BREW的应用程序。 远远超过了痛苦的缓慢HTC TyTN-II,虽然它有一个更强大的ARM11处理器运行Windows Mobile。 但为时已晚。 到那时,智能手机需要比这样的低端处理器可能提供的性能更高的性能(即使没有虚拟化和与处理器共享modem),所以趋势就分开了,功能强大的应用处理器。 “统一”的手机的时代,同时运行应用程序与实时操作系统(支持modem堆栈)在同一处理器上时代,已经胎死腹中了。