在[kernel | user]模式下执行代码是什么意思?


14

在内核或用户模式下执行代码是什么意思?

Answers:


15

内核模式

以这种模式运行的程序可以完全访问基础硬件。它可以执行任何CPU指令,访问任何内存地址,并且实质上可以执行任何所需的操作。

在此模式下执行的用户模式代码仅限于通过OS的API进行硬件修改。它不能直接访问硬件在所有

有趣的是,在通用体系结构上,这是通过硬件而非操作系统来实现的。特别是x86体系结构具有保护环

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

查看Jeff的文章。这是他通常的好东西。


3

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

对于更长的答案,我将分两个步骤进行说明。第一:

1.进入内核模式

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

程序可以使用库为它们执行常见任务。这也是用户模式代码。

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

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

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

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

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


2区别

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

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

内核本身没有太多的保护,因为它后面没有任何东西可以保护它。它是系统的心脏,一旦停止,一切就结束了。您会遇到内核恐慌,或者在Windows上会遇到著名的BSOD。

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


2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.