摘自 《深入理解 Linux 内核(第三版)》

目录

1. 与其他类 Unix 内核的比较

Linux 也是一种类 UnixUnix-like操作系统,基于 GNU GPL 协议开源。与其他一些著名的商用 Unix 内核相比,Linux 具有以下特点

1.1 单块结构的内核(Monolithic kernel)

Linux 是一个do-it-yourself自我完善的程序,由几个逻辑上独立的成分构成。大多数商用 Unix 变体也是单块结构。

1.2 内核模块

大部分现代操作系统可以动态的装载或卸载部分内核代码(例如设备驱动程序)。Linux 对模块的支持很完备,可以自动按需装载或卸载模块

1.3 内核线程

内核线程(kernel thread)是一个能被独立调度的执行环境,通常在同一个地址空间执行,因此内核线程之间的上下文切换比普通进程之间的上下文切换花费的代价要少很多

1.4 多线程支持

一个多线程用户程序由很多轻量级进程(lightweight process,LWP)组成,这些进程可能对共同的地址空间、物理内存页、打开文件等进行操作。Linux 定义了自己的 LWP 版本,并把 LWP 当作基本的执行上下文,通过非标准的clone()系统调用来处理它们。

1.5 抢占式(preemptive)内核

当采用“可抢占的内核”选项CONFIG_PREEMPT编译内核时,Linux 2.6可以随意交错执行处于特权模式的执行流

1.6 多处理器支持

几种 Unix 内核变体都利用了多处理器系统Linux 2.6支持不同存储模式的对称多处理(SMP),包括 NUMA:系统不仅可以使用多处理器,而且每个处理器可以无差别的处理任何一个任务。

1.7 文件系统

Ext2/3/4XFSJFS等。

2. 操作系统基本概念

2.1 操作系统与内核

任何计算机系统都包含一个名为操作系统(Operating System,OS)的基本程序集合。在这个集合里,最重要的程序称为内核(kernel)

当操作系统启动时,内核被装入到 RAM 中,内核中包含了系统运行所必需的核心过程(procudre)

操作系统必须完成两个主要目标

  1. 硬件部分交互,对外提供服务
  2. 用户程序提供执行环境
  • 一些操作系统允许所有的用户程序都直接与硬件部分进行交互(例如 MS-DOS)。与此相反,类 Unix 操作系统把与计算机硬件相关的所有底层细节都对用户程序隐藏起来
  • 当程序想使用硬件资源时,必须向操作系统发出请求,由内核对这个请求进行评估
  • 如果允许,则内核将代表应用程序与相关的硬件部分进行交互

为了实现这种机制,硬件为 CPU 引入了至少两种不同的执行模式:

  • 用户程序的非特权模式,即用户态(User Mode)
  • 内核的特权模式,即内核态(Kernel Mode)

2.2 多用户系统

多用户系统(multiuser system)就是一台能并发和独立的执行分别属于两个或多个用户应用程序的计算机:

  • 并发(concurrently)意味着几个应用程序能够同时处于活动状态并竞争各种资源
  • 独立(independently)意味着每个应用程序能执行自己的任务,而无需考虑其他用户的应用程序在干些什么

2.3 用户和组

多用户系统中,每个用户在机器上都有一个私有空间。操作系统必须保证用户空间的私有部分仅仅对其拥有者可见

所有的用户由一个唯一的用户标识符(User ID,UID)来标识。而为了和其他用户有选择的共享资料,每个用户都是一个或多个用户组的一名成员,用户组由唯一的用户组标识符(user group ID)标识,每个文件也恰好与一个用户组相对应。

任何类 Unix 操作系统都有一个超级用户root,系统管理员必须root的身份登录

2.4 进程

一个进程(process)可以定义为:程序执行时的一个实例,或一个运行程序的“执行上下文”

在传统的操作系统中,一个进程在地址空间(address space)中执行一个单独的指令序列。地址空间是允许进程引用的内存地址集合

现代操作系统允许具有多个执行流的进程,即在相同的地址空间可执行多个指令序列

几个进程能并发的执行同一程序,而同一进程能顺序的执行几个程序。允许进程并发活动的系统称为多道程序系统(multiprogramming)多处理系统(multiprocessing)

Unix 是具有抢占式进程的多处理操作系统,即使没有用户登录或者程序运行,也会一直有一些系统进程在监视外围设备。例如有几个进程在监听系统终端等待用户登录。

类 Unix 操作系统采用进程/内核模式。每个进程都自认为它是系统中唯一的进程,可以独占操作系统所提供的服务。只要进程发出系统调用,硬件就会把特权模式由用户态变成内核态,然后进程以非常有限的目的开始一个内核过程的执行。一旦这个请求得到满足,内核将迫使硬件返回到用户态,而进程将从系统调用的下一条指令继续执行

2.5 内核体系结构

如前所述,大部分 Unix 内核是单块结构:每一个内核层都被集成到整个内核程序中,并代表当前进程在内核态下运行。

相反,微内核(microkernel)操作系统只需要内核有一个很小的函数集,通常包括几个同步原语、一个简单的调度程序和进程间通信机制

为了达到微内核理论上的诸多优点而不影响性能,Linux 内核提供了模块(module)。模块是一个目标文件,其代码可以在运行时链接到内核或从内核解除链接

这种目标代码通常由一组函数组成,用来实现文件系统、驱动程序或其他内核上层功能

与微内核操作系统的外层不同,模块不是作为一个特殊的进程执行的。相反,与任何其他静态链接的内核函数一样,模块代表当前进程在内核态下执行

使用模块(module)的主要优点如下:

  • 模块化方法
  • 平台无关性
  • 节省内存使用
  • 无性能损失

3. Unix 文件系统概述

4. Unix 内核概述

更新中…

参考文章

  1. 《深入理解 Linux 内核(第三版)》
  2. Linux和UNIX的关系及区别(详解版)| C 语言中文网