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

exi*_*lit 3 c c++ assembly kernel low-level

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

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

我很确定它不是,但我不明白为什么.任何人都可以指出这一点或指向一些处理这个主题的资源?

R..*_*R.. 10

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

  • 从技术上讲,至少在Linux/Unix下,大多数这些条件都不会导致内核直接杀死进程.相反,内核向进程发送一个信号(例如SIGSEGV),除非信号被捕获,否则将终止进程.在任何情况下,指令流都被中断,不允许不允许的操作继续进行. (3认同)