3

上下文:
根据此描述,用户空间程序无法执行处理器提供的所有操作。上面链接中的描述说cpu内部有不同的操作级别。

问题:
如何防止用户空间代码被 cpu 在特权级别执行?难道不使用系统调用就可以通过使用汇编语言切换到更高级别吗?

我很确定不是,但我不明白为什么。谁能指出这一点或指出一些涉及该主题的资源?

4

2 回答 2

10

当 cpu 到达一条指令时,由于要执行的指令的标识、要访问的内存地址或某些其他条件在当前特权级别上不允许,则引发 cpu 异常。这实质上保存了当前的 cpu 状态(寄存器内容等)并将执行转移到以内核特权级别运行的预设内核地址,该地址可以检查要执行的操作并决定如何进行。在实践中,如果不允许执行的操作,通常会以内核杀死进程结束。

于 2013-11-14T18:25:47.847 回答
0

cpu 处理存储在 ram 中的代码。内存保留标志。内存有一个特殊的布局。有所谓的描述符表,它将物理内存转换为虚拟内存。首先是读取 gdt 的描述符测试或段测试。gdt 包含一个称为描述符特权级别的值。它包含调用进程必须满足的 ringlevel 的值。如果没有,则不授予访问权限。然后是页面目录测试,它有一个主管位。这也必须满足一定的条件。如果它为零,则只有特权进程可以访问页目录中的此页表。如果值为 1,则所有进程都可以访问当前检查的页面目录条目中的页面。最后一个测试是页面测试。它的检查就像以前的检查一样。如果一个进程成功通过了所有检查,授予对内存页面的访问权限。Cpu 寄存器 c3 应该在这里感兴趣。

于 2013-11-14T19:28:36.333 回答