是什么阻止了用户空间程序切换到更高级别

What prevents a user-space program from switching to higher levels?

本文关键字:高级别 程序 空间 用户 是什么      更新时间:2023-10-16

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

问题:
如何防止 CPU 在特权级别执行用户空间代码?难道不能在不使用系统调用的情况下使用汇编语言切换到更高级别吗?

我很确定不是,但我不明白为什么。任何人都可以指出这一点或指出一些涉及此主题的资源吗?

当 CPU 到达的指令时

,由于要执行的指令的身份、要访问的内存地址或其他条件,当前权限级别不允许该指令,则会引发 CPU 异常。这实质上保存了当前的 cpu 状态(寄存器内容等),并将执行转移到以内核权限级别运行的预设内核地址,该地址可以检查要执行的操作并决定如何继续。在实践中,如果不允许执行要执行的操作,它通常会以内核终止进程而告终。

cpu 处理存储在 ram 中的代码。内存保留标志。内存具有特殊的布局。有所谓的描述符表,它将物理内存转换为虚拟内存。首先是读取 gdt 的描述符测试或段测试。gdt 包含一个名为描述符权限级别的值。它包含调用进程必须满足的振铃级别的值。否则,则不授予任何访问权限。然后是页面目录测试,它有一个主管位。这也必须满足某些条件。如果为零,则只有特权程序可以访问页面目录中的此页表。如果值为 1,则所有进程都可以访问当前已检查页面目录条目中的页面。最后一个测试是页面测试。它的检查与以前的检查类似。如果进程成功通过所有检查,则授予对内存页的访问权限。cpu 寄存器 c3 应该在这里引起人们的兴趣。