Linux 是怎样工作的
计算机系统的概要
在计算机运行时,在硬件设备上会重复执行以下步骤。
- 通过输入设备或网络适配器,向计算机发起请求。
- 读取内存中的命令,并在 CPU 上执行,把结果写入负责保存数据的内存区域中。
- 将内存中的数据写入 HDD(Hard Disk Drive,硬盘驱动器)、SDD(Solid State Disk,固态硬盘)等存储器,或者通过网络发送给其他计算机,或者通过输出设备提供给用户。
- 回到步骤 1。
由这些重复执行的步骤整合而成的对用户有意义的处理,就称为程序。程序大体分为以下几种。
- 应用程序
- 中间件:例如 Web 服务器、数据库系统
- OS:直接控制硬件设备,同时为应用程序与中间件提供运行环境的程序,例如 Linux。
通常情况下,程序在 OS 上以进程为单位运行。每个程序由一个或多个进程构成。包括 Linux 在内的大部分 OS 能同时运行多个进程。
调用外部设备是 Linux 的一个重要功能。如果没有 Linux 这样的 OS,就不得不为每个进程单独编写调用设备的代码。
当不存在 OS 时的设备调用在这种情况下,会存在以下缺点。
- 应用程序开发人员必须精通各种设备的方法
- 开发成本高
- 当多个进程同时调用设备时,会引起各种预料之外的问题
为了解决上述问题,Linux 把设备调用处理整合成了一个叫做设备驱动程序的程序,使进程通过设备驱动程序访问设备。
虽然世界上存在各种设备,当对于同一类型的设备,Linux 可以通过同一个接口进行调用。
通过同一个接口调用同一类型的设备。在某个进程因为 Bug 或程序员的恶意操作而违背了“通过设备驱动程序访问设备”这一规则的情况下,依然会出现多个进程同时调用设备的情况。为了避免这种情况,Linux 借助硬件,使进程无法直接访问设备。具体来说,CPU 存在内核模式和用户模式两种模式,只有处于内核模式时才允许访问设备。另外,使设备驱动程序在内核模式下运行,使进程在用户模式下运行。
进程在用户模式下运行,设备驱动程序在内核模式下运行。除此之外,还有许多不应被普通进程调用的处理程序,如下所示。
- 进程管理系统
- 进程调度器
- 内存管理系统
这些程序也全都在内核模式下运行。把这些在内核模式下运行的 OS 的核心处理整合在一起的程序就叫做内核。如果进程想要使用设备驱动程序等由内核提供的功能,就需要通过被称为系统调用的特殊处理来向内核发出请求。
需要指出的是,OS 并不单指内核,它是由内核和许多在用户模式下运行的程序构成的。关于 Linux 中的在用户模式下运行的功能,以及作为进程与内核的通信接口的系统调用,我们将在下一节具体说明。第三节将对负责创建与终止进程的进程管理系统进行说明。内核负责管理计算机系统上的 CPU 和内存等各种资源,然后把这些资源按需分配给在系统上运行的各个进程。
内核管理着 CPU 和内存等资源。负责管理 CPU 资源的进程调度器的相关内容将在第4节详细说明,负责管理内存的内存管理系统的相关内容将在第 5 节详细说明。
在进程运行的过程中,各种数据会以内存为中心,在 CPU 上的寄存器或外部寄存器等各种存储器之间进行交互。这些存储器在容量、价格和访问速度等方面都有各自的优缺点,从而构成被称为存储层次的存储系统层次结构。从提供程序运行速度和稳定性方面来说,灵活有效地运行各种存储器是必不可少的一环。存储层次的相关内容将在第 6 节说明。