谁或如何改变处理器模式、CPU状态、CPU特权级?

6

我正在阅读有关Linux设备驱动程序的内容,其中提到内核运行在特权模式下,这使它可以不受限制地访问所有硬件。那么,如何防止用户程序将CPU设置为此模式?

2个回答

6
如果您想了解这方面的知识,最好的方法之一是通过跟踪Linux引导过程(Kernel Boot Process)的代码来学习。例如,假设您在x86架构上运行Linux,则引导时BIOS将控制权交给引导加载程序,然后引导加载程序将控制权交给内核。
然后,内核通过一系列流程进行启动。最初,大部分内容都是用汇编语言编写的 - 可以查看/arch/x86/boot/header.S。
然后进入/arch/x86/boot/main.c。在main函数的末尾,可以看到对go_to_protected_mode()的调用。
这个函数可以在/arch/x86/boot/pm.c中找到。
因此,一旦您引导进入内核,它就成为CPU的网关,并且您的代码在内核提供的虚拟机中运行。用户程序必须通过这个虚拟机完成所有操作,从而无法在其他模式下运行。

1
用户模式只能通过产生某种中断来改变其特权模式。看起来,中断的目的是改变程序的特权模式。在生成任何正常中断时,特权模式都会提升并开始运行一些内核代码..... 结论:通过中断自身,用户模式程序无法提升特权并继续运行自己的代码.... 这就是这个伟大的安全机制的运作方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接