- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读到 Linux 是一个整体内核。整体内核是否意味着将完整的内核代码编译并链接到可执行文件中?
如果Linux能够支持模块,为什么不将所有子系统分解为模块并在需要时加载它们呢?在这种情况下,内核不必首先加载所有模块,并且可以维护模块中函数的索引并在需要时加载它们。
最佳答案
单片内核是这样一种内核,其中所有服务(文件系统、VFS、设备驱动程序等)以及核心功能(调度、内存分配等)都是共享同一空间的紧密结合的组。这直接反对微内核。
微内核更喜欢将核心功能与系统服务和设备驱动程序(基本上只是系统服务)隔离的方法。例如,VFS(虚拟文件系统)和 block 设备文件系统(即 minixfs)是在内核空间之外运行的独立进程,使用 IPC 与内核、其他服务和用户进程进行通信。简而言之,如果它是Linux中的模块,那么它就是微内核中的服务,表示一个隔离的进程。
不要将术语模块化内核与整体内核混淆。一些整体内核可以编译为模块化(例如Linux),重要的是模块被插入到处理核心功能的同一空间(内核空间)并从中运行。
微内核的优点是任何失败的服务都可以轻松重新启动,例如,如果根文件系统抛出中止,则内核不会停止。不过,这也可以被视为一个缺点,因为它可以隐藏非常关键的错误(或者使它们看起来不那么关键,因为问题似乎会不断自行修复)。在部署后您无法方便地修复某些内容的情况下,它被视为一个很大的优势。
微内核的缺点是异步 IPC 消息传递可能会变得非常难以调试,尤其是在 fibrils 的情况下。已实现。此外,仅仅追踪 FS/写入问题就意味着检查用户空间进程、 block 设备服务、VFS 服务、文件系统服务和(可能的)PCI 服务。如果您对此一无所知,那么就该看看 IPC 服务了。这在整体内核中通常更容易。 GNU Hurd遭受这些调试问题( reference )。在处理复杂的消息队列时,我什至不打算讨论检查点。微内核不适合胆小的人。
通向工作、稳定内核的最短路径是整体方法。任何一种方法都可以提供 POSIX 接口(interface),对于那些只想编写在任何给定设计上运行的代码的人来说,内核的设计变得没什么兴趣。
我在生产中使用 Linux(整体)。然而,我对内核开发的大部分学习、黑客或修补都进入了微内核,特别是 HelenOS .
编辑
如果您通过我冗长的回答读到这里,您可能会在阅读“Great Torvalds-Tanenbaum debate on kernel design”时获得一些乐趣。 '。 2013 年,也就是这件事发生 20 多年之后,再读起来就更有趣了。最有趣的部分是 Linus 在最后一条消息中的签名:
Linus "my first, and hopefully last flamefest" Torvalds
显然,这就像 Tanenbaum 预测 x86 很快就会过时一样,并没有成为现实。
注意:
当我说“Minix”时,我并不是指 Minix 3。此外,当我提到 HURD 时,我指的是(主要)Mach 微内核。我无意贬低其他人最近的工作。
关于architecture - 为什么Linux被称为单片内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1806585/
有谁知道如何实现称为 PRUNING 的图像处理技术?任何想法,例子等?我正在使用 OpenCV 和 C#,如果有人可以提供帮助,我将不胜感激。 最佳答案 我假设您希望从图像中移除不需要的杂散和伪影。
假设我已经构建了一个可调用对象数组 callables = [] callables << block1 callables << block2 callables << block3 callabl
这个问题在这里已经有了答案: std::shared_ptr of this (2 个答案) 关闭 8 年前。 我正在学习 C++11 特性,特别是 shared_ptr,我在引用 this 并将其
我主要是一个oracle新手,所以如果这是一个愚蠢的问题,请原谅我...... 我已经阅读了很多关于 authID 的文章,我的理解是 AUTHID 子句指示 Oracle 是否以调用者的权限 (CU
我使用的是 Python 2.7。 按照惯例,__iter__、__init__、__str__ 等内置方法使用双下划线来标识它们。为什么 next() 函数没有这个? 它与这里的其他内置函数一起
这是疏忽吗?还是跟JVM有关? 最佳答案 Java 确实有指针——不能在指针上执行指针运算。 来自可敬的JLS : There are two kinds of types in the Java p
我越来越多地发现宣传“原生”桌面应用程序的服务,但在下载或研究后发现它们是在 Electron 或类似的 Web View 框架中构建的 Web View 。他们误解了“本地人”还是我? 另外,我可以
我尝试在 Wordpress 中使用,但它在控制台中显示 jstree 不是函数在 header PHP 文件中: /dist/libs/jquery.js"> /dist/themes/defaul
我想让 scons 调用带有目录列表的 nosetests。执行此操作的最佳方法是什么? 最佳答案 如果您需要分析外部应用程序的返回码(例如,如果您调用测试),您需要使用 Command() + py
这是一些尝试使用 OOB(紧急)数据的基本代码。我的问题是,如果客户端使用 C 或 Java,则服务器部分的行为不同。请注意,您可能认为这两个客户端都有些棘手,但如果我使用 C 服务器(以更好地控制
虚拟文件系统 (VFS) 或虚拟文件系统交换机是更具体文件系统之上的抽象层。 VFS的目的是允许客户端应用程序以统一的方式访问不同类型的具体文件系统。 如果我们看到 VFS 的实际工作,这个定义似乎是
"Effective Go"状态: By convention, one-method interfaces are named by the method name plus an -er suff
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 3 个月前。 社区审核了是否
在深入研究 Scala 时,我遇到了 这个词。类型类 . 它一直令人困惑,因为一个类是一个类型,而一个类型可以 在 Scala 中是一个类,“类型”和“类”本身就是抽象术语。 在阅读了一些示例后,我感
我正在尝试编写一个简单地杀死我的程序的函数。它被称为退出聊天。但是,当我调用函数 messenger:quitChat() 时,出现此错误。 ** exception error: bad argum
我正在尝试编写一个简单地杀死我的程序的函数。它被称为退出聊天。但是,当我调用函数 messenger:quitChat() 时,出现此错误。 ** exception error: bad argum
如果您向 DB2/zOS 引擎 DBA 询问有关 DB2 行为的问题,DBA 会将 DB2 引擎称为“他”,就像水手使用“她”来指代他的船一样。 例如:“一旦您填充了可用空间,DB2 仍希望在表空间中
案例:我有 2 个具有以下 OneToMany 关系的表:TagAbstract 1..* TagConf,其中: tag_abstract_ID 是一个字段,用于标识许多 TagConf 记录,这些
我有一个表格,我想让第一行“自动固定”(这意味着当向下滚动时它固定在顶部,而如果不向下滚动,它就不固定)。这是代码:``` table { background: yellow; } td
其他动词对我来说都有意义,但我对“发布”作为动词没有太多上下文。它是像在邮局发帖(这有一定道理,虽然看起来有点牵强)还是像在公告板上发帖(对我来说意义不大)?有谁知道是谁决定了“POST”以及为什么选
我是一名优秀的程序员,十分优秀!