程序级接口
除了作业级接口之外,操作系统还会提供程序级接口。程序级接口为用户在编程中使用操作系统的服务提供了接口,它通过各种系统调用实现。应用程序通过系统调用实现与操作系统的通信,并取得操作系统的服务
2.3.1 用户态和核心态
用户态(User Mode)和核心态(Kernel Mode),也称为内核态,是操作系统中的两种处理器运行模式。它们定义了CPU在给定时间内可以执行的操作类型,以及它对系统资源的访问权限。以下是用户态和核心态的基本概念:
-
用户态(User Mode):
- 用户态是操作系统中进程执行应用程序代码的常规状态。
- 在用户态下,进程只能访问有限的系统资源,并且执行的操作受到限制。
- 用户态进程不能直接访问硬件设备,如直接读写磁盘或访问内存管理单元。
- 进程在用户态下执行的系统调用(如文件操作、进程控制等)需要通过操作系统提供的接口进行,这些操作通常涉及到从用户态切换到核心态。
-
核心态(Kernel Mode):
- 核心态是操作系统的核心部分,也称为内核态,是操作系统管理和控制硬件资源的状态。
- 在核心态下,操作系统拥有对所有硬件资源的完全访问权限,可以执行任何CPU指令。
- 核心态通常用于执行需要高权限的操作,如内存管理、进程调度、硬件设备驱动等。
- 当用户态进程需要执行系统调用或发生中断(如输入/输出操作)时,CPU会从用户态切换到核心态。
切换过程:
- 当一个运行在用户态的进程需要执行系统调用或发生异常、中断时,操作系统会进行上下文切换,将CPU的状态从用户态切换到核心态。
- 在核心态下,操作系统执行必要的操作,如处理系统调用或中断服务例程。
- 完成后,操作系统会再次进行上下文切换,将CPU状态从核心态切换回用户态,让进程继续执行。
安全性:
- 用户态和核心态的区分是操作系统安全性的关键。这种区分确保了用户程序不能直接访问或修改关键的系统资源,从而防止了潜在的错误或恶意攻击。
性能:
- 频繁地在用户态和核心态之间切换可能会影响系统性能,因为每次切换都涉及到保存和恢复CPU上下文,这是一个相对耗时的过程。
- 操作系统设计者会尽量减少不必要的模式切换,以提高系统的整体性能。
在现代操作系统中,用户态和核心态的概念是实现多任务、保护和隔离不同进程以及确保系统稳定性和安全性的基础。
2.3.2 特权指令和访管指令
在计算机体系结构和操作系统中,特权指令和访管指令(也称为访管指令或陷阱指令)是两种特殊的指令,它们与用户态和核心态的操作密切相关。
-
特权指令(Privileged Instructions):
- 特权指令是只能由操作系统的内核或具有高权限级别的代码执行的指令。
- 这些指令通常用于管理关键系统资源,如内存管理、I/O设备控制、进程调度、中断处理等。
- 尝试在用户态执行特权指令会导致安全异常,因为用户态的程序没有足够的权限来执行这些操作。
- 特权指令的例子包括修改处理器状态寄存器、访问控制寄存器、进行系统调用等。
-
访管指令(Trap Instructions):
- 访管指令是一种软件中断,它用于在用户态程序需要操作系统服务时,主动从用户态切换到核心态。
- 当用户程序需要进行文件操作、进程通信、获取系统资源等操作时,会执行访管指令,这通常会导致一个软件中断。
- 操作系统会捕获这个中断,然后执行相应的内核代码来处理请求,完成后再返回到用户程序。
- 访管指令是一种合法的用户态到核心态的切换机制,它允许用户程序在受控的环境下请求系统服务。
区别:
- 特权指令通常由操作系统内核执行,用于管理系统资源和控制硬件。
- 访管指令则是一种用户态程序请求操作系统服务的方式,它通过软件中断来实现用户态到核心态的切换。
系统调用:
- 在现代操作系统中,系统调用是访管指令的一种实现方式。用户态程序通过执行系统调用来请求操作系统提供的服务。
- 系统调用提供了一个受控的接口,允许用户程序在不直接执行特权指令的情况下,完成需要更高权限的操作。
安全性:
- 通过限制特权指令的执行和使用访管指令进行系统调用,操作系统能够保护其核心组件不被用户态程序直接访问,从而增强了系统的安全性和稳定性。
在设计操作系统时,合理地使用特权指令和访管指令是确保系统安全、高效运行的关键。