我正在阅读Linux设备驱动程序,其中提到内核以特权模式运行,这使其可以无限制地访问所有H / W.如何防止用户程序在此模式下设置CPU?
答案 0 :(得分:6)
如果您想了解这些内容,最好的方法之一就是通过代码遵循Linux启动过程Kernel Boot Process。例如,假设你在Linux上运行x86架构。启动时发生的事情是BIOS控制启动加载程序。 tern中的引导加载程序可以控制内核。
然后内核会经历一个启动过程。最初大部分内容都是用汇编语言编写的 - 请参阅/arch/x86/boot/header.S
然后转到/arch/x86/boot/main.c。在主要功能结束时,您会看到对go_to_protected_mode()
您可以在/arch/x86/boot/pm.c
中看到该功能因此,一旦你启动进入内核,它就成了CPU的网关,你的代码在内核提供的虚拟机中运行。由于用户程序必须通过此虚拟机执行所有操作,因此无法在其他模式下运行。
答案 1 :(得分:1)
用户模式只能通过生成某种中断来更改其权限模式。看起来中断的目的是改变程序的特权模式。在生成任何正常中断时,特权模式被提升并且一些内核代码开始运行.....结论:通过中断自身,用户模式程序无法提升权限并继续运行自己的代码....这就是这个很好的安全性机制运作。
Billmic