Linux kernel 的设计是否已经过时?

Linux 多年来取得的成绩毋庸多言。但最近,redditor 上有人发起了一个话题,想知道 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 具有良好的设计和一些很棒的功能,但硬件支持很少,几乎没有人为此平台开发。

……

欢迎大家就此事在下方回复自己的看法。

本文来自开源中国社区 [http://www.oschina.net]

时间: 2024-08-19 23:47:06

Linux kernel 的设计是否已经过时?的相关文章

The Linux Kernel Module Programming Guide

The Linux Kernel Module Programming Guide Peter Jay SalzmanMichael BurianOri Pomerantz Copyright 2001 Peter Jay Salzman The Linux Kernel Module Programming Guide is a free book; you may reproduce and/or modify it under the terms of the Open Software

Linux Kernel中断子系统来龙去脉浅析【转】

  转自:http://blog.csdn.net/u011461299/article/details/9772215 版权声明:本文为博主原创文章,未经博主允许不得转载. 一般来说,在一个device driver中实现中断,是比较简单的,如上面的RTC的例子.其无非就是: 1.       定义一个IRQ No.如何将Hardware中断信息map到我们的IRQ No就是get_irqnr_and_base要做得事情,get_irqnr_and_base是一个macro,后面会详细分析之.

Linux Kernel之flush_cache_all在ARM平台下是如何实现的【转】

转自:http://blog.csdn.net/u011461299/article/details/10199989 版权声明:本文为博主原创文章,未经博主允许不得转载. 在驱动程序的设计中,我们可能会用到flush_cache_all将ARM cache的内容刷新到RAM,这是因为ARM Linux中cache一般会被设定为write back的.而通常象DMA是访问不了cache,所以如果我们需要启动DMA将RAM中的内容写到Flash中或LCD framebuffer,那么我们就需要调用

在Ubuntu上编译 emulat Android avd内核源代码(Linux Kernel)

因为我没有真机的环境  所以需要在模拟器中进行模拟进行,所以要下载支持模拟器的源代码版本,而goldfish这个源代码版本就是专门为模拟器环境而提供的. The goldfish project contains the kernel sources for the emulated platforms. 一.首先,到 git clone https://android.googlesource.com/kernel/goldfish.git下载Linux Kernel for Android

Kprobe在Linux kernel debug中的应用

一直在做kernel开发方面的工作,也一直苦于kernel debug的困惑,到底如何进行kernel开发的debug的工作?今天经美国同事的推荐,我认为kprobe是一个非常好的debug工具.其本质原理就是在你需要probe的地方放入断点指令,然后在断点处调用你的调试/测试程序,从而可以实现对kernel程序的调试/测试. Kprobe只是提供了一种机制,使得用户可以在系统运行时调试/测试内核程序.使用Kprobe需要做如下几件事情: 1,需要找到测试点所对应的内存地址.这件工作可能是最麻烦

Linux Kernel 4.5在3月15日发布最终版

  今天Linus Torvalds和辛苦工作的内核团队非常自豪的宣布了Linux Kernel 4.5版本,并已经开放下载.自2016年1月25日首个候选版本发布,经历了长达两个多月的不懈更新,在3月6日发布最后一个候选版本之后,Linux Kernel 4.5终于在今天获得了最终版本. Linux Kernel 4.5的突出特性包括部署了AMD的PowerPlay电池管理技术,针对Radeon 显卡添加的AMD GPU开源驱动带来了更高的性能输出,同时在处理Brtfs文件系统中改善了空闲空间

如何通过Git在本地建立Linux Kernel的版本库镜像

在本地Git的版本库根目录下执行以下命令,将会同步Linux Kernel版本库到本地,进行镜像. git clone --bare git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 当然,该命令只会在本地建立版本库镜像.那么如何保持和Linux Kernel版本库的更新呢? 建议参考以下项目,使用git-mirror进行定时同步更新版本库. https://github.com/ndechesne/git-mirr

nginx conf by linux kernel

#nginx conf by linux kernel net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_recycle=1 net_ipv4.tcp_tw_reuse=1 net_ipv4.tcp_syncookies=1 net.core.somaxconn=262144 net.core.netdev_max_backlog=262144 net.ipv4

2017 Linux Kernel 开发报告 Linux 在统治着计算机世界

现在是2017年,Linux 在统治着计算机世界.不相信?Linux 基金会报告说,Linux 运行着 90% 的公共云工作量,世界上 82% 的智能手机,62% 的嵌入式市场,以及几乎占领了 99% 的超级计算机市场.所有的这些都基于 Linux 内核.在 Linux 基金会 2017 的 Linux Kernel 开发报告中,Linux 内核开发者和 LWN.net 的编辑 Jonathan Corbet 以及稳定的 Linux 内核维护者 Greg Kroah-Hartman 报告了 Li