为什么Linux可以很好地扩展到不同的硬件平台?


22

为什么Linux在这么多不同类型的计算机(台式机,笔记本电脑,服务器,嵌入式设备,移动电话等)上运行良好?是否主要是因为系统是开放的,所以可以对其一部分进行修改以在不同的环境中工作?还是Linux内核和/或系统的其他属性可以使该OS轻松在如此广泛的平台上工作?


7
我认为您已经有了答案的一部分-开放性使不同人群或企业可以轻松地使其适应他们的需求。由于内核被批评为整体式,因此我不确定它的初始设计是否经过有意针对任何可扩展性进行了优化。我猜想在Linux内核上工作的人数要多于在其他操作系统上工作的人数-也许这迫使内核维护者要小心地将代码分成清晰的接口?另一方面,BSD的某些变体将可移植性作为一个明确的目标。
RedGrittyBrick 2011年

@Red:有人批评它是单片内核而不是微内核,尽管这与它的设计无关。它与用户空间中有多少内核运行以及内核空间中有多少运行有关。Windows NT的内核(例如)是非常模块化的,但是在技术上仍然是单片的,因为大多数服务(即文件系统)以内核模式而不是用户模式运行。
Billy ONeal

@Billy:Windows NT从技术上讲是一个混合内核。我相信Microsoft仍然使用消息传递来维护子系统,并能够根据需要保持将片段移动到用户空间中的能力。他们使用Vista中的图形系统做到了这一点:自从NT 4.0成为内核空间后,它现在处于用户空间
Zan Lynx

2
@赞:我的印象是“混合内核”的地位受到争议。因此,我说“整体”。即使将NT拆分成类似库的片段,NT肯定也具有许多整体功能。
Billy ONeal

@Billy:在我看来,如果仅通过更改一些选项并重新构建就可以将您的内核转变为微内核,那么即使是最常用的二进制构建将所有内容都放入内核地址空间中,也不是单片的。
Zan Lynx

Answers:


31

尽管开放性当然是其中的一部分,但我认为关键因素是Linus Torvald坚持认为,只要做得好,所有工作(无论大小)都可以在主线Linux内核中占有一席之地。如果他决定在某个时候划一条线并说“好的,对于那种花哨的超级计算机硬件,我们需要一把叉子”,那么可能已经开发出完全分离的高端和小型系统变体。实际上,人们已经做了更加艰苦的工作,以使它们都可以相对良好地协同工作。

而且,通常不允许出现使一方不利于另一方的丑闻,这再次迫使人们以更困难但更正确的方式解决问题,事实证明,通常更容易解决问题一旦有任何需要,克拉奇便成为历史脚注。

几年前的一次采访中

问:Linux是通用系统。它提供PC,大型服务器,移动设备以及十多种其他设备。从您的特权位置来看,Linux将在哪个领域发挥最大的潜力?

答:我认为Linux的真正力量恰恰是它与一个利基市场无关。每个人都可以一起玩,不同的人和不同的公司在对他们重要的事情上有着完全不同的动机和信念。所以我什至对任何一个特定领域都不感兴趣。


18
小型系统和大型系统定义一直在变化,因此避免了很多麻烦。多核智能手机现在可以从多年前完成的所有超级计算机工作中受益。
Zan Lynx

4

Linux可扩展到许多不同类型的硬件,因为:

  • 这是非常可配置的
  • 该源是免费提供的,并且可以为具有C编译器的任何CPU构建。
  • 与早期进行Linux开发的原始386机器相比,嵌入式设备和手机中的处理器至少具有相同或更高的功率,并且继续获得动力
  • 它只需要网络,某种形式的磁盘或类似磁盘的设备以及一个串行端口就可以正常工作

嗯,有人需要为目标平台编写最少数量的引导程序代码和C运行时。哦,它必须支持虚拟内存。否则,
则为

1
@Billy有到nommu系统的端口:uClinux,uClinux / ARM和MontaVista Linux。
东武

@Tobu:嗯..我不知道那怎么可能。用于多个进程的整个“ Unix哲学”假设类似的事情fork是可能的,并且fork不能在非虚拟内存系统上合理有效地完成。虽然所示的端口可能使用了Linux内核的一部分,并且可以运行某些Linux软件,但在大多数情况下,这些端口公开的API似乎与典型的Linux内核不同。(示例:内存映射-显然需要虚拟内存)
Billy ONeal

linuxjournal.com/article/7814:说uCLinux不支持fork(),但是一个名为vfork()的阻塞变体,必须重写uCLinux下的应用程序才能使用vfork或线程。
LawrenceC

4

Linux Kernel可以很好地扩展,因为这就是事实。核心内核相对较小,可以完成所需的工作。设备驱动程序是可选的,对于较小的系统,可以不包含在内核中。除了最低内核要求之外,大多数功能都作为可选功能实现。

看一下安装在大多数内核旁边的配置文件。它将列出所有已打开的功能以及支持的驱动程序。

支持将驱动程序嵌入内核或作为可加载模块。这样可以将内核动态配置为运行它的硬件。这是许多发行版使用的方法。

除了拥有编译工具之外,为新硬件修改内核相对简单。对于新处理器,仅需要将相关代码实现为对现有功能的修改。新设备仅需要带有相关挂钩的新驱动程序。新文件系统同样是相对琐碎的修改。

代码库已得到很好的维护,以保持这种灵活性而无需外部分支。条件编译驱动了一个非常灵活的内核,该内核已被保持在最小限度内。


1

我缺乏详细的技术专长来支持此答案,但是我的经验表明,与我经常使用的其他操作系统(主要是Windows)相比,Linux具有很好的扩展性。因此,也许的问题是,为什么Windows的扩展性不如Linux。

如果以这种方式重申这个问题仍然对您有用,我建议市场力量鼓励Microsoft添加与最新,功能最强大的硬件相对应的功能,因为它们主要在最终用户购买新系统时出售更多的操作系统副本。 。因此,在任何时间点,我都发现最新版本的Windows在较旧的,功能较弱的硬件上的性能较差。

如果这简化了您的问题,请原谅我。


看来您在谈论操作系统,而那个家伙在谈论内核。好吧,除非您确定Windows内核是否膨胀。
tshepang 2011年

@Tshepang:公平地说,这些问题是关于“ Linux内核和/或系统”的。Windows 7和Windows Phone 7是否共享内核?我所读的内容很少,它们的内核可能比Ubuntu Server和Android的内核具有更少的通用代码。
RedGrittyBrick 2011年

谢谢,但是问题实际上是关于Linux而不是其他操作系统。还有很多其他的东西:en.wikipedia.org/wiki/List_of_operating_systems
贾斯汀·埃斯蒂尔

NT内核实际上非常高效,但是围绕它的大量层构成了
LawrenceC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.