Windows和Linux可以说是我们比较常见的两款操作系统的。
Windows基本攻占了笔记本时代的市场,商业上取得了很大成就,然而它并不开源,所以要想接触源码得加入Windows的开发团队中。
对于服务器使用的操作系统基本上都是Linux,并且内核源码也是开源的,任何人都可以下载,并降低自己的改动或功能,Linux最大的魅力在于,全世界有特别多的技术大鳄为它贡献代码。
这两个操作系统各有千秋,不分伯仲。
操作系统核心的东西就是内核,此次我们就来瞧瞧,Linux内核和Windows内核有哪些区别?
内核
哪些是内核呢?
计算机是由各类外部硬件设备组成的,例如显存、cpu、硬盘等,假如每位应用都要和那些硬件设备对接通讯合同,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用联接硬件设备的桥梁linux系统,应用程序只需关心与内核交互,不用关心硬件的细节。
内核
内核有什么能力呢?
现代操作系统,内核通常会提供4个基本能力:
内核是如何工作的?
内核具有很高的权限,可以控制cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因而大多数操作系统,把显存分成了两个区域:
用户空间的代码只能访问一个局部的显存空间,而内核空间的代码可以访问所有显存空间。因而,当程序使用用户空间时,我们常说该程序在用户态执行,而当程序使内核空间时,程序则在内核态执行。
应用程序假如须要步入内核空间,就须要通过系统调用,下边来瞧瞧系统调用的过程:
内核程序执行在内核态,用户程序执行在用户态。当应用程序使用系统调用时,会形成一个中断。发生中断后,CPU会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动触发中断,把CPU执行权限交回给用户程序,回到用户态继续工作。
Linux的设计
Linux的开山先祖是来自一位名叫LinusTorvalds的法国姑娘,他在1991年用C语言写出了第一版的Linux操作系统,那年他22岁。
完成第一版Linux后,LinuxTorvalds就在网路上发布了Linux内核的源代码,每位人都可以免费下载和使用。
Linux内核设计的理念主要有这几个点:
MutiTask
MutiTask的意思是多任务,代表着Linux是一个多任务的操作系统。
多任务意味着可以有多个任务同时执行,这儿的「同时」可以是并发或并行:
SMP
SMP的意思是对称多处理linux视频,代表着每位CPU的地位是相等的,对资源的使用权限也是相同的,多个CPU共享同一个显存,每位CPU都可以访问完整的显存和硬件资源。
这个特性决定了Linux操作系统不会有某个CPU单独服务应用程序或内核程序,而是每位程序都可以被分配到任意一个CPU上被执行。
ELF
ELF的意思是可执行文件链接格式,它是Linux操作系统中可执行文件的储存格式,你可以从右图见到它的结构:
ELF文件格式
ELF把文件分成了一个个分段,每一个段都有自己的作用,具体每位段的作用这儿我就不详尽说明了,感兴趣的朋友可以去看《程序员的自我修养——链接、装载和库》这本书。
另外,ELF文件有两种索引,Programheadertable中记录了「运行时」所需的段,而Sectionheadertable记录了二补码文件中各个「段的首地址」。
那ELF文件如何生成的呢?
我们编撰的代码,首先通过「编译器」编译成汇编代码linux内核原理与分析,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各类函数库链接上去,产生一个可执行文件,也就是ELF文件。
那ELF文件是如何被执行的呢?
执行ELF文件的时侯,会通过「装载器」把ELF文件装载到显存里,CPU读取显存中的指令和数据,于是程序就被执行上去了。
MonolithicKernel
MonolithicKernel的意思是宏内核,Linux内核构架就是宏内核,意味着Linux的内核是一个完整的可执行程序,且拥有最高的权限。
宏内核的特点是系统内核的所有模块,例如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。
不过,Linux也实现了动态加载内核模块的功能,比如大部份设备驱动是以可加载模块的方式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为便捷、灵活。
分别为宏内核、微内核、混合内核的操作系统结构
与宏内核相反的是微内核,微内核构架的内核只保留最基本的能力,例如进程调度、虚拟机显存、中断等,把一些应用放在了用户空间,例如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出现故障或则完全功击,也不会造成整个操作系统死掉,增强了操作系统的稳定性和可靠性。
微内核内核功能少,可移植性高,相比宏内核有一点不好的地方在于,因为驱动程序不在内核中,但是驱动程序通常会频繁调用底层能力的,于是驱动和硬件设备交互就须要频繁切换到内核态,这样会带来性能耗损。华为的鸿蒙操作系统的内核构架就是微内核。
还有一种内核叫混和类型内核,它的构架有点像微内核,内核上面会有一个最小版本的内核,之后其他模块会在这个基础上搭建,之后实现的时侯会跟宏内核类似,也就是把整个内核弄成一个完整的程序,大部份服务都在内核中,这如同是宏内核的形式包裹着一个微内核。
Windows设计
现今Windows7、Windows10使用的内核叫WindowsNT,NT全称叫NewTechnology。
右图是WindowsNT的结布光片:
WindowsNT的结构
Windows和Linux一样,同样支持MutiTask和SMP,但不同的是,Window的内核设计是混和型内核,在上图你可以看见内核中有一个MicroKernel模块,这个就是最小版本的内核,而整个内核实现是一个完整的程序,富含特别多模块。
Windows的可执行文件的格式与Linux也不同,所以这两个系统的可执行文件是不可以在对方上运行的。
Windows的可执行文件格式叫PE,称为可移植执行文件,扩充名一般是.exe、.dll、.sys等。
PE的结构你可以从右图中看见,它与ELF结构有一点相像。
PE文件结构
总结
对于内核的构架通常有这三种类型:
Linux的内核设计是采用了宏内核,Window的内核设计则是采用了混和内核。
这两个操作系统的可执行文件格式也不一样linux内核原理与分析,Linux可执行文件格式叫作ELF,Windows可执行文件格式叫作PE。