-

1 Linux内核结构


一个完整的操作系统由一个内核和一些系统服务程序构成。内核在系统引导时载入并常驻内存。

Linux的系统内核主要由以下模块构成:

  • 系统调用接口:提供进程与内核的接口,进程通过此接口调用内核的功能。
  • 进程管理子系统
    • 进程管理模块(kernel):负责CPU管理、调度和协调进程的运行。
    • 进程通信模块(ipc):实现进程间的本地通信。
    • 内存管理模块(mm):管理内存和进程的地址空间。
  • 文件与I/O子系统
    • 文件系统模块(fs):为进程提供访问文件和设备的服务。
    • 网络模块(net):管理网络接口设备,提供进程间的网络通信服务。
    • 设备驱动模块(drivers):驱动设备的运行。
  • 硬件控制接口:提供与硬件设备的接口,负责控制硬件并响应和处理来自硬件的中断。

Untitled

2 CPU的执行模式


CPU的基本功能就是执行指令。CPU指令集的指令可以划分为两类:

  • 特权指令(核心态):可以访问系统中所有寄存器和内存单元,修改系统的关键配置。
  • 非特权指令(用户态):只能执行一般性的运算和处理,只能访问用户程序自己的内存地址空间。

Linux的内核运行在核心态,可以访问所有的系统资源,而用户程序只能运行在用户态。

从用户态转换为核心态的唯一途径是中断(包括陷入)。一旦CPU响应了中断,则将CPU的状态切换到核心态(通过改变CPU寄存器中的一个状态字实现),待中断处理结束返回时,再将CPU状态切换到用户态。

3 中断与系统调用


Linux内核与外界的接口是来自用户层的系统调用和来自硬件层的中断,而系统调用本身也是一种特殊的中断。因此可以说Linux内核是中断驱动的。

(1) 中断

系统中所有异步发生的事件都是通过中断机制来处理的,包括I/O设备中断、系统时钟中断、硬件故障中断、软件故障中断(也称为异常)等。每个中断都对应一个中断处理程序。中断发生后,CPU通过中断处理入口转入相应的处理程序来处理中断事件。

(2) 系统调用

一般的中断都是源自CPU外部的事件,但还有一种特殊的中断,其中断源来自CPU内部执行的某个特殊指令。这种通过执行指令而主动引发的中断称为陷入,引发陷入的指令就称为陷入指令。陷入的处理过程与中断类似。陷入的作用是使得用户进程可以执行内核中的服务程序,主要用于实现系统调用。

系统调用是内核提供给用户的一组特殊的函数,其具有用户编写的普通函数所不具有的特殊权限。当用户进程需要执行涉及系统资源的操作时,需要通过陷入机制来执行内核中的系统调用函数。