当代码在[内核|用户]模式下执行时意味着什么?

当代码在[内核|用户]模式下执行时意味着什么?

当代码在内核或用户模式下执行时意味着什么?

答案1

内核模式

在此模式下运行的程序可以完全访问底层硬件。它可以执行任何 CPU 指令,访问任何内存地址,基本上可以做任何它想做的事情。

用户模式 在此模式下执行的代码仅限于通过操作系统的 API 进行硬件修改。它不能直接访问硬件根本不

有趣的是,在常见架构上,这是通过硬件强制执行的,而不仅仅是操作系统。特别是,x86架构保护环

这种分离的一大优点是,当程序在用户模式下运行崩溃时,并不总是致命的。事实上,在现代系统上,它通常不是。

查看杰夫的写上去。这是他一贯的好东西。

答案2

简短的回答是:它只是告诉您程序将时间花在哪里。

对于更长的答案,我将分两步进行解释。第一的:

1.进入内核态

您编写的每个常规代码都在“用户模式”下运行。

程序可以使用库来完成常见任务。这也是用户模式代码。

在某些时候,程序可能需要系统的核心功能。例如:

  • 从磁盘访问文件内容
  • 保留一部分空闲内存
  • 从网络摄像头驱动程序获取视频帧
  • 将图像数据发送到显卡。
  • 发送网络数据包。

这种基本的(接近硬件)功能是内核的一部分。这是计算机上所有内容背后的中央程序。它管理程序运行所需的一切。

为了使用内核中的函数,程序执行路径实际上是从用户模式跳转到内核代码。内核完成它的工作,并将执行路径折叠回用户模式。

当程序在内核模式下花费大量时间时,通常意味着它正在执行大量与硬件相关的活动。例如,磁盘查找或视频流。硬件也可能出现故障;使处理速度变慢并导致程序在内核空间中花费异常多的时间。


2 区别

内核空间中的代码具有高性能。内核的其他部分可以直接调用它,并且代码可以直接访问系统的每个资源,无需任何边界检查。内核/用户模式之间的切换也是一项昂贵的操作,通过在内核代码中运行所有内容可以完全避免这种情况。

然而,在内核内部,没有太多空间进行安全检查、防止崩溃或写入错误的内存部分。这些是内核可以向其他程序提供的服务。它欺骗程序相信世界看起来不同(程序生活在虚拟的、沙盒/受限的环境中),因此进出程序的所有内容都可以被翻译和保护。

内核本身无法提供太多保护,因为它背后没有任何东西可以保护它。它是系统的核心,当它停止时,一切都结束了。您会遇到内核恐慌,或者在 Windows 上,出现著名的 BSOD。

这也是基于内核的代码的风险,也是更多性能要求较低的子系统被转移到用户空间的原因。然而,与硬件相关的基本部分通常是内核代码,不会很快改变。

答案3

区别在于当前正在执行的代码是否允许直接与各种硬件进行交互。内核模式代码可以写入设备总线、更改内存映射、切换正在运行的进程等等。用户模式可以进行计算,并且可以对内核进行系统调用以与世界其他部分进行交互。

相关内容