1.内核程序与应用程序
要清晰理解内核与应用程序在权限、行为上的核心差异,首先需明确CPU的两种运行模式:用户态和内核态,二者的运行环境和权限截然不同。
我们日常接触、开发的各类程序,无论是用户安装的软件,还是操作系统自带的工具、服务,都属于应用程序。这类程序均运行在用户态,自身不具备直接操作硬件、管理系统资源的权限,必须依赖操作系统提供的功能支持,才能完成各类任务。比如文件读写、网络通信、内存分配等操作,应用程序无法直接执行,需通过系统调用接口向操作系统发起请求,由操作系统统一处理请求、调度资源,以此保障系统的稳定性和安全性。
与之相对,有一类程序直接运行在操作系统的核心层面,核心职责是管理系统硬件资源、调度任务、处理硬件中断,这类程序就是内核程序。无数内核程序共同构成了操作系统的核心内核(Kernel),它们运行在权限最高的内核态,是操作系统正常运行的基础。内核程序直接掌控硬件资源,同时接收并处理应用程序发起的系统调用,为应用程序提供稳定的运行环境和服务支持,是连接硬件与应用程序的核心桥梁。
2.特权指令和普通指令
操作系统的内核作为系统真正的管理者,可以直接操作硬件资源,比如清除内存、控制设备、管理进程等,这些操作如果被普通应用程序随意执行,可能会导致系统崩溃或者安全问题。因此,CPU设计了两种不同的指令集:特权指令和普通指令。特权指令只能在内核态下执行,普通指令则可以在用户态下执行。
在CPU中有个叫 程序状态字(Program Status Word,PSW) 的寄存器,其中有一个特权级别位(Privilege Level Bit),当处于内核态时,这个位被设置为1,允许执行特权指令;当处于用户态时,这个位被设置为0,只能执行普通指令。
3.内核态与用户态的切换
打开电脑,按下电源键,CPU是运行在内核态的,负责启动操作系统,加载内核程序,初始化系统资源等。当操作系统启动完成后,内核会执行一条特权指令,把PSW的标志位设置为用户态,从而让出CPU的控制权,使得用户的应用程序可以开始运行。
如果CPU发现用户试图执行特权指令,CPU会检查自己的PSW寄存器,发现当前处于用户态,指令是非法的,就会触发中断信号,切换回内核态,由操作系统的内核程序来处理这个信号,这个中断信号使得操作系统再次获得CPU的控制权,处理完成后再切换回用户态继续执行应用程序。