我想知道内核以及负责此任务的内核部分如何强制执行权限分离。
例如,假设有两个进程在运行 - 一个在环0,另一个在环3.内核如何跟踪每个进程的环号?
编辑:我知道戒指号码。我的问题是关于内核(模块或其他)的部分,它执行对进程的检查以找出它们的权限级别。我相信可能有一个内核组件可以检查进程的环号。
答案 0 :(得分:4)
没有关于进程的环号的概念。
内核映射到一个内存区域,用户空间映射到另一个区域。在引导时,内核指定执行 syscall 指令时cpu必须跳转到的地址。所以有人做系统调用,cpu切换到ring0并按照内核的指示跳转到该地址。它现在正在执行内核代码。然后,在返回时,cpu切换回ring3并继续执行。
其他进入内核的方式也有类似的例子。
那么,linux内核如何强制分离?它为用户空间设置了在ring3中执行的功能。触发cpu切换到ring0的任何内容也会跳转到内核在引导时配置的地址。 除了内核代码之外没有其他代码在ring0中执行