什么决定了进程的特权级别?

7

我听说过特权级别、环、特权指令、非特权指令、用户模式、内核模式、用户空间、内核空间。

用户进程将以低特权级别运行,而操作系统进程将以更高的特权级别运行。我还听说过负责一般保护的CPL寄存器。CPU只知道CPL,并且它是根据指令所属页面来决定的。

我想知道最初谁或什么决定了进程的特权级别?

何时决定进程将以低或高特权级别运行?在编译时?在加载时?

什么告诉当前程序将以特定的特权级别运行?段寄存器?描述符?加载程序?

2个回答

5

首先,我看到了三个问题。

  1. 是谁/什么最初决定进程的特权级别?
  2. 何时决定以低或高特权级别运行进程?
  3. 什么表明当前程序将以特定的特权级别运行?

其次确认一些术语的定义

当你说特权级别时,我相信你指的是与CPU处理器模式相关联的特权级别概念,而不是其他任何可用特权机制的通用级别。

当你说进程时,我相信你指的是当前正在运行的程序的概念,而不是其他定义。

用户进程在给定CPU架构的用户模式下以用户权限运行。

内核进程在给定CPU架构的内核模式下以监管者权限运行。

进程是用户还是内核取决于哪些标志被设置,无论是在分段描述符中(当未使用分页时)还是在页面表或页面目录条目中(当使用分页时)。

这意味着进程的特权级别取决于该进程的代码在内存中的位置。如果它位于内核空间并使用相关标志标记为内核进程,则它是内核进程。如果它位于用户空间并使用相关标志标记为用户进程,则它是用户进程。
如果您运行的进程/程序不是内核,则在大多数现代操作系统上它是一个用户进程。所以当做出决定时,是在程序执行时间,具体地说是在操作系统初始化时,当内核首次加载时。
要么该进程是内核并以监管特权级别运行,要么它不是,并以用户特权级别运行。
CPU会针对内存中任何代码或数据段的每个执行检查相应的状态寄存器(Intel X86上的代码状态寄存器和ARM上的当前程序状态寄存器)。
当用户进程需要访问内核资源时,通常的方法是允许用户进程代表其请求内核进程,通过进行系统调用来实现,这会在内核进程运行用户进程的请求时进行特权上下文切换。
顺便提一下,Kernel Mode Linux允许您在内核/监管模式下运行用户进程。
参考文献和进一步阅读

谢谢。这是否也意味着...装载程序和MMU单元/分页系统最初负责仅在用户空间中加载用户程序,从而间接决定了特权级别..? - Nikhil Rupanawar
这个答案太被低估了! - gai-jin

0
大多数处理器都有一个陷阱或软件故障指令,可以将处理器切换到特权模式。内核会检查用户模式进程是否具有执行特定操作的权限。由于内核数据受到保护,因此内核可以强制执行安全策略,即用户进程无法直接赋予自己权限。
权限有时也称为特权,这就是我想讲解处理器模式如何在执行安全权限方面发挥作用的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接