为什么我们不能在操作系统的内核中添加最大功能?

时间:2017-01-29 07:44:13

标签: operating-system kernel computer-science

我正在阅读“Andrew S.Tanenbaum”的一本书,其中他提到:

“MINIX是基于微内核设计的首批类UNIX系统之一。 微内核背后的想法是在内核中提供最小的功能 使其可靠和高效。因此,内存管理和文件系统 被推入用户流程。“

这是否意味着“具有最大功能的内核”不可靠且高效? 为什么这样,请在示例的帮助下解释。

由于

1 个答案:

答案 0 :(得分:1)

我认为理解这个问题的一个微妙但重要的方面取决于条款"可靠"并且"高效"定义。对于这个答案,我将使用以下一般定义:

  • 可靠:困难或不太可能出现故障或以其他方式破坏/崩溃

  • 高效:要求最少量的时间来完成某项任务,即使是以空间为代价

虽然不是每个人都会以相同的方式定义术语(例如,在嵌入式系统中,使用最少量的空间可能被认为更多"高效"),在大多数情况下实例,我认为用户往往偏向于速度。

  

微内核背后的想法是在内核中提供最小的功能,使其可靠和高效。

我认为这里的重要部分是"最小功能"。拥有最少量的功能意味着必须编写,读取和维护/调试的代码量少于一个包含更多内容的代码。

从这个意义上说,根据我上面的定义,更少的代码意味着整体内核更小,更简单,更容易使用。系统越简单,就越容易发现潜在/实际问题,使系统更加可靠和可靠。从这个意义上说。这减少了新的隐藏错误进入代码库并稍后破坏的可能性。

它还可以使它更有效率" (即更快)因为系统将具有较少的开销处理以便保持其自身正常运行。换句话说:你工作的越少,你工作所需的时间就越少。

通过类比,假设你正在读一本书;完成本书需要阅读的页面越少,故事情节就越容易理解,你完成它的速度就越快。

  

这是否意味着"具有最大功能的内核"会不会可靠和有效率?

不一定,虽然它取决于什么"最大功能"手段。例如,在内核中拥有媒体播放器,电子邮件客户端和文字处理器可以帮助它实现最大功能"?也许。是否有意义?否。

在本次讨论中,我将使用以下定义:

  • 最大功能与最大硬件数量的兼容性

实际上,这意味着如果你要将某个组件A换成其他组件B(即网卡),机器应该继续正常工作,而不是拒绝启动。

从这个意义上讲,内核可能具有最大功能"没有完全牺牲"效率和可靠性"。

需要添加代码,以便内核允许识别组件,加载驱动程序等等,这会增加在编写代码时引入错误的可能性以及处理开销的数量。照顾增加的功能。即便如此,大多数错误只是暂时的。

所以,正如你所看到的那样,需要权衡利弊。那么,微内核呢?

微内核专门寻求通过推动不那么重要的服务来解决这种权衡问题。到内核​​的外部......这反过来意味着通常具有崩溃内核能力的东西(例如坏的驱动程序),因此整个机器也会被推到外面。这可以限制他们在错误行为时可能造成的破坏程度。

一旦在内核之外,它们作为用户空间应用程序(例如类似于记事本)而不是内核空间(例如单片内核中的图形卡驱动程序)运行,并且如果这些服务或应用程序中的任何一个有问题并且崩溃,机器本身更有可能存活而不是显示BSoD或同等物。

例如,如果文本编辑器崩溃,则仅关闭应用程序。如果在内核空间中运行的显卡驱动程序崩溃,那么您可能需要重新启动。

但正如我所提到的,这是一种权衡。例如,将内核功能移到用户区之外会产生一些效率/速度损失。以前在内核空间中的同一进程内的单片内核(例如Linux)中的简单函数调用现在需要经历与自身之外的多个独立任务的进程间通信的开销,这需要在它们之间进行更多的上下文切换。和时间,在任务完成之前。

通过类比,假设你正在阅读一本有多个角色的书,这些书在故事的关键点做出重要决定,但这本书只关注 main character,这些决定对支持字符的影响在单独的侧面故事书中处理。主要书本身将更短更简单,但事实上你必须不断地在书籍之间切换以实际阅读所有内容,这意味着它会花费你更多的时间来完成它。

希望这有帮助。