Linux 内核和 Windows 内核有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核和 Windows 内核有啥区别相关的知识,希望对你有一定的参考价值。

参考技术A

目录


一、什么是内核?


1.1 内核的能力


二、操作系统分层


三、内核是如何工作的?


四、Linux 的设计


4.1 Multitask and SMP(Symmetric multiprocessing)


4.2 ELF(Executable and Linkable Format)


4.3 Monolithic Kernel


4.4 在内核层和在用户层有什么区别?


五、Window 设计


六、总结




说到操作系统,就必须说内核。内核是操作系统中应用连接硬件设备的桥梁。



对于一个现代的操作系统来说,它的内核至少应该提供以下 4 种基本能力:




从上面 4 种能力来看操作系统和内核之间的关系,通常可以把操作系统分成 3 层,最底层的 硬件设备抽象 、中间的 内核 和最上层的 应用




内核权限非常高,它可以管理进程、可以 直接访问所有的内存 ,因此确实需要和进程之间有一定的隔离。这个隔离用 类似请求/响应 的模型,非常符合常理。



但不同的是在浏览器、服务端模型中,浏览器和服务端是用 不同的机器在执行 ,因此不需要共享一个 CPU。但是在进程调用内核的过程中,这里是存在资源共享的。


比如,一个机器有 4 个 CPU,不可能让内核用一个 CPU,其他进程用剩下的 CPU。这样太浪费资源了。


再比如,进程向内核请求 100M 的内存,内核把 100M 的数据传回去。 这个模型不可行,因为传输太慢了。


所以,这里多数操作系统的设计都遵循一个原则: 进程向内核发起一个请求,然后将 CPU 执行权限让出给内核。内核接手 CPU 执行权限,然后完成请求,再转让出 CPU 执行权限给调用进程。



Linux 操作系统第一版是1991 年林纳斯托·瓦兹(一个芬兰的小伙子,当时 22 岁)用 C 语音写的。 写完之后他在网络上发布了 Linux 内核的源代码。又经过了 3 年的努力,在 1994 年发布了完整的核心 Version 1.0。



MultiTask 指多任务,Linux 是一个多任务的操作系统。多任务就是多个任务可以同时执行,这里的“同时”并不是要求并发,而是在一段时间内可以执行多个任务。当然 Linux 支持并发。


SMP 指对称多处理。其实是说 Linux 下每个处理器的地位是相等的,内存对多个处理器来说是共享的,每个处理器都可以访问完整的内存和硬件资源。 这个特点决定了在 Linux 上不会存在一个特定的处理器处理用户程序或者内核程序,它们可以被分配到任何一个处理器上执行。




这个名词翻译过来叫作 可执行文件链接格式 。这是一种从 Unix 继承而来的可执行文件的存储格式。我们可以看到 ELF 中把文件分成了一个个分段(Segment),每个段都有自己的作用。



这个名词翻译过来就是宏内核,宏内核反义词就是 Microkernel ,微内核的意思。Linux 是宏内核架构,这说明 Linux 的内核是一个完整的可执行程序,且内核用最高权限来运行。宏内核的特点就是有很多程序会打包在内核中,比如,文件系统、驱动、内存管理等。当然这并不是说,每次安装驱动都需要重新编译内核,现在 Linux 也可以动态加载内核模块。所以哪些模块在内核层,哪些模块在用户层,这是一种系统层的拆分,并不是很强的物理隔离。


与宏内核对应,接下来说说微内核,内核只保留最基本的能力。比如 进程调度、虚拟内存、中断。多数应用,甚至包括驱动程序、文件系统,是在用户空间管理 的。




感觉分层其实差不多。 我这里说一个很大的区别,比如说驱动程序是需要频繁调用底层能力的,如果在内核中,性能肯定会好很多。对于微内核设计,驱动在内核外,驱动和硬件设备交互就需要频繁做内核态的切换。


当然微内核也有它的好处,比如说微内核体积更小、可移植性更强。不过我认为,随着计算能力、存储技术越来越发达, 体积小、安装快 已经不能算是一个很大的优势了。现在更重要的是如何有效利用硬件设备的性能。


之所以这么思考,也可能因为我是带着现代的目光回望当时人们对内核的评判,事实上,当时 Linux 团队也因此争论过很长一段时间。 但是我觉得 历史 往往是螺旋上升的,说不定将来性能发展到了一个新的阶段,像微内核的灵活性、可以提供强大的抽象能力这样的特点,又重新受到人们的重视。


还有一种就是 混合类型内核 。 混合类型的特点就是架构像微内核,内核中会有一个最小版本的内核,其他功能会在这个能力上搭建。但是实现的时候,是用宏内核的方式实现的,就是内核被做成了一个完整的程序,大部分功能都包含在内核中。就是在宏内核之内有抽象出了一个微内核。



Windows 和 Linux 的设计有很大程度的相似性。Windows也有内核,它的内核是 C/C++ 写的。准确地说,Windows 有两个内核版本。一个是早期的Windows 9x 内核,早期的 Win95, Win98 都是这个内核。我们今天用的 Windows 7, Windows 10 是另一个内核,叫作 Windows NT。NT 指的是 New Technology。接下来我们讨论的都是 NT 版本的内核。


下面我找到一张 Windows 内核架构的图片给你一个直观感受。



Windows 同样支持 Multitask 和 SMP(对称多处理)。Windows 的内核设计属于混合类型。你可以看到内核中有一个 Microkernel 模块。而整个内核实现又像宏内核一样,含有的能力非常多,是一个完整的整体。


Windows 下也有自己的可执行文件格式,这个格式叫作 Portable Executable(PE),也就是可移植执行文件,扩展名通常是.exe、.dll、.sys等。


PE 文件的结构和 ELF 结构有很多相通的地方,我找到了一张图片帮助你更直观地理解。



Windows 还有很多独特的能力,比如 Hyper-V 虚拟化技术.



这一讲我们学习了内核的基础知识,包括内核的作用、整体架构以及 3 种内核类型( 宏内核、微内核和混合类型内核 )。


内核很小(微内核)方便移植,因为体积小、安装快;内核大(宏内核),方便优化性能,毕竟内核更了解计算机中的资源。


Linux 内核和 Windows 内核有什么区别?


【解析】 Windows 有两个内核,最新的是 NT 内核,目前主流的 Windows 产品都是 NT 内核。NT 内核和 Linux 内核非常相似,没有太大的结构化差异。


从整体设计上来看, Linux 是宏内核 NT 内核属于混合型内核 。和微内核不同,宏内核和混合类型内核从实现上来看是一个完整的程序。只不过混合类型内核内部也抽象出了微内核的概念,从内核内部看混合型内核的架构更像微内核。


另外 NT 内核和 Linux 内核还存在着许多其他的差异,比如:




单片内核和微内核有啥区别?

【中文标题】单片内核和微内核有啥区别?【英文标题】:What is difference between monolithic and micro kernel?单片内核和微内核有什么区别? 【发布时间】:2011-05-31 02:04:03 【问题描述】:

谁能举例说明单片内核和微内核之间的区别?内核还有其他分类吗?

【问题讨论】:

serverfault.com/questions/170517/monolithic-vs-micro-kernel 我也会推荐***页面 另一个有用的问题 - ***.com/questions/1806585/… 【参考方案1】:

微内核:

尽可能多地从内核移动到“用户”空间。

使用消息传递在用户模块之间进行通信。

好处:

1-更容易扩展微内核

2-更容易将操作系统移植到新架构

3-更可靠(内核模式下运行的代码更少)

4-更安全

缺点:

1-用户空间到内核空间通信的性能开销

【讨论】:

【参考方案2】:

    单片内核设计比 1980 年代末出现的微内核思想要古老得多。

    Unix 和 Linux 内核是单片的,而 QNX、L4 和 Hurd 是微内核。 Mach 最初是一个微内核(不是 Mac OS X),但后来转换为混合内核。 Minix(第 3 版之前)不是纯微内核,因为设备驱动程序是作为内核的一部分编译的。

    单片内核通常比微内核快。第一个微内核 Mach 比大多数单体内核慢 50%,而后来的 L4 等内核只比单体设计慢 2% 或 4%。

    单片内核体积大,而微内核体积小 - 它们通常适合处理器的 L1 高速缓存(第一代微内核)。

    在单片内核中,设备驱动程序驻留在内核空间中,而在微内核中,设备驱动程序位于用户空间中。

    由于单体内核的设备驱动程序驻留在内核空间中,单体内核不如微内核安全,并且驱动程序中的故障(异常)可能导致崩溃(在 Windows 中显示为 BSOD)。微内核比单片内核更安全,因此更常用于军事设备。

    单片内核使用信号和套接字来实现进程间通信 (IPC),微内核使用消息队列。第一代微内核没有很好地实现 IPC,并且在上下文切换时速度很慢 - 这就是导致它们性能不佳的原因。

    向单体系统添加新功能意味着重新编译整个内核或相应的内核模块(对于模块化单体内核),而使用微内核,您无需重新编译即可添加新功能或补丁。

    李>

【讨论】:

提到MINIX你指的是哪个版本? 第 3 版将设备驱动程序和文件系统与内核分开 @Nik-Lz:不是程序,而是功能。程序通常在用户空间上运行。如果您想在内核空间中执行代码,您有两个选择:将其构建到内核中,或者使用内核模块加载它。 ref【参考方案3】:

单片内核具有所有内核服务以及内核核心部分,因此很重并且对速度和性能有负面影响。另一方面,微内核是轻量级的,从而提高了性能和速度。 我在 wordpress 网站上回答了同样的问题。 表格形式的monolithic、microkernel和exokernel的区别,可以访问here

【讨论】:

【参考方案4】:

在内核设计的范围内,两个极端 点是整体内核和微内核。

(经典)Linux 例如,内核是一个单片内核(每个商业操作系统也是如此 迄今为止也是如此——尽管他们可能另有主张);

因为它的代码是 单个 C 文件产生实现上述所有内容的单个进程 服务。 为了举例说明 Linux 内核的封装,我们注意到 Linux 内核甚至无法访问任何标准 C 库。 事实上,Linux 内核不能使用基本的 C 库函数,例如 打印。相反,它实现了自己的打印功能(称为打印)。 Linux内核的这种隔离和自包含提供Linux内核 其主要优点是:内核驻留在单个地址空间中1 启用 所有功能都可以以最快的方式进行通信,而无需求助于 任何类型的消息传递。 特别是,单片内核实现了所有设备驱动程序 然而,这是单片内核的主要缺点: 引入任何新的不受支持的硬件都需要重写 内核(在相关部分),重新编译它,并重新安装整个 操作系统。更重要的是,如果任何设备驱动程序崩溃,整个内核都会受到影响 因此。 这种硬件添加和硬件崩溃的非模块化方法 是支持另一种极端设计方法的主要论据 对于内核。微内核在某种意义上是一个极简内核,它包含 只有最基本的操作系统服务(如进程管理和文件系统) 管理)。在微内核中,设备驱动程序位于内核之外 允许在操作系统运行时添加和删除设备驱动程序 并且不需要更改内核。

【讨论】:

【参考方案5】:

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

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

【讨论】:

Mac OS X 和 Windows 都是混合内核,更接近于单片内核。微内核的例子是:Mach QNX AmigaOS Minix GNU Hurd 是运行在微内核上的操作系统的一个很好的例子。它仍在积极开发中,一些流行的 Linux 发行版具有 Hurd 端口(Debian/Hurd、Arch Hurd 等)。 你能解释一下“静态二进制文件”是什么意思吗?【参考方案6】:

1.Monolithic Kernel(纯Monolithic):all

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

(-) 不能添加/删除,较少/零灵活

(+) 组件间通信更好

例如:- 传统的 Unix

2.微内核:few

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

拆分方法[有些服务处于特权(内核)模式,有些处于普通(用户)模式]

(+)灵活的变化/升级

(-)通信开销

例如:- QNX 等等。

3.Modular kernel(Modular Monolithic) :most

微内核和单体内核的结合

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

驱动以模块的形式出现

例如:- Linux 现代操作系统

【讨论】:

【参考方案7】:

单片内核

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

优势

•更快的处理

缺点

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

示例 •MS-DOS、Unix、Linux

微内核

只有非常重要的部分,如 IPC(进程间通信)、基本调度程序、基本内存处理、基本 I/O 原语等,被放入内核。通信通过消息传递发生。其他的在用户空间中作为服务器进程维护

优势

•防撞、便携、体积更小

缺点

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

示例 •Windows NT

【讨论】:

以上是关于Linux 内核和 Windows 内核有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

操作系统和内核有啥区别? [关闭]

linux系统中参数-和--有啥区别?

Linux内核开发与Linux驱动开发有啥关系?

Linux和嵌入式Linux有啥区别

linux中设备和驱动到底有啥区别,有啥联系啊?学习2.6的内核,搞得好晕呢!

Linux 内核和 Windows 内核有什么区别?