一、Linux的价值
·Linux是现代化应用程序交付的首选平台,无论是部署在裸机、虚拟化还是容器化环境。
·互联网公司内部服务(TCE、FaaS、SCM)经常统一使用Debian Linux系统。
·熟悉Linux基础指令可以帮助我们更加熟悉运维前端常用的服务如Nginx, Node.js等。
·可以加深对操作系统概念和实现的理解,夯实计算机基础知识。
二、计算机硬件
2.1 冯诺依曼计算机体系
在一个完整的冯诺依曼计算机体系当中,计算机主要由五大基本单元组成,分别是控制器、运算器、存储器、以及输入输出两个单元。
①控制器:协调和指挥计算机中各个部件进行按需作业的单元。
②运算器:进行算术与逻辑运算处理的单元,负责运算数据。
③存储器:主要分为内存跟外存两个部分,负责存储数据。
④输入设备:鼠标、键盘等可以向计算机输入数据的设备。
⑤输出设备:显示器、音响等可以向用户提供内容的设备。
2.2 基本单元的原型流程
从输入设备输入指令,经过控制器、运算器、存储器之间的处理,最终输出结果到输出设备展示给用户。
三、计算机操作系统
3.1 操作系统
操作系统是用于管理和控制计算机系统中的硬件资源与软件资源,在用户与系统硬件之间传递信息的系统。
操作系统主要提供了两个方面的功能:
①管理计算机资源,包括处理器管理、存储管理、设备管理、文件管理等,实现对计算机各类资源的控制调配。
②提供各种用户接口,包括命令接口、图形用户接口、程序调用接口,实现外部程序与操作系统内核的交互。
3.2 操作系统的启动
操作系统的启动流程主要分为两种:
①传统模式:基于BIOS的启动流。
②主流模式:基于UEFI的启动流。
BIOS 或者UEFI本质是一段固化在主板上的程序,计算机启动时会默认运行此段程序。UEFI解决了BIOS启动Bootloader中的一些问题。
两种启动模式的流程如下:
四、Linux概述
4.1 Linux 发展简史
·1969年,Unix诞生于贝尔实验室。
·1984年,贝尔实验室将Unix商业化。
·1984年,Tanenbaum 开发Minix操作系统用于教学并开放源码。
·1984年,Richard M. Stallman发起自由软件(FSF)与GNU项目,起草GPL(通用公共许可)协议。
·1991年,Linus Torvalds受Minix影响实现初版的Linux内核。
·1992年,Linux内核以GPL协议发行V1.0。
4.2 Linux 版本
Linux主要有两种版本:内核版本和发行版本,可以简单地理解为发行版本就是内核版本再加上常用的软件。
基于Linux的主要的衍生系统如下图所示:
4.3 Linux 应用领域
·IT服务器(操作系统、虚拟化和云计算)。
·嵌入式和智能设备。
·个人办公桌面。
·学术研究与软件开发。
五、Linux系统结构
5.1 Linux 基本组成
Linux系统主要有四个部分:内核、shell、文件系统和应用程序。具体来说,Linux的体系结构如下图所示:
5.2 进程管理和调度
进程是正在执行的一个程序命令,它有自己的地址空间,占用一定的系统资源.一个CPU核同一时间只能运行一个进程,进程由它的进程ID(PID)和它父进程的进程ID(PPID)唯一识别。
进程通过进程调度实现进程占用CPU进行运行的顺序和规则。进程调度需要遵循以下规则:
·一个CPU核同一时间只能运行一个进程。
·每个进程有近乎相等的执行时间。
·对于逻辑CPU而言进程调度使用轮询的方式执行,当轮询完成则回到第一个进程反复。
·进程执行消耗时间和进程量成正比。
具体的进程状态切换如下图所示:
5.3 文件系统和VFS
文件系统是负责管理持久化数据的子系统,负责把用户的文件存储到硬盘等存储介质上。在Linux中,一切数据(普通文件、目录、设备、套接字)都被归类为文件进行存储,这使得开发者仅需使用一套API及其开发工具即可调用Linux系统的绝大部分资源,比如Linux几乎所有读操作(读文件、读系统状态、读PIPE)都可以使用read函数进行。
Linux文件系统采用了树状的目录结构,具体分支如下图所示:
为了实现对用户提供统一的调用接口,Linux提供了虚拟文件系统(VFS),通过对应用层提供一个标准的文件操作接口,对文件系统提供一个文件接入接口,Linux可以存在多个“实际的文件系统”,具体来说就是用户控制VFS,VFS再去控制各个文件系统。具体的交互流程如下图所示: