所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行块(文件)。也就是说,它们必须以完整、单独的可执行块的形式在一个单独的地址空间中运行。Unix内核几乎都需要硬件系统提供页机制以管理内存。这种页机制可以加强内存空间的保护,并保证每个进程都可以运行于不同的虚地址空间上。

单内核与微内核设计之比较

操作系统内核可以分为两大设计阵营:单内核和微内核(第三阵营外内核,主要用在科研系统中,但也逐渐在现实世界中壮大起来)。

单内核是两大阵营中一种较为简单的设计,在1980年之前,所有的内核都设计成单内核。所谓单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数Unix系统都设计为单模块。

另一方面,微内核并不作为一个单独的大过程来实现。相反,微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间。因此,就不可能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效祸及另一个。

同样,模块化的系统允许一个服务器为了另一个服务器而换出。因为IPC机制的开销比函数调用多,又因为会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。基于此,付之于实际的微内核系统让大部分或全部服务器位于内核,这样,就可以直接调用函数,消除频繁的上下文切换。Windows NT内核和Mach(Mac OS X的组成部分)是微内核的典型实例。不管是Windows NT还是Mac OS X,都在其新近版本中不让任何微内核服务器运行在用户空间,这违背了微内核设计的初衷。

Linux 是一个单内核,也就是说,Linux内核运行在单独的内核地址空间。不过,Linux汲取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。不仅如此,Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。实用主义再次占了上风。

当Linus和其他内核开发者设计Linux内核时,他们并没有完全彻底地与Unix诀别。他们充分地认识到,不能忽视Unix的底蕴(特别是Unix的API)。而由于Linux并没有基于某种特定的Unix,Linus和他的伙伴们对每个特定的问题都可以选择已知最理想的解决方案—在有些时候,当然也可以创造一些新的方案。以下是对Linux内核与Unix各种变体的内核特点所作的分析比较:

·Linux支持动态加载内核模块。尽管Linux内核也是单内核,可是允许在需要的时候动态地卸除和加载部分内核代码。

·Linux支持对称多处理(SMP)机制,尽管许多Unix的变体也支持SMP,但传统的Unix并不支持这种机制。

·Linux内核可以抢占(preemptive)。与传统的Unix不同,Linux内核具有允许在内核运行的任务优先执行的能力。在其他各种Unix产品中,只有Solaris和IRIX支持抢占,但是大多数传统的Unix内核不支持抢占。

·Linux对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。对于内核来说,所有的进程都一样—只不过其中的一些共享资源而已。

·Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs)。

·Linux忽略了一些被认为是设计得很拙劣的Unix特性,像STREAMS,它还忽略了那些实际上已经根本不会使用的过时标准。

·Linux体现了自由这个词的精髓。现有的Linux特性集就是Linux公开开发模型自由发展的结果。如果一个特性没有任何价值或者创意很差,没有任何人会被迫去实现它。相反的,在Linux的发展过程中已经形成了一种值得称赞的务实态度:任何改变都要针对现实中确实存在的问题,经过完善的设计并有正确简洁的实现。于是,许多其他现代Unix系统包含的特性,如内核换页机制,都被毫不迟疑的引入进来。

不管Linux和Unix有多大的不同,它身上都深深地打上了Unix烙印。

Linux内核和传统Unix内核的比较相关推荐

  1. 宏内核与微内核、Linux内核与Unix内核的区别

    宏内核:简单来说,就是把很多东西都集成进内核,例如linux内核,除了最基本的进程.线程管理.内存管理外,文件系统,驱动,网络协议等等都在内核里面.优点是效率高.缺点是稳定性差,开发过程中的bug经常 ...

  2. Linux内核深度解析epub,Unix内核源码剖析 高清pdf版 含epub+mobi

    本书是一本Unix内核源代码的阅读指南.作者结合UNIX V6已公开的相关文档,对其内核源码进行详细剖析,旨在让读者更深入地理解进程.中断.块I/O系统.文件系统.字符I/O系统.启动系统等操作系统的 ...

  3. [转]Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国,转载地址:http://lamp.linux.gov.cn/Linux/kernel_options.html 版权声明 本文作者是一 ...

  4. Linux 2.6.19.x 内核编译配置选项简介(内核裁剪)

    Linux 2.6.19.x 内核编译配置选项简介 Code maturity level options 代码成熟度选项 Prompt for development and/or incomple ...

  5. [Linux]Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 Code maturity level options 代码成熟度选项 Prompt for development and/or incomple ...

  6. (转载) Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  7. Linux 2.6.19.x 内核编译配置选项简介(转)

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  8. linux下poll和epoll内核源代码剖析

    作者:董昊 博客链接http://donghao.org/uii/ poll和epoll的使用应该不用再多说了.当fd很多时,使用epoll比poll效率更高. 我们通过内核源码分析来看看到底是为什么 ...

  9. Linux 4.13/4.14内核中带来的ULP(Upper Layer Protocol)

    序 过了一个很爽的国庆假期,跟小小的小男朋友家长一起回其老家尝到了潮汕美食,南澳岛捕鱼捕虾,海鲜撑到爆,回到深圳次日小小另一个小朋友家长又带我们到东莞长安尝到了正宗的恩施土家菜,几天下来喝了几顿爽酒, ...

  10. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

最新文章

  1. 血亏 1.5 亿、华为断供、Linux 之父怒删代码,2020 IT 大事记盘点
  2. 通过jquery的serializearray处理表单数据成json格式,并提交到后台处理
  3. asp.net开发中自定义网站的目录
  4. SQL Server中的锁的简单学习
  5. angular 模块构建_通过构建全栈应用程序学习Angular 6
  6. 你还不会手写SpringBoot启动器吗
  7. java和python对比----1:
  8. androidStudio导入库文件
  9. Java运算符及录入
  10. Android 自定义UI--电池
  11. dd wipe 命令磁盘清空shell脚本,笔记本台机MAC通用
  12. 20-21-2网络管理quiz3
  13. 修改笔记-批量去除附件售价
  14. js JavaScript 求100以内的质数(素数)和合数 以及奇数和偶数
  15. png转icon java_原创 | Java图片处理:ico格式转 PNG/JPG等格式
  16. matlab的解线性方程组
  17. 怎样用c语言预测股票价格,如何根据时间和价格的波动来预测股票走势
  18. 【示波器专题】数字示波器的主要指标——带宽
  19. 抛弃光驱,让你的U盘变光驱,制作USB-CDROM,用U盘安装系统
  20. couldn't create PTY

热门文章

  1. 离散数学之矩阵关系运算
  2. 程序员零下20度雪地求婚快冻伤 女友却崩溃了
  3. 目标跟踪之Pysot系列代码训练(SiamRPN\SiamRPN++)
  4. 基于ESP32-S2制作本地气象台/温度计
  5. 【蓝牙sbc协议】sbc源码阅读笔记(二)——sbc_struct详解(上)
  6. win7服务器建网站教程,win7搭建Web服务器教程
  7. c语言编程泰勒展开式计算,学习笔记:用c语言编写泰勒展开公式myexp()实现math.h.数学函数...
  8. 万娟 白话大数据和机械学习_白话大数据与机器学习
  9. linux主机独立显卡切换,linux双显卡怎么切换到独立显卡
  10. java 多文字水印_Java如何给Word文档添加多行文字水印