文章目录
- 用户态
- 内核态
- 切换时机
内核态和用户态是操作系统中两种不同的运行级别,它们的主要区别如下
用户态
- 定义:用户态是操作系统提供给用户程序的运行环境。在用户态下,程序所能访问的资源和执行的操作受到严格限制,以防止用户程序对系统造成破坏。
- 特点
- 资源受限:用户态程序只能访问分配给自己的内存空间,不能直接访问系统内核的内存空间和硬件设备等资源。
- 指令受限:只能执行非特权指令,如普通的算术运算、逻辑运算、数据传输等指令。如果用户态程序试图执行特权指令,将会引发处理器的异常,操作系统会捕获并进行相应处理。
内核态
- 定义:内核态是操作系统内核运行的状态,具有最高的权限,可以访问系统的所有资源,包括硬件设备、内存空间等,并能执行所有指令,包括特权指令。
- 特点
- 资源不受限:内核态下的程序可以访问系统中的任何资源,包括其他进程的内存空间,能够直接与硬件设备进行交互,如读写磁盘、控制网络接口等。
- 执行特权指令:可以执行如设置处理器状态、开启或关闭中断、访问设备控制寄存器等特权指令,这些指令对于系统的底层控制和资源管理至关重要。
切换时机
- 系统调用:当用户态程序需要请求操作系统提供服务时,会通过系统调用陷入内核态。例如,用户程序需要读取文件数据,就会调用 read 系统调用,此时处理器会从用户态切换到内核态,由内核执行文件读取的相关操作,完成后再返回用户态。
- 中断:硬件设备产生中断信号时,如定时器中断、键盘输入中断等,会使处理器暂停当前用户态程序的执行,切换到内核态来处理中断。内核会根据中断类型执行相应的中断处理程序,处理完成后再返回被中断的用户态程序继续执行。
- 异常:当用户态程序发生错误或异常情况时,如除数为零、访问非法内存地址等,会触发异常机制,导致处理器切换到内核态。内核会对异常进行处理,可能会终止出错的程序,或者采取其他恢复措施,然后根据情况决定是否返回用户态。