2025-11-20 05:52:07
内核态是操作系统管理硬件的核心模式,用户态是应用程序运行的普通模式。只有内核态才能直接操作硬件和系统资源,比如内存、文件、进程调度等。像`fork`、`exec`、`read`、`write`这些系统调用,必须等程序主动请求后,内核态才会接管执行。用户态程序直接发这些指令会触发"权限不足"错误,就像普通人不能直接开飞机一样。
内核态和用户态的权限边界由CPU设计决定,比如x86架构的`CR0`寄存器控制模式切换。Linux内核文档明确说明,系统调用接口有2000+条指令(数据来源:Linux 5.15源码注释),全部需要内核态执行。当用户态程序调用`syscall`指令时,CPU会自动压栈保存现场并跳转到内核态的`sys_call_table`数组,找到对应函数执行。执行完再通过`ret`指令返回用户态。比如`open`系统调用,用户态程序只能发送参数,具体操作由内核态的`sys_open`函数完成。特权指令如`int 0x80`或`syscall`本身只能在内核态触发,用户态尝试执行会引发`SEGV`异常。这种设计既保证安全,又避免内核代码暴露给用户程序。
本题链接: