根据可用的机器指令总数,用户模式和内核模式之间有什么区别?

时间:2017-02-26 10:17:45

标签: operating-system

我从" 现代操作系统,Tanenbaum "

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

我无法根据可用的机器指令了解它们如何描述这两种模式的差异,在用户端,任何软件都能够在硬件级别进行任何更改,例如我们的软件会影响功能CPU,可以使用注册表详细信息,那么我们怎么能说在用户模式下,我们只有机器指令的子集?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

此类指示的数量往往很少。

答案 1 :(得分:0)

嗯,在user-mode中,肯定有一部分指令可用。这就是我们System Calls的原因。

示例:

用户想要在C中创建新流程。如果不输入kernel-mode,则无法执行此操作,因为某些说明集仅适用于kernel-mode,因此他使用system call fork,执行创建新流程的说明(user-mode中未提供)。因此System call是一种从kernel的{​​{1}}请求服务为用户做某事的机制,他/她无法为其编写代码。

以下摘录链接以最佳方式总结:

  

程序通常仅限于自己的地址空间   无法访问或修改其他正在运行的程序或操作系统   本身,通常被阻止直接操纵硬件   设备(例如帧缓冲器或网络设备)。

     

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