特权指令
- 从指令系统角度,在指令系统中存在用于管理硬件和整个系统安全的指令,让程序随意使用具有极高危险性。不得在用户态(目态)执行,只能在核心态(管态)执行,用户态程序如果运行特权指令则会被中断出错。所以用户程序中不得含有特权指令,需要执行特权指令需要使用防管指令,进入核心态。
访管指令
- 同样从指令集的角度,或者说从硬件角度(cpu状态)。防管指令,是用户程序自愿进管的指令,该指令本身属于非特权指令,可在用户态执行,执行后进入核心态,cpu置相应标志表明当前处于核心态。cpu进入核心态可以执行特权指令和非特权指令。
陷入指令
- 原则上等同于访管指令,但是从操作系统的角度叫的。访管强调的是cpu切换到了核心态,可以执行指令集中的所有指令。而陷入(自陷、陷阱)指令强调程序从用户程序切换到了操作系统,陷入指令即汇编中的中断指令,执行陷入指令程序中断,跳转到中断服务程序(操作系统的代码)。所有访管强调可以执行特权指令,陷入强调“跳转”到操作系统。核心态和操作系统是不可分割的:其实道理很显然,进入核心态(管态),必然需要“跳转”到操作系统,不然区分用户态和核心态就没有了意义,如果程序执行完访管指令后,只是进入了管态,之后仍然执行自身的代码,那用户程序将可以为所欲为,显然不能允许。另一方面,如果cpu跳转到了操作系统,没有进入管态,那操作系统也无法执行特权指令,管理整个机器,显然也不行。所有管态就是运行操作,访管指令本质上就是一条陷入(中断)指令。
广义指令(系统调用)
- 系统调用,源于操作系统的角度。指用户程序需要借助操作系统来完成特定操作,通过陷入指令可以进行系统调用。因为用户程序不能执行特权指令,所以当需要完成特定操作,则通过系统调用由操作系统完成。但系统调用一词不是从不能使用特权指令这一角度来考虑的。仅仅强调想让操作系统服务,表达的含义不是不能而是不需要,即目标操作用户程序不需要做,直接调用操作系统即可完成,进行系统调用时也并非一定为了执行特权指令,也可能相关操作过于复杂,或者用户程序自身难以实现,而操作系统给出了响应的接口供直接使用。
库函数
- 操作系统提供的函数,供用户程序直接使用,简化程序的编写,直接使用操作系统已经实现的功能即可。与系统调用有些相似,不过库函数可以在用户态执行,和普通的函数调用相同。无需用户态切换到核心态,执行中断服务程序等操作。是对系统调用“不需要做”这一概念的推广,有些功能操作系统自带,需要就拿去用,别在自己写了,直接用大佬的效率多高。