我听说过特权级别、环、特权指令、非特权指令、用户模式、内核模式、用户空间、内核空间。
用户进程将以低权限运行,而操作系统进程具有更高的权限,我也听说过负责一般保护的 CPL 寄存器。CPU也只知道CPL,它是决定页面指令属于哪个页面的依据。
我想知道谁/什么最初决定了进程的特权级别?
什么时候决定进程将以低或高特权级别运行?在编译时?加载时?
什么说明当前程序将以特定的权限级别运行?段寄存器?描述符?装载机?
我听说过特权级别、环、特权指令、非特权指令、用户模式、内核模式、用户空间、内核空间。
用户进程将以低权限运行,而操作系统进程具有更高的权限,我也听说过负责一般保护的 CPL 寄存器。CPU也只知道CPL,它是决定页面指令属于哪个页面的依据。
我想知道谁/什么最初决定了进程的特权级别?
什么时候决定进程将以低或高特权级别运行?在编译时?加载时?
什么说明当前程序将以特定的权限级别运行?段寄存器?描述符?装载机?
首先,我看到 3 个问题。
其次确认一些术语的定义
当您说特权级别时,我相信您指的是与 CPU 处理器模式相关的特权级别的概念,而不是任何其他可用特权机制的通用级别。
当您说进程时,我相信您指的是当前正在运行的程序的概念,而不是一些替代定义。
用户进程以用户模式运行,具有给定 CPU 架构的用户权限
内核进程在内核模式下运行,具有给定 CPU 架构的超级用户权限。
进程是用户进程还是内核进程取决于在不使用分页时在段描述符中设置哪些标志,或者在使用分页时在页表或页目录条目中设置哪些标志。
这意味着进程的特权级别取决于该进程的代码在内存中的位置。如果它在内核空间中并使用相关标志标记为这样,那么它就是一个内核进程。如果它在用户空间中并使用相关标志标记为这样,那么它就是一个用户进程。
如果您正在运行的进程/程序不是内核,那么它是大多数现代操作系统上的用户进程。因此,何时做出决定是在程序执行时,特别是内核首次加载时的操作系统初始化时间。
该进程要么是该内核并且以超级用户权限级别运行,要么它不是并且它以用户权限级别运行。
CPU 根据相关状态寄存器(Intel X86 上的代码状态寄存器和 ARM 上的当前程序状态寄存器)检查内存中任何代码或数据段的每次执行。
当用户进程需要访问内核资源时,一般的做法是允许用户进程通过系统调用来代表它询问内核进程,当内核进程运行请求时会进行权限上下文切换。用户进程。
附带说明一下,内核模式 Linux允许您在内核/主管模式下运行用户进程。
参考文献和进一步阅读
大多数处理器都有一个陷阱或软件故障指令,可以将处理器切换到特权模式。内核检查用户模式进程是否具有特定操作的权限。由于内核数据受到保护,内核可以强制执行安全策略——用户进程不能直接授予自己权限。
权限有时被称为特权,这就是为什么我想解释处理器模式如何在强制安全权限方面发挥作用。