内核态与用户态
Linux 的内核态和用户态是操作系统中两种不同的运行模式,它们用于管理和执行计算机系统中的软件和硬件资源。
所谓的**用户态(kernel mode)与内核态(user mode)**只是不同权限的资源范围。
内核态:
- 内核态是操作系统核心部分运行的特权模式,也称为特权模式或系统态。
- 在内核态中,操作系统具有对系统硬件和资源(如内存、CPU、I/O设备)的完全访问权限和控制权。
- 内核态可以执行特权指令,例如直接操作硬件、管理内存分配、处理中断和异常等。
- 内核态下运行的代码拥有最高的权限和访问系统资源的能力,但也需要小心操作,以确保系统稳定性和安全性。
用户态:
- 用户态是应用程序和用户代码运行的一般模式。
- 在用户态中,应用程序只能访问有限的系统资源和服务,通过操作系统提供的系统调用(system call)来请求内核执行特权操作。
- 用户态程序不能直接访问或操作系统核心或关键硬件资源,而是通过操作系统提供的接口来间接访问。
- 用户态程序运行在较低的权限级别,其运行过程中可能会受到操作系统的限制和调度管理。
用户态与内核态之间的切换,需要通过系统调用来完成。
系统调用
系统调用是操作系统提供给应用程序的接口,应用程序通过系统调用可以请求操作系统提供的服务。系统调用是用户态程序与内核态程序之间的接口。
系统调用通常分为以下几类:
- 文件操作:如打开文件、读写文件、关闭文件等。
- 进程管理:如创建进程、终止进程、等待进程等。
- 内存管理:如分配内存、释放内存等。