单片和微内核有什么区别?

Ren*_*h G 110 language-agnostic kernel terminology

任何人都可以解释单片和微内核之间的例子吗?还有其他内核分类?

小智 110

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

在微内核中,内核被分解为单独的进程,称为服务器.一些服务器在内核空间中运行,一些服务器在用户空间中运行.所有服务器都保持独立,并在不同的地址空间中运行.服务器通过IPC(进程间通信)发送消息来相互调用"服务".这种分离的优点是,如果一台服务器出现故障,其他服务器仍可以高效工作.基于微内核的操作系统的示例:Mac OS X和Windows NT.

  • Mac OS X和Windows都是混合内核,因为它与单片内核的关系更为密切.微内核的例子是:Mach QNX AmigaOS Minix (32认同)
  • [GNU Hurd](http://en.wikipedia.org/wiki/GNU_Hurd)是在微内核上运行的操作系统的一个很好的例子.它仍在积极开发中,一些流行的Linux发行版有一个Hurd端口(Debian/Hurd,Arch Hurd等). (7认同)

小智 70

1)单片内核比Microkernel年龄大,这个想法是在20世纪80年代末构思出来的.

2)单片内核用于Unix和Linux.微内核用于QNX,L4和HURD.它最初用于Mach(不是Mac OS X),但后来转换为混合内核.甚至Minix也不是纯内核,因为设备驱动程序是作为内核的一部分编译的.

3)单片内核比微内核更快.第一个微内核Mach比Monolithic内核慢50%,而像L4这样的后期版本比Monolithic内核慢2%或4%.

4)单片内核通常很笨重.纯Microkernel必须小巧,以适应处理器的L1缓存(第一代微内核).

5)在Monolithic内核中,设备驱动程序驻留在内核空间中,而在Microkernel中,设备驱动程序驻留在用户空间中.

6)由于设备驱动程序驻留在内核空间中,因此单片内核比微内核更不安全,并且驱动程序中的故障可能导致崩溃.微内核比单片内核更安全,因此在一些军事设备中使用.

7)单片内核使用信号和套接字来确保IPC,微内核方法使用消息队列.第一代微内核很难实现IPC,因此上下文切换速度很慢.

8)向单片系统添加新功能意味着重新编译整个内核,而使用微内核,您可以添加新功能或补丁而无需重新编译.


小智 22

单片内核

内核的所有部分,如调度程序,文件系统,内存管理,网络堆栈,设备驱动程序等,都在单片内核的内核中维护在一个单元中

好处

•加快处理速度

缺点

•崩溃不安全•移植不灵活•内核大小爆炸

示例 •MS-DOS,Unix,Linux

微内核

只有IPC(进程间通信),基本调度程序,基本内存处理,基本I/O原语等非常重要的部分才会被放入内核中.通过消息传递进行通信.其他人在User Space中维护为服务器进程

好处

•防撞,便携,尺寸更小

缺点

•由于额外的消息传递而导致处理速度变慢

示例 •Windows NT


Nam*_*nav 13

1.Monolithic Kernel(Pure Monolithic):all

  • 所有内核服务来自单个组件

    ( - )添加/删除是不可能的,少/零灵活

    (+)组件间通信更好

例如: - 传统的Unix

2.Micro内核:few

  • 来自核心内核的少数服务(内存管理,CPU管理,IPC等),来自不同层/组件的其他服务(文件管理,I/O管理等)

  • 拆分方法[某些服务处于特权(内核)模式,而某些服务处于正常(用户)模式]

    (+)灵活的变化/升级

    ( - )通信开销

例如: - QNX

3.Modular kernel(Modular Monolithic):most

  • Micro和Monolithic内核的组合

  • 模块集合 - 模块可以是 - >静态+动态

  • 驱动程序以模块的形式出现

例如: - Linux Modern OS