我知道在用户模式下运行的进程和在内核模式下运行的进程之间的区别(基于访问限制、对硬件的访问等)。但出于好奇,以内核模式运行的进程与以 root 身份运行的进程有什么区别?
内核模式和根是两个独立的想法,彼此之间并没有真正的联系。 以 root 身份运行进程的概念是一个 unix/linux 术语,这意味着您以系统管理员的身份登录。
您运行的任何进程,无论是作为 root 还是普通用户,通常都在用户模式和内核模式下运行。 系统不断在用户模式(应用程序代码运行的位置)和内核模式(内核代码运行的位置)之间切换。
某些程序(如许多设备驱动程序)始终在内核模式下运行,这意味着它们可以完全访问硬件。 以root权限运行的普通应用程序仍然存在于用户模式下,并且仅在进行内核系统调用时切换到内核模式,然后再切换回用户模式。
我知道这个问题很老了,但我只花了一个小时看这样的帖子,因为这些答案不清楚,我想我知道为什么。
如果您要问“root 是否在内核模式下运行”,那么您可能已经非常熟悉任务管理器(如 htop),它会向您显示所有进程(让我们以 linux 为例),这就是您所需要的会看到
所以我显然认为“所有特权都是root,如果root不是内核模式那么它就不会出现在列表中,对吧?”。 错了!
仔细一看,内核本身并不存在。 好的,那么你可以搜索“内核进程在哪里?”然后是“内核是一个进程吗?”和砰
答案是:内核不是进程! 我看到的关于“根与内核”的每个答案都忽略/忘记提及这一点。
内核不是一个进程,它管理进程,它启动、控制CPU并以root用户身份运行第一个进程init/systemd。之后的一切都是一个进程,包括你可能运行的任何东西,并且以用户模式运行,包括 root,它是一个用户。用户可以执行的操作的权限由内核本身处理,而不是由 CPU 处理,CPU 根据内核的指示处理用户模式和内核模式之间的切换。
也许进程模式而不是内核模式会是一个更好的术语,毕竟用户的概念是由内核应用的,你可以没有用户的概念,但仍然有内核和用户模式...
最后,我可能仍然弄错了,在这种情况下,请有人纠正我,但我仍然会争论术语和解释是多么令人困惑。