内核和用户模式的区别

卡姆兰

谁负责确定进程处于内核模式还是用户模式?我知道内核知道哪个进程属于哪个空间,但是CPU如何确定呢?我的意思是说CPU应该了解进程或执行语句的模式吗?如果是,怎么办?如果没有,那么当用户要禁止做某事时会发生什么?当我们说用户应用程序只能看到一部分机器资源时,我知道这意味着应用程序无法在CPU中执行特定任务,但是谁会停止应用程序执行此类任务,更重要的是如何停止呢?

斯莱斯克

嗯,这个问题很有趣。我会尽力帮助...

谁负责确定进程处于内核模式还是用户模式?

操作系统设计者决定:-)。所有现代OS都在用户模式下运行所有​​进程(在x86体系结构中,“保护模式”下为“ ring 3”),因为使用诸如内存保护和虚拟内存之类的功能是必需的。较早和/或更简单的OS可以以内核模式(例如x86中的“实模式”)运行所有进程。这取决于操作系统设计。例如,MS-DOS就是这样工作的。

请注意,处理器模式的实际名称和类型在不同体系结构(x86,Sparc,PowerPC ...)之间有所不同。但是,所有现代处理器都具有类似的“受保护”模式,人们可能将其称为“用户”模式。

我知道内核知道哪个进程属于哪个空间,但是CPU如何确定呢?

CPU不“知道”它,因为CPU不知道进程。这些是操作系统提供的抽象。CPU只是执行输入给它的代码。CPU具有在不同模式之间切换的指令,并且OS使用这些指令根据需要将CPU置于正确的模式。

例如,在x86上,计算机将以“实模式”启动(出于兼容性原因)。当诸如Linux或Windows(NT及更高版本)的OS启动时,它要做的第一件事就是切换到“保护模式”。然后,它使用“铃声”功能来控制每个程序对硬件的访问。OS内核在环0(完全特权)下运行;用户软件在环3中运行(受限制)。每当OS将控制权交给用户软件时(即,当它启动或恢复用户进程时),它将首先切换到Ring3。然后控制权转回到内核,CPU切换回Ring 0。

模式/环之间的切换究竟如何工作取决于CPU架构。大多数体系结构都提供了用于切换的特殊指令或机制。一旦将CPU切换到某个模式/环,它将自行跟踪该模式(以及任何相关的限制)。

有关在x86架构上如何工作的详细信息,请参见本文:http : //duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection

顺便说一句:受限CPU模式下的保护/限制主要由CPU的内存管理单元实现较旧和/或更简单的处理器(例如Amiga和Atari ST使用的Motorola 68000或C64的6510)没有MMU。因此,他们无法运行区分内核和用户模式的操作系统。例如,这就是为什么Linux m68k端口至少需要运行Motorola 68020处理器的原因。早期的68000和68010没有MMU。

我的意思是说CPU应该了解进程或执行语句的模式吗?如果是,怎么办?

是的,CPU在知道当前正在运行哪种模式的意义上知道了这一点(尽管它不知道为什么)。

如果没有,那么当用户要禁止做某事时会发生什么?当我们说用户应用程序只能看到一部分机器资源时,我知道这意味着应用程序无法在CPU中执行特定任务,但是谁会停止应用程序执行此类任务,更重要的是如何停止呢?

一个很好的问题。CPU本身会停止应用程序。

如果代码(应用程序)在特权受限的模式下运行(例如x86上处于保护模式的环3),则代码可能存在某些无法做的事情(例如访问分配了代码的区域之外的内存)。CPU知道这一点,并在执行之前检查每条指令是否存在违规情况。如果检测到违规,则CPU停止执行有问题的代码(这称为“异常”或硬件中断),并跳转到特殊的错误处理代码(由OS预先设置)。

这样可以有效地将控制权交还给OS,然后可以按其认为合适的方式执行操作:如果异常是由于访问已换出到磁盘的内存(这是“分页”的工作原理)导致的,则从磁盘中获取内存,然后终止该过程。它非法访问了内存(可怕的“保护错误”或“分段错误”),等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IIS 8.0中内核模式和用户模式缓存之间的区别

来自分类Dev

sudo模式和内核模式之间有区别吗?

来自分类Dev

“内核模式”和“用户模式”是硬件功能还是软件功能?

来自分类Dev

用户程序的内核模式

来自分类Dev

用户空间和内核空间之间有什么区别?

来自分类Dev

Linux内核如何在用户模式和内核模式堆栈之间切换?

来自分类Dev

内核和用户模式之间的共享内存。如何分享句柄?

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

从用户模式转移到内核模式

来自分类Dev

多核CPU中内核线程和用户线程之间的区别?

来自分类Dev

如何分辨内核中的软锁定和用户空间中的软锁定之间的区别?

来自分类Dev

如何从Linux用户和内核模式知道CR寄存器的值

来自分类Dev

如何从Linux用户和内核模式知道CR寄存器的值

来自分类Dev

从用户模式访问内核内存(Windows)

来自分类Dev

MySQL进程是否以用户或内核模式运行?

来自分类Dev

从用户模式访问内核内存(Windows)

来自分类Dev

访问内核模式驱动程序内的用户模式内存

来自分类Dev

printf是在内核模式还是用户模式下运行?

来自分类Dev

访问内核模式驱动程序中的用户模式内存

来自分类Dev

CIFS 驱动程序是用户模式还是内核模式?

来自分类Dev

什么代码是用户模式代码,什么代码是内核模式代码?

来自分类Dev

内核哎呀和内核恐慌之间有什么区别?

来自分类Dev

抽象工厂模式和工厂模式的区别?

来自分类Dev

从内核调试模式调试dll和sys

来自分类Dev

Windows虚拟内存和内核模式

来自分类Dev

什么是用户线程和内核线程?

来自分类Dev

内存布局和内核空间-用户空间

来自分类Dev

外观和中介设计模式之间的区别?

Related 相关文章

  1. 1

    IIS 8.0中内核模式和用户模式缓存之间的区别

  2. 2

    sudo模式和内核模式之间有区别吗?

  3. 3

    “内核模式”和“用户模式”是硬件功能还是软件功能?

  4. 4

    用户程序的内核模式

  5. 5

    用户空间和内核空间之间有什么区别?

  6. 6

    Linux内核如何在用户模式和内核模式堆栈之间切换?

  7. 7

    内核和用户模式之间的共享内存。如何分享句柄?

  8. 8

    从用户模式切换到内核模式

  9. 9

    从用户模式切换到内核模式

  10. 10

    从用户模式转移到内核模式

  11. 11

    多核CPU中内核线程和用户线程之间的区别?

  12. 12

    如何分辨内核中的软锁定和用户空间中的软锁定之间的区别?

  13. 13

    如何从Linux用户和内核模式知道CR寄存器的值

  14. 14

    如何从Linux用户和内核模式知道CR寄存器的值

  15. 15

    从用户模式访问内核内存(Windows)

  16. 16

    MySQL进程是否以用户或内核模式运行?

  17. 17

    从用户模式访问内核内存(Windows)

  18. 18

    访问内核模式驱动程序内的用户模式内存

  19. 19

    printf是在内核模式还是用户模式下运行?

  20. 20

    访问内核模式驱动程序中的用户模式内存

  21. 21

    CIFS 驱动程序是用户模式还是内核模式?

  22. 22

    什么代码是用户模式代码,什么代码是内核模式代码?

  23. 23

    内核哎呀和内核恐慌之间有什么区别?

  24. 24

    抽象工厂模式和工厂模式的区别?

  25. 25

    从内核调试模式调试dll和sys

  26. 26

    Windows虚拟内存和内核模式

  27. 27

    什么是用户线程和内核线程?

  28. 28

    内存布局和内核空间-用户空间

  29. 29

    外观和中介设计模式之间的区别?

热门标签

归档