基本概要

Linux Performance Tools

抽象级别和层次

最底层是硬件系统,包括内存和中央处理器(用于计算和从内存中读写数据),此外硬盘和网络接口也是硬件系统的一部分。

硬件系统之上是 内核,它是操作系统的核心。内核是运行在内存中的软件,它向中央处理器发送指令。内核管理硬件系统,是硬件系统和应用程序之间进行通信的接口。

进程 是指计算机中运行的所有程序,由内核统一管理,它们组成了最顶层,称为 用户空间

Linux Level

内核和用户进程之间最主要的区别是:内核在 内核模式(kernel mode)中运行,而用户进程则在 用户模式(user mode)中运行。在内核模式中运行的代码可以不受限地访问中央处理器和内存,这种模式功能强大,但也非常危险,因为内核进程可以轻而易举地使整个系统崩溃。那些只有内核可以访问的空间我们称为 内核空间(kernel space)。

硬件系统

主内存(main memory)或许是所有硬件系统中最为重要的部分。基本上来讲,主内存存储 01 这样的数据。我们将每个 01 称为一个比特(或位,bit)。内核和进程就在主内存中运行,它们就是一系列比特的大合集。所有外围设备的数据输入和输出都通过主内存完成,同样是以一系列 01 的形式。中央处理器像一个操作员一样处理内存中的数据,它从内存读取指令和数据,然后将运算结果写回内存。

内核

Linux 系统的核心是 内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。

内核主要负责管理以下四种功能:

  • 进程管理:内核决定哪个进程可以使用 CPU
  • 内存管理:内核管理所有的内存,为进程分配内存,管理进程间的共享内存以及空闲内存
  • 设备驱动程序和设备管理:作为硬件系统(如磁盘)和进程之间的接口,内核负责操控硬件设备
  • 系统调用和系统支持:进程通常使用系统调用和内核进行通信

系统调用和系统支持

内核还对用户进程提供其他功能。例如,系统调用(system call 或 syscall)为进程执行一些它们不擅长或无法完成的工作。打开、读取和写文件这些操作都涉及系统调用。

  • fork
  • exec

系统内存管理

操作系统内核的主要功能之一就是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即实际并不存在的内存)。

内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为 交换空间(swap space)。内核不断在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。

软件程序管理

Linux 操作系统将运行中的程序称为进程。

内核创建了第一个进程(称为 init 进程)来启动系统上所有其他进程。当内核启动时,它会将 init 进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。

硬件设备管理

任何 Linux 系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。在 Linux 内核中有两种方法用于插入设备驱动代码:

  • 编译进内核的设备驱动代码
  • 可插入内核的设备驱动模块

Linux 系统将硬件设备当成特殊的文件,称为设备文件。设备文件有三种分类:

  • 字符型设备文件:指处理数据时每次只能处理一个字符的设备(大多数类型的调制解调器和终端都是作为字符型设备文件创建);
  • 块设备文件:指处理数据时每次能处理大块数据的设备,比如硬盘;
  • 网络设备文件:指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许 Linux 系统使用常见的网络编程协议同自身通信。

Linux 为系统上的每个设备都创建一种称为 节点 的特殊文件。与设备的所有通信都通过设备节点完成。每个节点都有唯一的数值对供 Linux 内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识主设备组下的某个特定设备。

文件系统管理

Linux 内核支持通过不同类型的文件系统从硬盘中读写数据。

Linux 内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。这为 Linux 内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS 将信息都缓存在内存中。