【软件】微内核与宏内核

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


核心模式与用户模式(Kernel Mode & User Mode)

我们都知道一台计算机或者手机都要有个操作系统(Operating System简称OS),最常用的操作系统就是手机上的安卓(Android)和电脑上的Windows,其次还有苹果手机上的iOS和苹果笔记本上的macOS,也许你还听说过另外的操作系统比如Unix、Linux、Ubuntu等等。总之,这些都是操作系统。

买一个硬件设备(电脑、笔记本或者手机),首先上面一般都已经安装了操作系统,然后我们可以在操作系统的基础上再安装各种各样的软件程序或APP。硬件\to操作系统\to软件程序,这就像砖头一层一层累加起来。

操作系统本身也是代码编写出来的,所以也是软件。从这里我们就可以看出来,同样都是软件,操作系统可以直接控制硬件,而应用程序不能直接控制硬件,必须要通过操作系统来间接使用硬件资源。

内核(kernel)就是操作系统的最主要代码,我们也可以简单的认为Kernel(内核)就是指操作系统。

所有的软件代码,无论操作系统还是应用程序,本质是都是由中央处理器芯片(CPU)来运行的,但如果你安装的APP代码里面有病毒怎么办?CPU运行这些有问题的代码就会遇到困难,甚至会死机。

几乎每个程序员都能开发应用程序APP,全世界的APP数不胜数,也就没办法严格控制以确保APP代码不会导致死机。

但是操作系统就少很多,而且都是比较大型公司编写的,也经过了很多的严格测试,相对而言就比较可控。

所以,计算机的CPU规定,“我只信赖操作系统的代码,不信赖应用程序的代码。如果应用程序代码云小时候遇到问题,操作系统你可以停止它。”

于是,遵照CPU的规则,Kernel核心代码就运行在最高权限的核心模式下(Kernel mode),而应用程序代码就只能运行在权限比较低的用户模式下(User mode)。

Kernel mode是具有最高权限的模式,也叫做管理员模式(Supervisor mode)。

内核的作用

内核有什么作用?或者我们说操作系统提供什么功能,起什么作用?

首先,要直接控制CPU和内存,我们暂且称为关键功能。

我们都知道计算机可以同时运行很多软件做很多事,这叫做多进程(Multi-process)或者多任务(Multi-tasking),那么操作系统就要能够实现多个任务的管理和安排,还要负责多个任务之间的协作通信。一般的,主要包含:

  • Virtual memory,将内存虚拟化以供应用程序使用。
  • Task Schedules,任务排程。
  • IPC,Inter-process communication,进程间通信。

其次,要实现基本的功能服务,我们暂且称为服务功能。

应用程序可以调用这些服务来实现各种功能,比较基础的操作系统服务有:

  • File System,文件系统,保存和读取文件。
  • Network,网络服务,让应用程序可以联网。
  • Graphic,图形服务,提供屏幕上显示图形的能力。
  • GUI,界面服务,提供界面工具按钮显示。

当然还有很多其他的,这里就不一一列举了。

另外,要能够支援更多硬件设备,我们暂且称为设备驱动。

比如增加了一个摄像头,一个光线传感器,操作系统要确保这些设备能够被应用程序使用起来才行。其实就是要对各种硬件的驱动进行管理,就是Device driver设备启动服务。

微内核与宏内核 Microkernel & Monolithic Kernel

宏内核也叫大内核。宏内核与微内核的区别其实就是大内核与小内核的区别。

怎么划分?

Microkernel微内核只包含关键功能Virtual memory、Task Schedules和IPC,遵循“能多小就要多小”的设计原则。

Monolithic kernel则包含上面介绍的操作系统需要的全部功能。

其实,无论微内核系统或者宏内核系统,它们差不多都要提供那么多的功能,谁也少不了太多。所以两者看似是大小的区别或者是kernel代码的区别,但本质上却是把哪些功能放在了kernel mode,把哪些功能放在user mode的区别。

从维基百科给出的这张图上明显可以看出两者的区别。

优劣对比

如果从历史发展和现状来对比,几十年操作系统的发展结果早已清晰表明:宏内核获得了绝对性的胜利。

因为当前我们使用的主流操作系统,包括Windows、Android、iOS、macOS、Linux等等,都是宏内核操作系统或者说都是基于宏内核架构创建起来的。

但是我们也应该注意到以下几点:

  • 微内核也起源非常之早,可以追溯到1970年前后,一直以来是和宏内核同步发展的。
  • 目前的主流操作系统早已经不是当年纯粹的宏内核架构了,而是广泛吸取微内核架构的优点而后揉合而成的混合内核Hybrid kernel。
  • 当今宏内核架构遇到了越来越多的困难和挑战,而微内核的优势似乎越来越明显,尤其是谷歌下一代操作系统Fuchsia['fjuʃə] 还是华为未来的鸿蒙OS,都瞄准了微内核架构。

微内核为什么半个世纪没有获得成功?
这里有很多原因,这里只是其中可能的几条:

  • 性能问题。Kernel mode和User mode之间的切换更加耗时,比起把各种功能都打包在一起的宏内核,微内核需要太多的切换,这直接导致性能底下。当然现在无论是算法改进还是CPU支持都有了很大的进步,基本上可以说现在已经不是大问题了。
  • 极致原则。微内核一直努力遵循“内核应该极小化”的原则(minimality),这让很多微内核研究者和开发者收到了束缚,在时代允许的硬件环境下难以对性能进行有效优化。
  • 缺乏大企业支持。当然这也和微内核当初性能不佳有关。

那么微内核的优势在哪里?

  • 易于维护和升级。把众多的服务功能和设备驱动从内核代码中分离出来,如果只需要对某些功能进行改进,这样无论是改代码还是增加新功能,都不用去变动原来的核心代码,当然效率高。
  • 系统更加稳定。只要微内核的关键功能代码不出问题,系统就不会崩溃。比如说如果文件服务代码运行时候出了问题,宏内核因为文件服务代码是放在kernel mode的,直接就系统崩溃蓝屏了。而微内核的文件服务代码是放在user mode的,只要运行在kernel mode的代码直接把文件服务功能强行停止然后重启就可以继续使用了,系统不会蓝屏。
  • 系统更加安全。微内核除了把额外的功能划出kernel mode之外,还改变了任务之间的权限管理模式,它并不能像宏内核那样直接给用户安装的APP授权访问关键功能和各种服务、驱动,而是依赖于不断的传递带有授权信息的handle对象来实现授权,这虽然很繁琐,但安全性无疑要比宏内核高很多。
  • 系统更加可定制。宏内核把所有驱动和服务都打包在内核里难以拆分,如果需要开发一个不需要网络功能服务的操作系统就比较麻烦了。而微内核中各种服务都是单独的,直接去掉很容易。这对当前越来越多样化的小型智能硬件操作系统的开发非常有用。
  • 分布式计算。因为微内核把各种服务和驱动都单独开来,这就允许让各种系统服务运行在不同的芯片、不同电脑上面,让很多台计算机一起来运行同一个操作系统,这对分布式计算和云计算提供了更多可能。

在windows2000之前,比如windows98或者windowsMe,文件服务、网络服务等等这些功能都是打包放在kernel mode中运行的,只要其中一个服务出问题就直接蓝屏。后来Window把很多服务功能都从核心中移出来,所以Windows7之后蓝屏就明显少了很多。

更多内容

苹果的操作系统是不是微内核?

不是。Mac OS X是基于NeXT公司1985年至1999年开发的NeXTSTEP系统开发的,NeXTSTEP是基于Mach的,虽然Mach一般认为是微内核架构,但NeXTSTEP的核心是基于自研XNU的Darwin系统,这是一种Hybrid kernel混合内核架构,它揉合了Mach和自研的设备驱动、输入输出等模块,即使只说这个Mach,也是卡内基梅隆大学基于BSD研发的包含了文件系统的宏内核版本。
所以说,当今苹果的iOS、macOS等操作系统都是起源于混合内核架构,不是微内核,也不是纯粹的宏内核。

Exokernel外核

外核更小,比微内核还要小。外核的目标是让应用程序获得最多的控制硬件的自由,就是让开发者对硬件控制更深,以便于开发出性能更好的应用程序。

在外内核的基础之上,应用程序Program和库文件Lib一起直接实现应用程序+操作系统的功能,称之为库LibOS,它直接以最高权限运行,不存在kernel mode和user mode的区别,也去除了所有的冗余,体积小,性能强。

如果我们把应用程序program和库lib再深一步联合打包成操作系统,那么它甚至可以脱离外核而直接运行在物理硬件设备上,或者通过hypervisor超级管理员程序来激活运行,那么这样的系统我们叫做Unikernel。

可载入核心模块Loadable kernel module

为了减轻kernel内容,很多宏内核操作系统(windows、安卓等)直接把某些功能服务移到核心外面,只在需要使用的时候再加载进来,这些模块就称作可载入核心模块。
当前大部分类Unix操作系统(Unix-like)和微软操作系统都支持可载入核心模块。

保护环Protection ring

这里是指计算机CPU芯片在运行代码时候的权限控制机制。kernel核心代码运行在最高权限,Applications应用程序代码运行在最低权限。

BSD操作系统 Berkeley Software Distribution

由伯克利大学研发和管理的一个基于Unix的系统,开始于大约1970年代。苹果操作系统都起源于BSD系统,微软也借用了BSD部分代码。

Unix操作系统

1970年代,AT&T公司的贝尔实验室Bell lib研发的一款多任务、多用户操作系统。可以说是鼻祖级别的操作系统,数十年派生出了数十种操作系统,包含Linux、Android等。
虽然苹果操作系统也是派生自Unix,但是也源于乔布斯1985年离开苹果创办的NeXT公司的操作系统,而NeXT操作系统Darwin的最核心部分是基于BSD改进的XNU,有趣的是XNU的意思是X is Not Unix。

Hypervisor超级管理员

这是运行在CPU上权限最高程序,相对于操作系统上最高权限的管理员Supervisor来说,Hypervisor更加厉害,它比操作系统级别还高,甚至用来启动操作系统。

比较杂乱,有待整理


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容