返回首页

Windows 内核和 Linux 内核谁更复杂?

201 2023-12-08 05:41 admin

一、Windows 内核和 Linux 内核谁更复杂?

两个系统的内核结构不一样,没什么可比性,都有各自的优势。

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

内核

什么是内核呢?

计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交互,不用关心硬件的细节。

内核有哪些能力呢?

现代操作系统,内核一般会提供 4 个基本能力:

  • 管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力;
  • 管理内存,决定内存的分配和回收,也就是内存管理的能力;
  • 管理硬件设备,为进程与硬件设备之间提供通信能力,也就是硬件通信能力;
  • 提供系统调用,如果应用程序要运行更高权限运行的服务,那么就需要有系统调用,它是用户程序与操作系统之间的接口。

内核是怎么工作的?

内核具有很高的权限,可以控制 cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因此大多数操作系统,把内存分成了两个区域:

  • 内核空间,这个内存空间只有内核程序可以访问;
  • 用户空间,这个内存空间专门给应用程序使用;

用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有内存空间。因此,当程序使用用户空间时,我们常说该程序在用户态执行,而当程序使内核空间时,程序则在内核态执行。

应用程序如果需要进入内核空间,就需要通过系统调用,下面来看看系统调用的过程:

内核程序执行在内核态,用户程序执行在用户态。当应用程序使用系统调用时,会产生一个中断。发生中断后, CPU 会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动触发中断,把 CPU 执行权限交回给用户程序,回到用户态继续工作。

Linux 的设计

Linux 的开山始祖是来自一位名叫 Linus Torvalds 的芬兰小伙子,他在 1991 年用 C 语言写出了第一版的 Linux 操作系统,那年他 22 岁。

完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核的源代码,每个人都可以免费下载和使用。

Linux 内核设计的理念主要有这几个点:

  • MutiTask,多任务
  • SMP,对称多处理
  • ELF,可执行文件链接格式
  • Monolithic Kernel,宏内核

MutiTask

MutiTask 的意思是多任务,代表着 Linux 是一个多任务的操作系统。

多任务意味着可以有多个任务同时执行,这里的「同时」可以是并发或并行:

  • 对于单核 CPU 时,可以让每个任务执行一小段时间,时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。
  • 对于多核 CPU 时,多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行。

SMP

SMP 的意思是对称多处理,代表着每个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都可以访问完整的内存和硬件资源。

这个特点决定了 Linux 操作系统不会有某个 CPU 单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个 CPU 上被执行。

ELF

ELF 的意思是可执行文件链接格式,它是 Linux 操作系统中可执行文件的存储格式,你可以从下图看到它的结构:

ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里我就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。

另外,ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。

那 ELF 文件怎么生成的呢?

我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是 ELF 文件。

那 ELF 文件是怎么被执行的呢?

执行 ELF 文件的时候,会通过「装载器」把 ELF 文件装载到内存里,CPU 读取内存中的指令和数据,于是程序就被执行起来了。

Monolithic Kernel

Monolithic Kernel 的意思是宏内核,Linux 内核架构就是宏内核,意味着 Linux 的内核是一个完整的可执行程序,且拥有最高的权限。

宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。

不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。

与宏内核相反的是微内核,微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存、中断等,把一些应用放到了用户空间,比如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出现故障或者完全攻击,也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。

微内核内核功能少,可移植性高,相比宏内核有一点不好的地方在于,由于驱动程序不在内核中,而且驱动程序一般会频繁调用底层能力的,于是驱动和硬件设备交互就需要频繁切换到内核态,这样会带来性能损耗。华为的鸿蒙操作系统的内核架构就是微内核。

还有一种内核叫混合类型内核,它的架构有点像微内核,内核里面会有一个最小版本的内核,然后其他模块会在这个基础上搭建,然后实现的时候会跟宏内核类似,也就是把整个内核做成一个完整的程序,大部分服务都在内核中,这就像是宏内核的方式包裹着一个微内核。

Windows 设计

当今 Windows 7、Windows 10 使用的内核叫 Windows NT,NT 全称叫 New Technology。

下图是 Windows NT 的结构图片:

Windows 和 Linux 一样,同样支持 MutiTask 和 SMP,但不同的是,Window 的内核设计是混合型内核,在上图你可以看到内核中有一个 MicroKernel 模块,这个就是最小版本的内核,而整个内核实现是一个完整的程序,含有非常多模块。

Windows 的可执行文件的格式与 Linux 也不同,所以这两个系统的可执行文件是不可以在对方上运行的。

Windows 的可执行文件格式叫 PE,称为可移植执行文件,扩展名通常是.exe.dll.sys等。

PE 的结构你可以从下图中看到,它与 ELF 结构有一点相似。

总结

对于内核的架构一般有这三种类型:

  • 宏内核,包含多个模块,整个内核像一个完整的程序;
  • 微内核,有一个最小版本的内核,一些模块和服务则由用户态管理;
  • 混合内核,是宏内核和微内核的结合体,内核中抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是个完整的程序;

Linux 的内核设计是采用了宏内核,Window 的内核设计则是采用了混合内核。

这两个操作系统的可执行文件格式也不一样, Linux 可执行文件格式叫作 ELF,Windows 可执行文件格式叫作 PE。

参考资料

  1. https://en.wikipedia.org/wiki/Monolithic_kernel
  2. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
  3. https://en.wikipedia.org/wiki/Windows_NT

-----------------

说几句。

小林在知乎写了很多图解网络和操作系统的系列文章,很高兴收获到很多知乎朋友的认可和支持,正好最近图解网络和操作系统的文章连载的有 20+ 篇了,也算有个体系了。

所以为了方便知乎的朋友们阅读,小林把自己原创的图解网络和图解操作系统整理成了 PDF,一整理后,没想到每个图解都输出了 15 万字 + 500 张图,质量也是杠杠的,有很多朋友特地私信我,看了我的图解拿到了大厂的offer。

图解系统 PDF 开源下载:

突击大厂面试,图解系统开放下载!

图解网络 PDF 开源下载:

突击大厂面试,图解网络开放下载!

最后祝大家前程似锦,在编码的道路上一马平川。如果文章对你帮助的话,可以给@小林coding

点个赞,点个收藏,评论下更先显温情!

二、windows是微内核还是宏内核?

答案:windows属于 微内核 linux 属于宏内核 linux 开源的 可以自己根据自己的喜好进行重新编写 并且可以享受其他人的成果

三、windows内核驱动开发流程?

Windows驱动开发就是把开发包WDK下载下来,然后只要掌握了C/C++语言,接下来无非就是类库调来调去,像调用MFC、QT之类的库那样,看着书和MSDN上的文档来就行了。

四、windows的内核是什么?

WINDOWS的内核是如下的解释:

内核可以分为三层:

1、硬件打交道的一层成为硬件抽象层(HAL),这一层的用意是将与硬件相关联的逻辑隔离到一个专门的模块中,从而使上面的层次尽可能独立于硬件。

2、中间的一层的是内核层,有时候也叫微内核(micro-kernel),这一层包含了基本的操作系统原语和功能,如进程和线程的调度,中断和异常的处理和同步进制等等。

3、最上面的一层就是执行层了,这层的作用是为提供一些可供上层应用程序或内核驱动程序直接调用的功能和语义。windows内核的执行体包含了一个对象管理器,用于一致地管理执行体内的对象。

五、windows内核编程的前景?

作为操作系统的核心,Windows内核在计算机技术领域中扮演着非常重要的角色。随着计算机应用领域的不断扩大和变化,Windows内核编程的前景也呈现出多个方面的发展趋势:

1. 安全性:随着网络犯罪行为不断增加,强大的Windows内核编程技能对于提高计算机系统的安全性和防御能力变得尤为重要。

2. 人工智能:人工智能领域的蓬勃发展,也对Windows内核编程提出了新的挑战和需求。比如,在人工智能算法的实现过程中,需要对计算机的运行环境进行优化和管理,这就需要有相关的内核编程技能。

3. 新型设备:随着物联网、智能家居等新型设备快速普及,也为Windows内核编程提供了新的发展机遇和需求。通过调整内核配置,可以支持更多的设备和系统架构,同时提高系统的资源利用效率和运行效率。

因此,可以说Windows内核编程仍然具有广阔的发展前景和市场需求,未来依然存在大量的工作机会和发展空间。

六、操作系统内核的内核分类?

单内核(Monolithic kernel),是个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,它是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。

单内核结构在硬件之上定义了一个高阶的抽象界面,应用一组原语(或者叫系统调用)来实现操作系统的功能,例如进程管理,文件系统,和存储管理等等,这些功能由多个运行在核心态的模块来完成。

尽管每一个模块都是单独地服务这些操作,内核代码是高度集成的,而且难以编写正确。因为所有的模块都在同一个内核空间上运行,一个很小的bug都会使整个系统崩溃。然而,如果开发顺利,单内核结构就可以从运行效率上得到好处。

很多现代的单内核结构内核,如Linux和FreeBSD内核,能够在运行时将模块调入执行,这就可以使扩充内核的功能变得更简单,也可以使内核的核心部分变得更简洁。

单内核结构是非常有吸引力的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。 单核结构正趋向于容易被正确设计,所以它的发展会比微内核结构更迅速些。

单内核结构的例子:传统的UNIX内核----例如伯克利大学发行的版本,Linux内核。 微内核(Microkernelkernel)结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,这些原语仅仅包括了建立一个系统必需的几个部分,如线程管理,地址空间和进程间通信等。

微核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最核心的部分的设计更简单。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分

微内核将许多OS服务放入分离的进程,如文件系统,设备驱动程序,而进程通过消息传递调用OS服务。微内核结构必然是多线程的,第一代微内核,在核心提供了较多的服务,因此被称为'胖微内核',它的典型代表是MACH。它既是GNU HURD也是APPLE SERVER OS的核心,可以说,蒸蒸日上.第二代为微内核只提供最基本的OS服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS。

微内核只提供了很小一部分的硬件抽象,大部分功能由一种特殊的用户态程序:服务器来完成。微核经常被用于机器人和医疗器械的嵌入式设计中,因为它的系统的关键部分都处在相互分开的,被保护的存储空间中。这对于单核设计来说是不可能的,就算它采用了运行时加载模块的方式。

微内核的例子:AIX,BeOS,L4微内核系列,.Mach中用于GNU Hurd和Mac OS X,Minix,MorphOS,QNX,RadiOS,VSTa。 混合内核它很像微内核结构,只不过它的的组件更多的在核心态中运行以获得更快的执行速度。

混合内核实质上是微内核,只不过它让一些微核结构运行在用户空间的代码运行在内核空间,这样让内核的运行效率更高些。这是一种妥协做法,设计者参考了微内核结构的系统运行速度不佳的理论。然而后来的实验证明,纯微内核的系统实际上也可以是高效率的。大多数现代操作系统遵循这种设计范畴,微软公司开发的Windows操作系统就是一个很好的例子。另外还有XNU,运行在苹果Mac OS X上的内核,也是一个混合内核。

混合内核的例子: BeOS 内核 ,DragonFly BSD,ReactOS 内核

Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技术的操作系统。 外内核系统,也被称为纵向结构操作系统,是一种比较极端的设计方法。

外内核这种内核不提供任何硬件抽象操作,但是允许为内核增加额外的运行库,通过这些运行库应用程序可以直接地或者接近直接地对硬件进行操作。

它的设计理念是让用户程序的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和系统资源复用相关的服务。

传统的内核设计(包括单核和微核)都对硬件作了抽象,把硬件资源或设备驱动程序都隐藏在硬件抽象层下。比方说,在这些系统中,如果分配一段物理存储,应用程序并不知道它的实际位置。

而外核的目标就是让应用程序直接请求一块特定的物理空间,一块特定的磁盘块等等。系统本身只保证被请求的资源当前是空闲的,应用程序就允许直接存取它。既然外核系统只提供了比较低级的硬件操作,而没有像其他系统一样提供高级的硬件抽象,那么就需要增加额外的运行库支持。这些运行库运行在外核之上,给用户程序提供了完整的功能。

理论上,这种设计可以让各种操作系统运行在一个外核之上,如Windows和Unix。并且设计人员可以根据运行效率调整系统的各部分功能。

七、Windows10系统中IE11内核版本设置?

步骤如下:;

1.在Cortana中搜索"默认应用设置";

2.然后通过点击或单击Microsoft Edge图标打开默认的Web浏览器。然后单击需要更成为默认的Web浏览器,更改会立刻生效,如没有生效,请重新启动设备。

八、windows内核是什么意思?

微软Windows系统的内核版本号是Windows NT。

在最初的Windows架构之外,微软开发了专门面向PC服务器的Windows NT架构,它第一次出现在Windows NT 3.1里。Windows 2000就是综合了两种架构的优势,因此代码版本统一升级到5.0。

随后问世的Windows XP虽然改变了命名方法,但核心架构没有太大变化,因此核心版本号为5.1。而Windows Vista在内核和外壳架构方面都做了重大改变,因此代码版本进入6.0时代。

“Windows 7”的命名与核心代码版本无关,“7”只不过因为它是微软的第七代桌面操作系统而已,就像Windows Me与Win98/95同属一个时代,命名上却赶了个时髦一样。微软表示,Windows 7是客户端操作系统的一次重大改进,在内核、设计、工程等各个方面都有很大创新。核心版本从6.0升级到6.1,这样一方面确保Windows 7能延续Windows Vista的优秀特性,另一方面也能最大程度地保证应用程序的兼容性。

九、LINUX和WINDOWS内核的区别?

1. 明确结论:

LINUX和WINDOWS内核最大的区别在于其设计哲学不同,LINUX内核采用了模块化的设计思想,对系统资源的管理更加灵活和高效,能够支持更广泛的硬件设备;而WINDOWS内核则更趋于集成化,适用于单一的硬件平台,尤其在商业环境下的兼容性更强。

2. 解释原因:

LINUX内核采用模块化的设计思路,将大部分设备驱动程序、文件系统等功能作为独立的模块加载到内核中,只在需要的时候才调用这些模块,这样可以减小内核的体积,提高内存利用率,并且使LINUX系统支持更多的设备,因为只要有相应的模块,就可以很容易地加入到内核中。而WINDOWS内核则更为集成,更多功能被直接集成在内核中,只是在启动时才加载相应的驱动程序和服务,这种设计适合单一的硬件平台,对跨平台的适应能力不如LINUX。

3. 内容延伸:

除了上述的硬件适应性和资源管理等方面的区别,LINUX和WINDOWS内核在操作系统的实现方式、多用户系统的支持方式、文件系统的设计方式等方面也有很多的差异。值得注意的是,这些区别并不代表LINUX的表现一定优越于WINDOWS,两者都有各自的优点和适用场景。

4. 具体步骤:

想要深入了解LINUX和WINDOWS内核的区别,可以通过以下步骤展开:

(1)了解操作系统内核的基本概念和设计思想;

(2)比较LINUX和WINDOWS内核的基本特征,如内存管理、硬件适应性、驱动程序架构、多任务处理、文件系统设计等方面;

(3)分析LINUX和WINDOWS内核的优缺点,以及适用场景和应用领域;

(4)根据实际需求选择相应的操作系统和内核版本,以便在特定的计算环境中得到更好的性能和体验。

十、linux内核能装windows吗?

不可以,Linux和Windows是两个不同的操作系统,它们的内核和系统架构不同。Linux内核是基于UNIX的,而Windows内核则是基于Microsoft的。因此,在同一台计算机上,只能安装其中一个操作系统。如果想在同一台计算机上同时运行Linux和Windows,需要使用虚拟化技术,如VMware或VirtualBox等虚拟机软件。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片

网站地图 (共14个专题10843篇文章)

返回首页