6

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

4

2 回答 2

6

如果您想了解这些内容,最好的方法之一是通过代码遵循 Linux 引导过程内核引导过程。例如,假设您采用在 x86 架构上运行的 Linux。引导时发生的事情是 BIOS 将控制权交给了引导加载程序。tern 中的引导加载程序将控制权交给内核。

然后内核通过一个过程来启动。最初大部分内容都是用汇编语言编写的 - 请参阅 /arch/x86/boot/header.S

然后它转到 /arch/x86/boot/main.c。在 main 函数的末尾,您会看到对go_to_protected_mode()

您可以在 /arch/x86/boot/pm.c 中看到该功能

所以,一旦你启动到内核,它就成为 CPU 的网关,你的代码在内核提供的虚拟机中运行。由于用户程序必须通过此虚拟机执行所有操作,因此用户程序无法在其他模式下运行。

于 2012-07-05T15:18:06.113 回答
1

用户模式只能通过产生某种中断来改变它的特权模式。看起来中断的目的是为了改变程序的特权模式。在产生任何正常中断时,特权模式被提升,一些内核代码开始运行......结论:通过中断自己,用户模式程序无法提升特权并继续运行自己的代码......这就是如此巨大的安全性机制运作。

比尔麦克

于 2013-09-26T06:06:00.633 回答