【操作系统】Linux 内核 vs Windows 内核

在这里插入图片描述

一、内核

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

说白了,内核就是应用程序与硬件进行交互的一个桥梁

在这里插入图片描述

1、内核所拥有的的功能如下:

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

2、内核的工作方式

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

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

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

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

在这里插入图片描述

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

二、Linux内核的设计

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

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

1、MutiTask

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

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

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

2、SMP

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

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

3、ELF

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

在这里插入图片描述

ELF ⽂件有两种索引,Program header table 中记录了「运⾏时」所需的段,⽽ Section header table 记录了⼆进制⽂件中各个「段的⾸地址」。

那 ELF 文件怎么生成的呢?

我们编写的代码,⾸先通过「编译器」编译成汇编代码,接着通过「汇编器」变成⽬标代码,也就是⽬标⽂件,最后通过「链接器」把多个⽬标⽂件以及调⽤的各种函数库链接起来,形成⼀个可执⾏⽂件,也就是 ELF ⽂件。

那 ELF ⽂件是怎么被执⾏的呢?

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

4、Monolithic Kernel

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

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

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

在这里插入图片描述

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

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

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

三、Windows 内核设计

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

在这里插入图片描述

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

Windows 的可执⾏⽂件的格式与 Linux 也不同,所以这两个系统的可执⾏⽂件是不可以在对⽅上运⾏的。Windows 的可执⾏⽂件格式叫 PE,称为可移植执⾏⽂件,扩展名通常是 .exe 、 .dll 、 .sys 等。PE 的结构你可以从下图中看到,它与 ELF 结构有⼀点相似。

Linux内核与Windows内核的区别:

  • Linux 的内核设计是采⽤了宏内核,Window 的内核设计则是采⽤了混合内核
  • 可执⾏⽂件格式不⼀样, Linux 可执⾏⽂件格式叫作 ELF,Windows 可执⾏⽂件格式叫作 PE。

整理自小林coding所著的《图解系统》,仅做学习用,侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值