首页 文章

为什么Linux被称为单片内核?

提问于
浏览
182

我读到Linux是一个单片内核 . 单片内核是否意味着将完整的内核代码编译并链接到可执行文件中?

如果Linux能够支持模块,为什么不将所有子系统分解为模块并在必要时加载它们?在这种情况下,内核最初不必加载所有模块,并且可以维护模块中函数的索引并在必要时加载它们 .

7 回答

  • 257

    来自wikipedia

    单片内核是一种内核架构,其中整个操作系统在内核空间中工作,并且单独作为管理员模式 . 与其他体系结构不同,1单片内核单独定义了计算机硬件上的高级虚拟接口,带有一组原语或系统调用来实现所有操作系统服务,如进程管理,并发和内存管理本身以及一个或多个更多设备驱动程序作为模块

    另一方面,最新版本的Windows使用Hybric kernel .

    混合内核是一种内核架构,它基于微内核和计算机操作系统中使用的单片内核架构的各个方面 . 由于与单片内核的相似性,该类别存在争议;这个词被一些简单的营销所驳回 . 传统的内核类别是单片内核和微内核(纳米内核和外核被视为微内核的更极端版本) .

  • 7

    单片内核意味着整个操作系统以内核模式运行(即由硬件高度特权) . 也就是说,OS的任何部分都不以用户模式运行(较低权限) . 只有操作系统顶部的应用程序才能以用户模式运行 .

    在非单片内核操作系统(如Windows)中,操作系统的很大一部分本身在用户模式下运行 .

    在任何一种情况下,操作系统都可以高度模块化 .

  • 13

    这是我的简短回答...找到下图 . 您将清楚地了解两种类型的内核

  • 2

    ; tl-dr - 不,Linux总是单片的 .

    Linux模块在某种意义上可能意味着模块化 . 正如其他人所说,单片通常代表微内核而不是单片内核 . 传统的微内核只具有这些功能,

    • 计划

    • 内存管理

    • 进程间通信

    主内核中没有硬件驱动程序,协议栈,文件系统,挂起/恢复,时钟管理等 . 这些东西与任何用户任务相同(尽管它们可能通过MMU /调度程序具有不同的权限) .


    Tanenbaum's predictions

    • 微内核是未来

    • x86将消亡,RISC架构将主导市场

    • (从那时起5年)每个人都将运行免费的GNU操作系统

    PC和服务器程序员可能会笑,但对于现有的大多数手机来说,其中有两个和三个肯定是正确的 . 如果黑莓QNX取得成功,Tanenbaum将适用于所有帐户 .

    此外,许多L1-hypervisors下面有一个micro-kernel . 这是因为除了上下文切换之外,超级遮阳板通常不会做太多 .

    显然有三个人预测Linux的成功 . ;-)


    微内核的一个论点是,所有单片子系统都需要同时同步多个值 . 为了做到这一点,他们必须使用锁,并且在扩展到并行体系结构时会受到Amdahl's law的影响 . 计数器是微内核导致大量的IPC消息 .

    一个主要的发展是使用lock-free编程来避免单片内核中的争用 . 这避免了单片内核中的锁定,同时还减少了IPC开销 . 最近所有的CPU都在扩展其ISA,以包含更好的基元,用于无锁算法 . 因此Linux可能会在一段时间内保持单片内核 .

  • 5

    单片内核是一个内核,其中所有服务(文件系统,VFS,设备驱动程序等)以及核心功能(调度,内存分配等)都是共享相同空间的紧密组织 . 这直接反对微内核 .

    微内核更喜欢将核心功能与系统服务和设备驱动程序(基本上只是系统服务)隔离开来的方法 . 例如,VFS(虚拟文件系统)和块设备文件系统(即minixfs)是在Linux内部的内核之外运行的独立进程,它是微内核中的一项服务,表示一个独立的进程 .

    不要将模块内核这个术语混淆为单一的 . 一些单片内核可以编译为模块化(例如Linux),重要的是模块插入并运行处理核心功能(内核空间)的相同空间 .

    微内核的优点是可以轻松地重新启动任何失败的服务,例如,如果根文件系统抛出中止,则没有内核停止 . 这也可以被视为一个缺点,因为它可以隐藏非常严重的错误(或使它们看起来不那么关键,因为问题似乎不断修复自己) . 它被视为一个巨大的优势,在您部署后无法方便地修复某些内容的情况 .

    微内核的缺点是异步IPC消息传递变得非常难以调试,尤其是在实现fibrils的情况下 . 此外,仅跟踪FS /写入问题意味着检查用户空间进程,块设备服务,VFS服务,文件系统服务和(可能)PCI服务 . 如果你得到一个空白,是时候看看IPC服务了 . 在单片内核中这通常更容易 . GNU Hurd遇到这些调试问题(reference) . 在处理复杂的消息队列时,我甚至不打算进入检查点 . 微内核不适合胆小的人 .

    通向工作稳定内核的最短路径是单片方法 . 这两种方法都可以提供POSIX接口,其中内核的设计对于想要编写代码以在任何给定设计上运行的人来说变得不太感兴趣 .

    我在 生产环境 中使用Linux(单片) . 但是,我的大部分学习,黑客攻击或修补内核开发都会进入微内核,特别是HelenOS .

    Edit

    如果你通过我非常啰嗦的答案得到了这么多,你可能会有一些乐趣,阅读2013年阅读'Great Torvalds-Tanenbaum debate on kernel design '. It'甚至更有趣,这是在它发生20多年后 . 最有趣的部分是Linus在最后一条消息中的签名:

    Linus "my first, and hopefully last flamefest" Torvalds
    

    显然,Tanenbaum预测x86很快就会过时,这种情况不会成真 .

    NB:

    当我说“Minix”时,我并不暗示Minix 3.另外,当我提到HURD时,我正在引用(主要是)Mach微内核 . 我并不打算贬低别人最近的工作 .

  • 8

    在这种情况下,“Monolithic”并不是指有一个大型可执行文件,正如您所说,Linux支持在运行时动态加载内核模块 . 在讨论内核时,“单片”意味着整个操作系统以“特权”或“超级用户”模式运行,而不是使用某种内核的其他类型的操作系统,例如“微内核”,其中只有最小的功能集在特权模式下运行,大多数操作系统在用户空间中运行 .

    微内核的支持者认为这样做更好,因为更小的代码意味着更少的错误,并且在管理员模式下运行的错误可能会导致比用户空间代码更大的问题(例如更大的机会出现安全漏洞或整个系统崩溃的形式'kernel panic') . 一些微内核足够小,它们可以是'formally verified',这意味着您可以根据规范在数学上证明内核是'correct' . L4就是一个很好的例子 .

  • 17

    单片内核是完全在单个地址空间中运行的单个大型进程 . 它是一个静态二进制文件 . 所有内核服务都存在并在内核地址空间中执行 . 内核可以直接调用函数 . 基于单片内核的操作系统的例子是Linux,Unix .

    我认为这篇文章将帮助您更多地理解这个概念 .

    http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html

相关问题