- 精通Linux内核开发
- (印)拉古·巴拉德瓦杰
- 608字
- 2024-01-31 17:50:18
1.1.2 内核空间和用户空间
现代操作系统不仅可以防止一个进程访问另一个进程,还可以防止进程意外访问或操作内核数据和服务(因为内核地址空间是被所有进程共享的)。
操作系统实现这种保护,是通过将整个内存分割成两个逻辑分区:用户空间和内核空间。这种分开设计确保所有分配有地址空间的进程都映射到内存的用户空间部分,而内核数据和服务在内核空间中运行。内核通过与硬件协调配合实现了这种保护。当应用程序进程正在执行代码段中的指令时,CPU在用户模式下运行。当一个进程打算调用一个内核服务时,它需要将CPU切换成特权模式(内核模式),这是通过称为API(应用程序编程接口)的特殊函数来实现的。这些API允许用户进程使用特殊的CPU指令切换到内核空间,然后通过系统调用来执行所需要的服务。在所请求的服务完成后,内核使用另一组CPU指令来执行到另一个模式的切换,这次是从内核模式返回到用户模式。
注意
系统调用是内核将其服务公开到应用程序进程的接口,它们也被称为内核的入口点。由于系统调用是在内核空间中实现的,对应的处理程序通过用户空间中的API提供。API抽象层也使得调用相关的系统调用变得更容易和方便。
图1-3所示为一幅虚拟的内存视图。
图1-3
进程上下文
当一个进程通过系统调用请求一个内核服务时,内核将代表调用进程来执行。此时,内核就被认为是在进程上下文中执行的。类似地,内核也会响应其他硬件实体引发的中断;而这里就是说内核在中断上下文中执行。在中断上下文中,内核不代表任何进程来运行。