一、引言
本文参考 小林coding 的《图解操作系统》,也是我十分喜欢的一个公众号博主,为他打 call
老读者知道我之前再写 Kafka
的博文,为什么突然开始写操作系统的呢?
原因在于:
当我看到 Kafka
服务端的一些 IO 操作时,,我发现我看不懂了,了解之后发现这里 Netty 的概念。
当我尝试了解 IO 时,我发现一些内存、磁盘的交换,搞的我焦头烂额,于是,想静下心来从头开始。
当我把 小林coding 的 《图解操作系统》看完之后,我发现对操作系统的理解更上一层楼。
用一段话,作为今天的开场白:
- 读书的根本目的,未必是解决现实问题,它更像一场心灵的抚慰。
- 一个喜欢读书的人,可能不会记得自己读过哪些书。
- 但是那些看过的故事、收获的感悟、浸染过的气质,
- 就像一颗种子,会在你的身体里慢慢发芽长大,不断提升你的认知,打开你的视野。
二、内核
什么是内核呢?
我们平常组装过主机的人都知道,主机一般会有:内存、磁盘、CPU、显卡、主板 这些重要硬件构成
但有个疑问,我们的应用(QQ、微信、网页游戏)怎么与这些硬件沟通呢?
如果每一个应用都能与硬件构成联系的话,那么这样我们的系统也太累了,还些许复杂
于是,提出了一个中间人的概念:应用访问中间人,中间人去访问硬件,中间人被我们称之:内核
现代的操作系统中,我们的内核通常会提供 4 个基本能力:
- 内存管理:决定我们内存的分配和回收
- 进程管理:决定那个线程、进程使用 CPU,也就是进程调度的能力
- 硬件设备管理:为进程和硬件提供通信能力
- 提供系统调用:应用程序运行更高权限的服务,需要系统调用
内核具有很高的权限,可以控制 CPU、内存、硬盘等硬件,而应用程序具有的权限很小,绝大多数系统将内存分为了两个区域:
- 用户态:这个内存空间专门为应用使用
- 内核态:这个内存空间只有内核可以访问
用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有的内存空间。
当我们程序使用用户空间时,这个程序在 用户态 运行,当程序使用内核空间时,程序在 内核态 运行
用户态转变为内核态需要通过系统调用:
当应用程序执行系统调用时,会产生一个中断。发生中断后,CPU 会停止当前正在运行的用户程序,转而跳转到中断执行程序,开始执行内核程序。内核处理完之后,主动触发中断,把 CPU 执行权限交回给用户程序,回到用户态继续工作。
PS:这里对中断不熟悉的小伙伴,可以看上一篇关于中断描述的文章
三、Linux 的设计
Linux 内核设计的理念主要有以下几点:
- MutuTask:多任务
- SMP:对称多处理
- ELF:可执行文件链接格式
- Monolithic Kernel:宏内核
1. MutuTask
Linux 是一个多任务的操作系统
多任务意味着可以有很多任务同时执行,这里的 同时 指的是 并发 或 并行
- 对于单核 CPU 来说,可以让每个任务执行一小段时间,时间到就切换到下一个任务。从宏观角度来看,一段时间内执行了多个任务,被称为并发
- 对于多核 CPU 来说,多个任务可以同时被不同核心的 CPU 同时执行,被称为并行
2. SMP
SMP 的意思是 对称多处理,代表每一个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都能访问完整的内存和硬件资源。
3. ELF
LF 的生成:
ELF 的执行:
通过 装载器 把 ELF 文件装载到内存中,CPU 读取内存中的指令和数据,于是程序就被执行起来了
4. Monolithic Kernel
Monolithic Kernel 的意思是宏内核,Linux 内核架构就是宏内核,意味着 Linux 的内核是一个完整的可执行程序,且拥有最高的权限。
宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。
四、Window 设计
当今 Windows 7、Windows 10 使用的内核叫 Windows NT。
Window 和 Linux 一样,同样支持 MutiTask 和 SMP
Window 可执行文件与 Linux 也不同,Window 可执行文件被称为:PE,称为:可移植执行文件,结构如下:
五、总结
对于内核的架构一般有这三种类型:
宏内核,包含多个模块,整个内核像一个完整的程序;
微内核,有一个最小版本的内核,一些模块和服务则由用户态管理;
混合内核,是宏内核和微内核的结合体,内核中抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是个完整的程序;
Linux 的内核设计是采用了宏内核,Window 的内核设计则是采用了混合内核。
这两个操作系统的可执行文件格式也不一样, Linux 可执行文件格式叫作 ELF,Windows 可执行文件格式叫作 PE。