在计算机中,内核是操作系统的核心,负责管理和控制计算机硬件资源,提供各种系统服务。假设所有的应用程序都能够直接访问硬件资源,那么可能会导致系统崩溃、数据丢失等问题。
因此,操作系统将应用程序和操作系统内核进行了隔离,确保内核能够独立地控制硬件资源。操作系统内核是运行在特权模式下的,可以访问所有硬件资源和底层系统资源,而应用程序是运行在非特权模式下的,只能访问被授权的资源,不能直接操作硬件资源和底层系统资源。
也就是说,为了保护系统的稳定性和安全性,操作系统将运行在不同的特权模式下,即内核态和用户态。
内核态是操作系统运行在特权模式下的状态,此时操作系统具有最高的权限,可以访问所有的硬件资源和底层系统资源,如处理器、内存、I/O等。在内核态下,操作系统可以执行所有的指令,而且不受访问权限的限制。内核态下的程序通常是操作系统内核代码或者设备驱动程序等,它们可以直接访问硬件资源和系统资源,以实现系统的功能和服务。
用户态是指应用程序运行在非特权模式下的状态,此时应用程序只能访问被授权的资源,不能直接操作硬件资源和底层系统资源。在用户态下,应用程序只能执行一些受限的指令集,不能直接执行特权指令。当应用程序需要访问系统资源时,需要通过系统调用的方式切换到内核态,请求操作系统提供服务。内核态和用户态之间的切换是通过操作系统内核提供的中断或异常机制实现的。
但是,有的时候,我们的应用进程可能也需要进行一些系统调用,比如读写文件这种IO操作,这时候就会触发用户态向内核态的切换。
此时,CPU会暂停当前进程的执行,保存当前进程的状态(包括程序计数器、寄存器、栈指针等)并切换到内核态执行相应的操作,操作完成后再将控制权切换回用户态,恢复进程的执行。