我从" 现代操作系统,Tanenbaum "
大多数计算机都有两种操作模式:内核 模式和用户模式。操作系统是最基本的软件,在内核模式下运行(也称为管理员模式)。在此模式下,它可以完全访问所有硬件,并可以执行机器能够执行的任何指令。其余软件在用户模式下运行,其中只有一部分机器指令可用。
我无法根据可用的机器指令了解它们如何描述这两种模式的差异,在用户端,任何软件都能够在硬件级别进行任何更改,例如我们的软件会影响功能CPU,可以使用注册表详细信息,那么我们怎么能说在用户模式下,我们只有机器指令的子集?
答案 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,它确定是否应该授予调用程序 请求的服务。如果授予服务,则内核执行 调用程序没有的一组特定指令 直接控制,将权限级别返回到调用的权限级别 程序,然后将控制权返回给调用程序。