我是第一次学习"操作系统"。在我的书中,我找到了关于"用户模式"和"内核模式":
"从用户切换到内核模式"指令仅在内核中执行 模式
我认为这是一个不正确的句子,因为在实践中没有"内核的转换"。实际上,当用户进程需要执行特权指令时,它只是要求内核为自己做一些事情。这是对的吗?
答案 0 :(得分:2)
事实上,当用户进程需要执行特权指令时,它只是要求内核为自己做一些事情。
但这是怎么发生的?详细信息是处理器(即instruction set architecture)和OS特定的(在与您的系统相关的ABI规范中解释,例如here),但通常涉及一些machine code能够原子地更改SYSENTER
(在中切换它)的SYSCALL
或SVC
(或大型机上的CPU mode)等指令受控方式到内核模式)。系统调用的实际参数(甚至包括系统调用号)通常在寄存器中传递(但细节是ABI特定的)。
所以我觉得从用户模式切换到内核模式的概念是相关的,也是有意义的(所以“正确”)。
BTW,用户模式代码被硬件禁止(由硬件执行)以执行特权机器指令,例如与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。