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

Linux 内核和 Windows 内核有什么区别,第1张

目录

一、什么是内核

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 内核还存在着许多其他的差异,比如:

linux系统和windows系统的区别:

Windows下可以运行绝大部分的游戏,硬件厂商近乎100%的支持,linux下可直接运行的软件数量,和win比起来就是1和99的区别,选择linux的人基本不会考虑玩游戏,同时linux正期待更多硬件厂商的支持

linux安全性高,windows的漏洞、病毒、木马、后门出现频录比较高,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用,linux字符模式运行的更好,图形界面还只是附带品

无论按照什么标准对Windows和Linux进行评估,都存在一定的问题:每个 *** 作系统都不止一个版本。

做服务器运维工作,要经常和Linux的版本号打交道,但一直搞不明白Linux内核和Linux发行版到底是个啥东西。其实要理解Linux内核和Linux发行版之间的关系,只要能理解下面的关系就可以了:

1.类似于游戏引擎《虚幻4》和游戏《绝地求生》之间的关系。没有虚幻4这款引擎,就没有绝地求生的游戏,但是有了虚幻4这款引擎,可以开发各种各样的游戏。

2.类似于汽车的核心三大件(发动机、变速箱、底盘)和宝马汽车之间的关系。汽车最重要的东西就是发动机、变速箱、底盘,宝马汽车和奔驰汽车可能用的都是同样的发动机,但是宝马汽车和奔驰汽车的外观是完全不一样的。

3.类似于电脑的核心硬件(CPU、内存、硬盘、主板、显卡)和戴尔电脑之间的关系。不管是联机的电脑,还是戴尔的电脑,CPU都是Intel或者AMD的。

4.类似于安卓系统和华为手机或者说和华为手机 *** 作系统之间的关系。三星、华为、小米、Vivo这些手机的 *** 作系统都是安卓的 *** 作系统,除去手机硬件的外观不说,在 *** 作使用上就存在差异。并且同是华为的品牌,手机型号不同,使用的安卓的内核版本号也不相同。

简单的说,内核就是内部的核心的东西,大家的内核都是一样的,发行版对应的则是外部的东西,例如功能、特性、外观、 *** 作啊,大家的发行版都是不一样的。

Linux内核是Linux *** 作系统创始人主持的网站www.kernel.org上发布的 *** 作系统的最基本的那些东西。Linux发行版则是在前述那些东西的基础上添加了一些工具、软件,构成的一套庞大复杂的 *** 作系统。虽然内核都是一样的,但添加部分各不相同,这就构成了不同的发行版本。Linux本身指的是一个 *** 作系统内核,只有内核是无法直接使用的。我们需要的是可以使用的 *** 作系统,是一个包含了内核和一批有用的程序的一个集合体,这个就是Linux发行版。其中,Ubuntu、RedHat就是Linux的不同的发行版。

外延1:既然内核这么牛逼,那么Linux的内核长啥样儿,干啥的?

参考1: https://www.cnblogs.com/yuanqiangfei/p/10225202.html

文中给出了Linux内核的整体架构。根据内核的核心功能,Linux内核提出了5个子系统,分别负责如下的功能:1. Process Scheduler,也称作进程管理、进程调度。2. Memory Manager,内存管理。3. VFS(Virtual File System),虚拟文件系统。4. Network,网络子系统。5. IPC(Inter-Process Communication),进程间通信。

到此打住,不再继续研究Linux内核了,否则偏离了文章的主题,而且Linux内核这方面的知识也不是一两天就能掌握的。

外延2:既然Linux有内核,那么Windows有内核么?

参考2: https://www.cnblogs.com/skyer/p/8608113.html

Windows显然也是有内核的说法的,只不过一个内核版本对应一个发行版本。说到这我真要吐槽一把Linux的版本问题,做服务器运维,经常遇到因为Linux的版本不同,导致应用程序死活装不上,库文件版本号死活对不上,依赖包死活找不到......这些一提起来就让人恶心的问题。

外延3:Linux内核版和发行版之间大致是怎么一种联系?

参考3: https://www.jianshu.com/p/f96880637e42

通过上面的解释,当我们的头脑里能区分出内核版和发行版的概念之后,再看两者之间的关系,就很清晰了。

外延4:如何查看Linux内核版本号和发行版本号?

参考4: https://blog.csdn.net/haiziccc/article/details/90203967

查看 *** 作系统版本一般有三个命令:

1. lsb_release -a,适用于所有Linux发行版

2. cat /etc/redhat-release,适用于Redhat

3. cat /etc/issue,适用于所有Linux发行版

查看系统内核版本一般有两个命令:

1. cat /proc/version

2. uname -a


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7415232.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存