前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【讨论】Linux kernel 的设计是否已经过时?微内核?

【讨论】Linux kernel 的设计是否已经过时?微内核?

作者头像
Linux阅码场
发布2019-08-16 14:47:11
2K0
发布2019-08-16 14:47:11
举报
文章被收录于专栏:LINUX阅码场LINUX阅码场

编者按

恰逢华为发布鸿蒙微内核操作系统,微内核和宏内核的争论再次成为焦点。

余承东认为,当前,Android/Linux 内核代码庞大且冗余,比如 Android 代码就有一亿行,Linux 内核代码也有 2000 万行,很难保证不同终端的体验流畅。鸿蒙 OS 采用全新的微内核设计,拥有更强的安全特性和低时延等特点。微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。微内核只提供最基础的服务,比如多进程调度和多进程通信等。

小编精心挑选了这个讨论主题,本文的主体内容由陈莉君老师完成。欢迎留言发表您的意见。

在开源中国看到“Linux kernel 的设计是否已经过时?”这个题目,正好有企业界的朋友问到L4 基于微内核的操作系统怎么样。微内核与宏内核争论似乎是永远的话题,只是看你站在什么角度。依然记得99年带领学生们阅读Minix微内核操作系统设计原理和代码的情景,因为在艰难的跋涉中有清晰的导航图,《操作系统设计与实现》上下册还是被一点一点啃完。

后来阅读Linux源代码,就像走进一大片森林,在各种复杂的交错关系中摸索着前进,即使手上拿着导航图,但经常因为走进一个岔道而忘了返回的旅途,但是,因为众多的人在森林中探索,你会找到同路人(开源社区的邮件列表和各种文档),于是,在不知所然中也常常会找到帮手,于是,Linux这片森林就在不断扩大面的,走进去能走出来的人更加困难。

关于L4, 有一段文字描述或许对你有启发:

一般来讲,目前公认的L4系统有2个特点,Fast IPC和Sigma0协议。Sigma0是一种基于IPC的内存管理协议,使用Sigma0,内存管理呈现出一种层次状。举例:有A和B两个程序,如果程序B想使用程序A的内存。如果使用Sigma0,那么很容易实现,只要把A设置为B的pager,并提供B的page fault handler程序就可以。在这种情况下,程序A和程序B依然具有不同的Address Space,A和B之间互相隔离(关于这种层次式的内存管理,请参考The sawmill framework for virtual memory diversity)。但是如果使用Linux来实现这种模式,除非使用share memory,想不出其它更好的办法,但是share memory使得A和B之间有的Address Space有了交集,从security和safety两个方面来讲,都不是很好的解决方法。近年来,越来越多的L4系统开始支持一种新的特性-Capability, Capability是为了提高操作系统安全性而设计的,Capability和要访问的Resource之间的关系类似于文件描述符号和文件之间的关系一样,要访问一个Resource,必须通过Capability来进行,Capability里面规定了那么资源可以被访问等安全特性,Capability允许被grant(从一个用户转移到另外一个用户),总之,Capability是比Access Control List更好的一种增强系统安全性的方法。

抛砖引玉,以下是reddit上讨论的部分内容

—————————————————

Linux 多年来取得的成绩毋庸多言。但最近,reddit 上有人发起了一个话题,想知道 Linux 的内核设计是否已经过时,并得到了一些有趣的答案。

这位 Ronis_BR 的用户提问大致如下:

Linux 是在 1992 年启动的,一些特性到现在都没有改变。我猜想最新的操作系统内核设计技术(如果存在…)应该较之前有很大的进步。那 Linux 内核是否已经过时?

与 Windows、macOS、FreeBSD 内核的设计相比,Linux 内核的设计有没有在哪些方面比较先进?(注意,重点是设计的先进,而不是哪一个更好)。

该话题引起了近 400 条回复,大家纷纷发表了自己对内核设计的看法,节选几条不同的观点:

ExoticMandibles:

“过时”?不存在的。Linux kernel 对现代内核的设计其实是非常了解的,只是它选择了保持传统的形式。

内核设计的核心在于“安全/稳定”和“性能”之间的关系。Microkernels(微内核)以性能为代价保证安全。如果你有极小的微内核,那么它将具有相对较小的 API surface,使其难以被攻击。而且当你有一个错误的文件时,驱动程序崩溃而不占用内核,可以无损重启。优越的稳定性!优越的安全性!一切很美好。

但这种方案的缺点是所有 IPC 永远且不可避免的开销。如果你的程序想从文件加载数据,则必须访问文件系统驱动,这意味着 IPC 要处理进程上下文切换和两次 ring transitions 。然后,文件系统驱动要求内核与硬件通信,这也意味着两次 ring transitions。然后文件系统驱动发送其回复,这意味着又一轮的两次,以及另一次上下文切换。总开销:两次上下文切换,两次 IPC 调用和六次 ring transitions。非常贵!

宏内核将所有设备驱动合拢到内核中。所以当出现一个错误的图形驱动,就可以占用内核,或者如果它有一个安全漏洞,那么可能被用来危及系统。但是,如果你的程序需要从磁盘加载某些东西,则会调用内核,进行 ring transitions,与硬件通话,计算结果,并返回结果,进行另一个 ring transitions。总开销:两次 ring transitions。便宜得多,也快得多!

简而言之,微内核是:“放弃性能来提高安全性和稳定性”;宏内核是:“保持性能,只要修复安全和稳定性问题就可以了”。而目前,大家更愿意接受后者。

Scandalousmambo:

开发一个和 Linux kernel 相同的系统,从本质上决定了它一旦设计出来就会“过时”。

KugelKurt:

尽管这里讨论的大部分内容都是关于微内核与宏内核的关系,但是最近的研究还涉及到编程语言。如果你今天启动一个全新的内核,那么就可能不会用 C 去写。微软的 Singularity 和 Midori 项目探讨了用 C#托管代码内核的可行性。

Daemonpenguin:

有一些概念,在理论上可以提供更好的内核设计。比如,理论上微内核也有一些非常好的设计选择,使得它们具有便携性、可靠性和潜在的自我修正能力。

然而,无论理论多么好,人们总是会根据实际情况进行设计。Linux 内核拥有如此多的硬件支持,那么多公司支持开发,其他内核(不管设计得多炫酷)都不太可能赶得上。

例如,MINIX 具有良好的设计和一些很棒的功能,但硬件支持很少,几乎没有人为此平台开发。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux阅码场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档