接下来的几课将涵盖更多理论概念。如果您更喜欢动手实践,请随时跳过这些内容,稍后再返回学习这些主题。
Apect of the Linux architecture is the separation between user space and the kernel. But why can't we combine their powers into a single layer? The reason is security and stability, which is achieved by having them operate in different modes.
内核模式与用户模式的区别
系统在两种截然不同的模式下运行:内核模式和用户模式。这种分离对于保护系统硬件和资源免受应用程序直接、不受控制的访问至关重要。
在内核模式下,内核对硬件拥有完全且不受限制的访问权限;它控制一切。这是最高级别的权限。
在用户模式下,应用程序对一小部分安全内存和 CPU 资源的访问权限非常有限。
当用户应用程序需要执行涉及硬件的操作时——例如从磁盘读取、通过网络发送数据或访问外设——它不能直接执行。这些操作必须由内核在内核模式下处理。这种设计可以防止出现故障或恶意的程序危害整个系统。例如,您不希望间谍软件拥有直接的硬件访问权限,因为它可能会读取您的所有数据或控制您的网络摄像头。
保护环与特权访问
这些不同的模式通常被称为权限级别或保护环。想象一座带有同心墙的堡垒:最里面的区域最安全,拥有最高的权限。计算机中的保护环工作方式类似,最内层的环对应于最高的权限级别。
在标准的 x86 计算机架构上,主要有两个级别:
- 环 0 (Ring 0): 内核运行的地方。它拥有最高级别的内核权限,可以执行任何系统指令,并被完全信任来管理硬件。这是特权访问的核心。
- 环 3 (Ring 3): 用户模式应用程序运行的级别。它是权限最低的环,无权直接访问硬件。
这种基于环的安全模型确保了用户应用程序与关键系统组件隔离。但是,如果应用程序始终与内核处于不同的模式,它们如何执行必要的硬件操作呢?
系统调用与内核权限
用户模式和内核模式之间的桥梁是系统调用。当用户应用程序需要执行特权任务时,它会发出系统调用,请求内核代表它执行该操作。
这个过程允许应用程序临时且安全地从用户模式切换到内核模式,以执行特定的、受控的指令。任务完成后,系统会切换回用户模式。这种机制确保了应用程序可以在获得危险的、直接的特权访问硬件权限的情况下,获得它们需要的服务。