一些文章说模块/驱动程序属于内核空间,因为它参与了内核的形成;(参考文献:http://www.freesoftwaremagazine.com/articles/drivers_linux)
而其他人则表示,只有Ring0(与硬件直接交互)才能被称为内核空间(排除模块/驱动程序,就像它们在Ring2上那样)。(参考:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)
有人能告诉我哪种观点是正确的吗?
发布于 2013-04-22 16:27:17
在AMD64和克隆,以及ix86上,Linux只使用了ring 0和3,其他普通的体系结构都没有“环”,所以完全使用它们是完全不可移植的。此外,Linux是一体式的。整个环的想法是能够在环0上运行微内核,让服务进程在更高的环上运行,这样它们就不会搞乱微内核,最后在最高的环上运行用户空间,这样就不会造成太大的破坏。
发布于 2013-04-22 15:12:42
你能提供一个推荐信吗?我假设您在谈论Linux,据我所知,Linux只使用Rings 0(内核)和3(用户)。
我认为这取决于操作系统的设计。您可以使用内部环,比如说,微内核体系结构。您是在询问特定的系统(例如Linux)吗?我相信只有在特定的操作系统中才有可能回答这个问题。然而,在大多数情况下,基于x86的OSes只使用“内核”(0)和“用户”(3)。
发布于 2016-07-12 16:02:01
对于常规操作系统(不是在虚拟化下运行),内核空间和ring0在特权方面是同义词。然而,我必须分别解释它们,以突出它们所存在的差异,以及它们的共性。
Kernel space - OS通常有两种执行模式:内核空间和用户空间。内核空间是操作系统的特权代码,如调度程序、设备驱动程序等。它的任务是管理整个系统,并确保它以稳定的方式运行。用户空间包含使用内核空间提供的功能的进程,如web浏览器等。
Rings -英特尔处理器有4种特权级别的操作.这些叫做戒指。环0是最有特权的,而第3环是最少的。计算机内存的任何区域都可以用这些级别来标记。如果内存区域被ring0标记为访问,那么只有驻留在ring0中的代码才能访问它,所有环都可以访问标记为ring3访问的内存区域。这提供了一种机制,以确保如果在较低权限级别(较高环)运行较少信任的代码,在较高权限级别(较低环)运行更多可信代码,则前者无法影响后者。可以以编程方式设置哪个环(特权级别)的代码。
为了简化设计,并使代码可移植(像ARM这样的非英特尔CPU没有四环架构),大多数操作系统只使用4个环中的两个。它们通常是ring0和ring3。内核在ring0中运行,并构成内核空间(注意,如果明天OS开发人员让内核在ring1中运行,而不是ring0,那么ring1将构成内核空间)。应用程序运行在ring3中,构成用户空间。
这是大多数操作系统遵循的惯例。但是,如果我是OS开发人员,我可以自由地以任何我想要的方式使用圆环架构。考虑以下情况:
(KS=Kernel空间、US=User空间、DD=Device驱动程序或内核模块、rX=环X)
注意:我在编写时做了很少的简化,比如将x86体系结构称为Intel。现在不要费心于复杂的事情。
https://unix.stackexchange.com/questions/73298
复制相似问题