当前位置: 首页 > 科技观察

LinuxkernelvsWindowskernel,内核架构类型你懂的

时间:2023-03-17 16:47:18 科技观察

Windows和Linux可以说是我们比较常见的两个操作系统。Windows在计算机时代已经基本占领了市场,取得了巨大的商业成功,但是它并不开源,所以想要接触源代码就得加入Windows开发团队。服务器使用的操作系统基本都是Linux,内核源代码也是开源的。任何人都可以下载它并添加自己的更改或功能。Linux最大的魅力在于,世界上有很多技术领袖为它贡献代码。这两种操作系统各有优缺点,而且是平等的。操作系统的核心是内核。这次我们一起来看看吧。Linux内核和Windows内核有什么区别?内核什么是内核?一台计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用程序都需要和这些硬件设备通信,那就太累了。因此,内核负责这个中间人,让内核充当应用程序连接硬件设备的桥梁。应用程序只需要关心与内核的交互,不需要关心硬件的细节。内核有什么能力?在现代操作系统中,内核一般提供四种基本能力:管理进程和线程,确定哪个进程或线程使用CPU,即进程调度的能力;管理内存,决定内存的分配和回收,即内存管理的能力;管理硬件设备,提供进程与硬件设备之间的通信能力,即硬件通信能力;提供系统调用,如果应用程序想要运行更高权限的服务,那么就需要系统调用,它是用户程序和系统之间的操作接口。内核如何工作?内核具有很高的权限,可以控制cpu、内存、硬盘等硬件,而应用程序的权限很小,所以大多数操作系统将内存分为两个区域:内核空间,这块内存空间只能被自己使用内核程序访问;用户空间,该内存空间专供应用程序使用;用户空间代码只能访问本地内存空间,而内核空间代码可以访问所有内存空间。因此,当程序使用用户空间时,我们常说程序在用户态执行,而当程序使用内核空间时,程序在内核态执行。如果应用程序需要进入内核空间,就需要通过“系统调用”。我们来看看系统调用的过程:内核程序在内核态执行,用户程序在用户态执行。当应用程序使用系统调用时,会产生中断。中断发生后,CPU会中断当前正在执行的用户程序,跳转到中断处理程序,即开始执行内核程序。内核处理完后,会主动触发中断,将CPU执行权交还给用户程序,回到用户态继续工作。Linux的设计Linux的鼻祖来自一个名叫LinusTorvalds的芬兰男孩,他在1991年用C语言编写了第一个版本的Linux操作系统,当时他22岁。在完成第一版Linux之后,LinuxTorvalds在网上发布了Linux内核的源代码,大家可以免费下载使用。Linux内核设计理念主要有这几点:MutiTask,多任务SMP,对称多处理ELF,可执行文件链接格式MonolithicKernel,宏内核MutiTaskMutiTask意为多任务,意思是Linux是一个多任务操作系统.多任务意味着可以同时执行多个任务。这里的“同时”可以是并发,也可以是并行:对于单核CPU来说,每个任务可以执行一小段时间,时间到了再切换另一个任务。从宏观上看,多个任务在一段时间内执行,这就叫并发。对于多核CPU,多个任务可以同时由不同核的CPU执行,称为并行。SMPSMP是symmetricmultiprocessing的意思,意思是每个CPU的地位是平等的,对资源的使用权也是一样的。多个CPU共享同一个内存,每个CPU都可以访问完整的内存和硬件资源。这个特性决定了Linux操作系统没有单独的CPU来为应用程序或内核程序服务,而是每个程序都可以分配给任意一个CPU来执行。ELFELF意为executablefilelinkformat,是Linux操作系统中可执行文件的存储格式。从下图可以看出它的结构:ELF文件格式ELF把文件分成段,每个段都有自己的作用,这里就不详细说每个段的作用了。有兴趣的同学可以看看这本书《程序员的自我修养——链接、装载和库》。另外,ELF文件有两个索引。Program头表记录了“运行时”所需要的段,Section头表记录了二进制文件中的“各段首地址”。ELF文件是如何生成的?我们写的代码首先通过“编译器”编译成汇编代码,然后通过“汇编器”变成目标代码,也就是目标文件,最后通过“链接器”多个目标文件和各种函数库调用Link它们共同组成一个可执行文件,即ELF文件。ELF文件是如何执行的?在执行ELF文件时,会通过“加载器”将ELF文件加载到内存中,CPU读取内存中的指令和数据,从而执行程序。MonolithicKernelMonolithicKernel是宏内核的意思,Linux内核架构就是宏内核,也就是说Linux内核是一个完整的可执行程序,具有最高的权限。宏内核的特点是系统内核的所有模块,如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。不过Linux也实现了动态加载内核模块的功能。例如,大多数设备驱动以可加载模块的形式存在,与其他内核模块解耦,使得驱动开发和驱动加载更加方便灵活。宏内核、微内核、混合内核的操作系统结构与宏内核相反,是微内核。微内核架构的内核只保留了进程调度、虚拟机内存、中断等最基本的能力。在用户空间,如驱动程序、文件系统等。通过这种方式,服务之间相互隔离,如果单个服务出现故障或被完全攻击,不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。微内核内核功能更少,可移植性更高。与宏内核相比,一个缺点是由于驱动不在内核中,驱动一般会频繁调用底层能力,因此驱动与硬件设备的交互需要频繁。切换到内核模式会导致性能损失。华为鸿蒙操作系统的内核架构是微内核。还有一种内核称为混合型内核。它的架构有点像微内核。内核中会有一个内核的最小版本,然后其他模块会在此基础上构建,然后实现类似于宏内核,即把整个内核做成一个完整的程序,并且大部分服务都在内核中,这就像用宏内核的方式包装微内核。Windows设计今天Windows7和Windows10使用的内核叫做WindowsNT,NT的全称是NewTechnology。下图是WindowsNT的结构图:WindowsNT的结构与Linux相同,同样支持MutiTask和SMP,不同的是Windows的内核设计是混合内核。在上图中,可以看到内核Module中有一个MicroKernel,这是内核的最小版本,整个内核实现是一个包含很多模块的完整程序。Windows的可执行文件格式也不同于Linux,因此这两个系统的可执行文件不能相互运行。Windows的可执行文件格式称为PE,称为可移植的可执行文件,扩展名通常为.exe、.dll、.sys等。PE的结构大家可以看下图,有点类似ELF的结构。PE文件结构总结内核架构一般分为三种:宏内核,包含多个模块,整个内核就像一个完整的程序;微内核,拥有最小版本的内核,部分模块和服务由用户态管理;混合内核是宏内核和微内核的组合。微内核的概念是在内核中抽象出来的,即在内核中会有一个小内核,其他模块都建立在这个基础上。整个内核就是一个完整的程序。;Linux内核设计采用宏内核,而Windows内核设计采用混合内核。两种操作系统的可执行文件格式也不同,Linux的可执行文件格式称为ELF,Windows的可执行文件格式称为PE。