是什么阻止了用户空间程序切换到更高级别
What prevents a user-space program from switching to higher levels?
上下文:
根据此描述,用户空间程序不能执行处理器提供的所有操作。上面链接中的描述说 CPU 内部有不同的操作级别。
问题:
如何防止 CPU 在特权级别执行用户空间代码?难道不能在不使用系统调用的情况下使用汇编语言切换到更高级别吗?
我很确定不是,但我不明白为什么。任何人都可以指出这一点或指出一些涉及此主题的资源吗?
当 CPU 到达的指令时
,由于要执行的指令的身份、要访问的内存地址或其他条件,当前权限级别不允许该指令,则会引发 CPU 异常。这实质上保存了当前的 cpu 状态(寄存器内容等),并将执行转移到以内核权限级别运行的预设内核地址,该地址可以检查要执行的操作并决定如何继续。在实践中,如果不允许执行要执行的操作,它通常会以内核终止进程而告终。
cpu 处理存储在 ram 中的代码。内存保留标志。内存具有特殊的布局。有所谓的描述符表,它将物理内存转换为虚拟内存。首先是读取 gdt 的描述符测试或段测试。gdt 包含一个名为描述符权限级别的值。它包含调用进程必须满足的振铃级别的值。否则,则不授予任何访问权限。然后是页面目录测试,它有一个主管位。这也必须满足某些条件。如果为零,则只有特权程序可以访问页面目录中的此页表。如果值为 1,则所有进程都可以访问当前已检查页面目录条目中的页面。最后一个测试是页面测试。它的检查与以前的检查类似。如果进程成功通过所有检查,则授予对内存页的访问权限。cpu 寄存器 c3 应该在这里引起人们的兴趣。
相关文章:
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- C++std::atomic在程序员级别保证了什么
- 覆盖应用程序的低级别键盘挂钩问题
- 在 Windows/C++ 上使用多进程应用程序的高精度定时操作
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- 如何查看在程序级别为我的程序创建了多少 vtable 和 vpointer
- 任务计划程序:设置运行级别时拒绝访问
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 当按下任何qpushbutton时,应用程序范围较高
- 如何使MFC CToolbar按钮更加一致,以使Windows 7/10上的高DPI了解应用程序
- 如何将NTP信息提交程序级别
- 什么是程序编译中的PIC级别
- 简单的C++SFML程序高CPU使用率
- TCL高管的程序运行正常
- 获取程序中的当前优化级别
- 不能使C++程序使用足够高的精度
- 高分辨率程序时间
- SQLite - 如何在终端级别使用它C++应用程序?
- 当输入为高值时程序崩溃
- 是什么阻止了用户空间程序切换到更高级别