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

1,028 阅读5分钟

本文来源于公众号:勾勾的Java宇宙(微信号:Javagogo),莫得推广,全是干货!

原文链接:mp.weixin.qq.com/s/Q0gzT_xMa… 作者:林䭽


Windows 和 Linux 是当今两款最主流的服务器操作系统产品了。

两个操作系统各有千秋。我每次学习两个操作系统的技术知识,都切实地感受到编程真的是一门艺术,而学习编程就像是在探索艺术。

今天我从一道面试题目“Linux 内核和 Windows 内核有什么区别?”入手,去了解这两个操作系统内核的设计。

什么是内核?

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

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

  • 管理进程、线程(决定哪个进程、线程使用 CPU)

  • 管理内存(决定内存用来做什么)

  • 接硬件设备(为进程、和设备间提供通信能力)

  • 提供系统调用(接收进程发送来的系统调用)

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

那么,内核是如何工作的?可以来思考一个问题——

进程和内核的关系,是不是像浏览器请求服务端服务?

内核权限非常高,它可以管理进程、可以直接访问所有的内存,因此确实需要和进程之间有一定的隔离。

这个隔离用类似请求/响应的模型,非常符合常理。

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

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

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

所以,这里多数操作系统的设计都遵循一个原则:

进程向内核发起一个请求,然后将 CPU 执行权限让出给内核。内核接手 CPU 执行权限,然后完成请求,再转让出 CPU 执行权限给调用进程。

Linux 的内核设计

说到 Linux 内核设计,这里有很多有意思的名词。大多数听起来复杂、专业,但是理解起来其实很简单。接下来我们一一讨论。

  1. Multitask and SMP(Symmetric multiprocessing)

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

SMP 指对称多处理,其实是说 Linux 下每个处理器的地位是相等的,内存对多个处理器来说是共享的,每个处理器都可以访问完整的内存和硬件资源。

这个特点决定了在 Linux 上不会存在一个特定的处理器处理用户程序或者内核程序,它们可以被分配到任何一个处理器上执行。

  1. ELF(Executable and Linkable Format)

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

  1. Monolithic Kernel

翻译过来就是「宏内核」,反义词 是 Microkernel(微内核)。

宏内核说明 Linux 的内核是一个完整的可执行程序,且内核用最高权限来运行。

宏内核的特点就是有很多程序会打包在内核中,比如,文件系统、驱动、内存管理等。当然这并不是说,每次安装驱动都需要重新编译内核,现在 Linux 也可以动态加载内核模块。所以哪些模块在内核层,哪些模块在用户层,这是一种系统层的拆分,并不是很强的物理隔离。

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

Window 的内核设计

Windows 也有内核,它的内核是 C/C++ 写的。我们今天用的 Windows 7, Windows 10 的内核叫作 Windows NT。

Windows 同样支持 Multitask 和 SMP(对称多处理)。

Windows 的内核设计属于混合类型,你可以看到内核中有一个 Microkernel 模块。而整个内核实现又像宏内核一样,含有的能力非常多,是一个完整的整体。

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

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

除此之外,Windows 还有很多独特的能力,比如 Hyper-V 虚拟化技术。


欢迎大佬们关注公众号 勾勾的Java宇宙(微信号:Javagogo),拒绝水文,收获干货!