在这门课程里面,我们说了,内核态有很多的模块,可以帮助我们管理硬件设备,最重要的四种硬件资源是 CPU、内存、存储和网络。
最初使用汇编语言的前辈,在程序中需要指定使用的硬件资源,例如,指定使用哪个寄存器、放在内存的哪个位置、写入或者读取哪个串口等等。对于这些资源的使用,需要程序员自己心里非常地清楚,要不然一旦 jump 错了位置,程序就无法运行。
为了将程序员从对硬件的直接操作中解放出来,提升程序设计的效率,于是,我们有了操作系统这一层,用来实现对于硬件资源的统一管理。某个程序应该使用哪个 CPU、哪部分内存、哪部分硬盘,只需要调用 API 就可以了,这些都由操作系统自行分配和管理。
其实操作系统最重要的事情,就是调度。因此,在内核态就产生了这些模块:进程管理子系统、内存管理子系统、文件子系统、设备子系统和网络子系统。
这些模块通过统一的 API,也就是系统调用,对上提供服务。基于这些 API,用户态有很多的工具可以帮我们使用好 Linux 操作系统,比如用户管理、软件安装、软件运行、周期性进程、文件管理、网络管理和存储管理。
但是到目前为止,我们能管理的还是少数几台机器。当我们面临数据中心成千上万台机器的时候,仍然非常“痛苦“。如果我们运维数据中心依然像运维一台台物理机的前辈一样,天天关心哪个程序放在了哪台机器上,使用多少内存、多少硬盘,每台机器总共有多少内存、多少硬盘,还剩多少内存和硬盘,那头就大了。