【问题标题】:"Switching from user mode to kernel mode" is an incorrect concept“从用户模式切换到内核模式”是一个错误的概念
【发布时间】:2018-06-27 23:00:11
【问题描述】:

我第一次学习“操作系统”。在我的书中,我发现了这句话关于“用户模式”和“内核模式”:

“从用户模式切换到内核模式”指令只在内核中执行 模式

我认为这是一个不正确的句子,因为实际上没有“内核切换”。事实上,当用户进程需要执行特权指令时,它只是要求内核为自己做一些事情。对吗?

【问题讨论】:

  • 你的书是什么?
  • 您需要提供更多上下文..

标签: linux linux-kernel operating-system kernel


【解决方案1】:

事实上,当用户进程需要执行特权指令时,它只是要求内核为自己做一些事情。

但是这是怎么发生的呢?详细信息是处理器(即instruction set architecture)和OS 特定的(在与您的系统相关的ABI 规范中解释,例如here),但这通常涉及一些machine code 指令,如SYSENTERSYSCALL(或SVC 在大型机上)能够原子地更改CPU mode(即以受控方式将其切换到内核模式)。系统调用的实际参数(甚至包括系统调用号)通常在寄存器中传递(但细节是特定于 ABI 的)。

所以我觉得从用户模式切换到内核模式的概念是相关的,有意义的(所以“正确”)。

顺便说一句,用户模式代码被禁止(通过硬件)执行特权机器指令,例如与 IO 硬件设备交互的那些(阅读 protection rings)。如果你尝试,你会得到一些硬件exception(有点类似于interrupts)。因此,您的代码(即使它是恶意的)必须进行内核控制的系统调用(它有很多与权限检查相关的代码),例如所有 IO。

另请阅读Operating Systems: Three Easy Pieces - 可免费下载。另见http://osdev.org/。阅读system call wikipage 和syscalls(2),以及Assembler HowTo

在现实生活中,事情要复杂得多。了解System Management Mode 和(可怕的)Intel Management Engine

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 2014-04-30
    • 2016-12-26
    • 1970-01-01
    • 2012-04-15
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多