目录
Linux内核和 Windows 内核
Windows和Linux是我们比较熟悉的两个操作系统,其中Windows系统不开源,在商业上取得了较大成就,而Linux系统开源,服务器所使用的的操作系统基本是Linux,任何人都可以下载Linux并增加自己的改动和功能。这两个系统各有特点,操作系统的核心是内核,可以从内核角度对它们进行比较。
1 内核
首先,我们要知道什么是内核。我们都知道,计算机是由各种外部硬件设备组成的,比如内存,CPU,硬盘等,如果我们使用的每个应用都和这些硬件设备直接对接的话,效率会很低,系统性能也会受到很大的影响。那么,我们用一个中间件来帮助应用和这些硬件的对接通信,这个中间件就是内核,让内核作为应用连接硬件设备的桥梁,应用程序只需要关心与内核的交互,不用关注硬件的细节。
而在现代操作系统中,内核一般会提供4个基本功能:
- 进程调度能力,管理进程、线程,决定哪个线程、进程使用CPU。
- 内存管理能力,管理内存,决定内存的分配和回收。
- 硬件通信能力,管理硬件设备,为进程与硬件设备之间提供通信能力。
- 提供系统调用,如果应用程序要运行更高权限的任务,那么就需要系统调用,它是用户程序与操作系统之间的接口。
知道了内核的基本概念之后我们来了解内核是怎样工作的?
内核具有很高的权限,可以控制CPU、内存、硬盘等硬件,而应用程序具有很小的权限。因此,大多数操作系统都把内存分为了两个区域:
- **内核空间:**只有内核程序可以访问。
- **用户空间:**这个空间只有应用程序使用。
用户空间的代码只能访问一个局部的内存空间,内核空间的代码可以访问所有的内存空间。所以,当程序使用用户空间时,我们说该程序在用户态执行,而当程序使用内核空间时我们称之为在内核态执行。
2 Linux的设计
Linux系统最开始是年仅22岁的Linus Torvalds的芬兰人设计的(22岁的大佬设计出了Linux系统)。
Linux系统的4个主要设计理念:
- MutiTask,多任务 Linux是一个多任务的操作系统,多任务指的是可以有多个任务同时执行,同时即并发或并行。
- 对于单核CPU来说,可以让每个任务执行一小段时间,时间到了就去切换到另外一个任务,从宏观角度看一段时间内执行了多个任务,这就是并发。
- 对于多核CPU来说,多个任务可以同时被不同核心的CPU同时执行,这就是并行
- SMP,对称多处理
- **每个CPU的地位是相等的,对资源的使用权限也是相同的,多个CPU共享一个内存,每个CPU都可以访问完整的内存和硬件资源。
- **这一特点决定了Linux操作系统不会有某个CPU单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个CPU上运行。
- ELF,可执行文件链接格式
- Linux操作系统中可执行文件的存储格式,它把文件分成了一个个分段,每一个分段都有自己的作用。ELF文件有两种索引,Program header table中记录了运行时所需的段,Section header table记录了二进制文件中各个段的首地址。
- 通过编译器将我们编写的代码编译为汇编代码,接着通过汇编器变成目标代码即目标文件,最后通过链接器把多个文件以及调用的各种函数库链接起来,形成一个可执行文件即ELF文件。
- 执行ELF文件时,通过装载器把ELF文件装载到内存中,CPU读取内存中的指令和数据,于是程序就开始运行了。
- Monolithic Kernel,宏内核
- 宏内核意味着Linux的内核是一个完整的可执行程序,且拥有最高的权限。宏内核的特征是系统内核的所有模块如进程调度、内存管理、文件系统等都运行在内核态。Linux系统也实现了动态加载内核模块的功能。
与宏内核相对的是微内核,微内核架构的内核只保留最基本的能力如进程调度、虚拟机内存,把一些应用放到了用户空间,如驱动程序、文件系统等,提高了操作系统的稳定性和可靠性。
3 Windows设计
Windows7、10使用的内核是Windows NT, NT全称叫New Technology。Windows的内核设计是混合型内核。
混合型内核是宏内核和微内核的结合体,相当于内核中还有一个内核,其它模块在这个内核中的基础上搭建的,整个内核就是一个完整的程序。
Windows的可执行文件格式叫PE,称为可移植执行文件,扩展名通常是.exe、.dll、.sys。
两个系统的可执行文件是不可以在对方上运行的。