Operating system 就可用的机器指令总数而言,用户模式和内核模式有什么区别?

Operating system 就可用的机器指令总数而言,用户模式和内核模式有什么区别?,operating-system,Operating System,我从“现代操作系统,Tanenbaum”中读到这一段 大多数计算机有两种操作模式:内核 模式和用户模式。操作系统是最基本的软件,在内核模式(也称为管理模式)下运行。在此模式下,它可以完全访问所有硬件,并可以执行机器能够执行的任何指令。软件的其余部分在用户模式下运行,在此模式下,只有一部分机器指令可用。 我无法理解他们是如何根据可用的机器指令来描述这两种模式的差异的,在用户端,任何软件都可以在硬件级别进行任何更改,就像我们有可以影响CPU功能的软件,可以处理注册表细节,那么我们怎么能说在用户模式下

我从“现代操作系统,Tanenbaum”中读到这一段

大多数计算机有两种操作模式:内核 模式和用户模式。操作系统是最基本的软件,在内核模式(也称为管理模式)下运行。在此模式下,它可以完全访问所有硬件,并可以执行机器能够执行的任何指令。软件的其余部分在用户模式下运行,在此模式下,只有一部分机器指令可用。


我无法理解他们是如何根据可用的机器指令来描述这两种模式的差异的,在用户端,任何软件都可以在硬件级别进行任何更改,就像我们有可以影响CPU功能的软件,可以处理注册表细节,那么我们怎么能说在用户模式下,我们只有可用的机器指令子集?

嗯,在
用户模式下,肯定有可用的指令子集。这就是我们的理由

示例:

用户希望在C语言中创建一个新进程。如果不进入
内核模式
,他就无法这样做,因为某些指令集只对
内核模式
可用,因此他使用
系统调用
fork
,该fork执行创建新进程的指令(在
用户模式
中不可用)。因此,
系统调用
是一种从
操作系统
内核
请求服务为用户做一些他/她无法编写代码的事情的机制

以下摘录自上述链接,以最佳方式对其进行总结:

程序通常被限制在自己的地址空间内,以便 无法访问或修改其他正在运行的程序或操作系统 并且通常被阻止直接操作硬件 设备(例如帧缓冲区或网络设备)

然而,许多正常的应用程序显然需要访问这些 组件,因此系统调用由操作系统提供 为此类操作提供定义良好的安全实现。这个 操作系统以最高权限级别执行,以及 允许应用程序通过系统调用请求服务,这是 通常通过中断启动。中断会自动将 CPU进入某个提升的特权级别,然后将控制权传递给 内核,它决定是否应授予调用程序 请求的服务。如果服务被授予,内核将执行 一组特定的指令,调用程序对此没有任何限制 直接控制,将权限级别返回到调用 程序,然后将控制权返回给调用程序


仅在内核模式下可用的指令往往很少。这些说明仅用于管理系统

例如,大多数处理器都有一个HALT指令,用于停止用于系统关闭的CPU。显然,您不希望任何用户能够为所有人执行停止和停止计算机。这样的指令只能在内核模式下访问

处理器使用一个处理程序表来处理中断和异常。操作系统创建这样一个表,列出这些事件的处理程序。然后加载寄存器,给出表的位置(和大小)。加载此寄存器的指令仅为内核模式。否则,任何应用程序都可能对系统造成彻底破坏

如果在用户模式下执行,这些性质的指令将触发异常


此类说明的数量往往很少。

如有任何疑问,请随时查询。