【问题标题】:What decides privilege level of the process?是什么决定了进程的特权级别?
【发布时间】:2013-01-30 15:10:45
【问题描述】:

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

用户进程将以低权限运行,而操作系统进程具有更高的权限,我也听说过负责一般保护的 CPL 寄存器。 CPU也只知道CPL,它是决定页面指令属于哪个页面的依据。

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

什么时候决定进程将以低或高权限运行?在编译时?加载时?

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

【问题讨论】:

    标签: operating-system privilege


    【解决方案1】:

    大多数处理器都有一个陷阱或软件故障指令,可以将处理器切换到特权模式。内核检查用户模式进程是否具有特定操作的权限。由于内核数据受到保护,内核可以强制执行安全策略——用户进程不能直接授予自己权限。

    权限有时被称为特权,这就是为什么我想解释处理器模式如何执行安全权限。

    【讨论】:

      【解决方案2】:

      首先我看到 3 个问题。

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

      其次确认一些术语的定义

      当您说特权级别时,我相信您指的是the concept of level of privilege associated with CPU processor mode,而不是任何其他可用特权机制的通用级别。

      当您说流程时,我相信您指的是the concept of the currently running program,而不是一些替代定义。

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

      内核进程在内核模式下运行,具有给定 CPU 架构的超级用户权限。

      进程是用户进程还是内核进程取决于在不使用分页时在段描述符中设置哪些标志,或者在使用分页时在页表或页目录条目中设置哪些标志。

      这意味着进程的特权级别取决于该进程的代码在内存中的位置。如果它在内核空间中并使用相关标志标记为这样,那么它就是一个内核进程。如果它在用户空间并使用相关标志标记为这样,那么它就是一个用户进程。

      如果您正在运行的进程/程序不是内核,那么它​​是大多数现代操作系统上的用户进程。因此,何时做出决定是在程序执行时,特别是内核首次加载时的操作系统初始化时间。

      进程要么是该内核,并且以超级用户权限级别运行,要么不是,它以用户权限级别运行。

      CPU 会根据相关状态寄存器(Intel X86 上的代码状态寄存器和 ARM 上的当前程序状态寄存器)检查内存中任何代码或数据段的每次执行。

      当用户进程需要访问内核资源时,这样做的一般方法是允许用户进程通过系统调用代表它询问内核进程,这会在内核进程运行时进行特权上下文切换请求用户进程。

      作为旁注,Kernel Mode Linux 允许您在内核/主管模式下运行用户进程。

      参考资料和进一步阅读

      【讨论】:

      • 谢谢。这是否也意味着......加载器和MMU单元/分页系统最初负责用户程序仅在用户空间中加载,因此这就是它间接决定特权级别的方式......?
      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2021-07-13
      • 2012-11-06
      • 2011-03-27
      • 2014-02-28
      相关资源
      最近更新 更多