我在阅读有关Linux设备驱动程序的内容,其中提到内核以特权模式运行,因此它可以不受限制地访问所有硬件。如何防止用户程序在此模式下设置CPU?谁或如何更改处理器模式,CPU状态,CPU特权级别?
5
A
回答
6
如果你想了解这个东西,最好的方法之一是通过代码遵循Linux启动过程Kernel Boot Process。例如,假设您将Linux运行在x86架构上。启动时会发生什么情况是BIOS将控制权交给引导加载程序。引导加载程序可以控制内核。
然后内核通过一个进程启动。最初的大部分内容是用汇编语言编写的 - 请参阅/arch/x86/boot/header.S
然后进入/arch/x86/boot/main.c。就在主函数结束时,您会看到调用go_to_protected_mode()
你可以看到,功能/arch/x86/boot/pm.c
所以,一旦你引导到内核,它成为CPU的网关,并且您的代码在内核提供的虚拟机中运行。用户程序不能在其他模式下运行,因为它们必须通过此虚拟机执行所有操作。
1
用户模式只能通过生成某种中断来改变它的权限模式。看起来中断的目的是改变程序的特权模式。一旦产生任何正常的中断,特权模式被提升,并且一些内核代码开始运行.....结论:通过自行中断,用户模式程序不能提升权限并继续运行自己的代码....这就是如此巨大的安全性机制运作。
Billmic
相关问题
- 1. 工人级别是否始终处于CPU 100%负载状态?
- 2. 如何理解和更改bochsdbg中的CPU寄存器标志?
- 3. CPU如何处理睡眠功能?
- 4. 如何将待处理状态更改为付费状态
- 5. 处理cpu绑定操作
- 6. 如何编写一段程序,使CPU在Linux的某个级别处于忙碌状态?
- 7. CPU的舍入模式何时可以更改?
- 8. 如何处理基于CPU的限制的多处理
- 9. 如何在处理第三方库时以任何CPU模式构建项目?
- 10. 如何在CPU处于保护模式时读/写硬盘?
- 11. 如何在C#.net中获取处理器CPU标志?
- 12. 状态设计模式:错误处理
- 13. 如何更改处理中的mp3音量(级别)?
- 14. android:如何改变模拟器上的CPU速度
- 15. 内核如何知道CPU是处于用户模式还是kenel模式?
- 16. ManualResetEvent在处于等待状态时会消耗CPU吗?
- 17. 如何更改代码中的CPU频率调控器类型
- 18. 如何处理Discord bot的用户状态更改?
- 19. 单核CPU的Nodejs服务器的主从模式或集群模式
- 20. 特权模式,内核模式和超级用户模式之间的区别
- 21. 关于CPU操作和I/O处理
- 22. C++限制CPU时间来处理
- 23. 多处理不使用所有cpu
- 24. 在C++中处理CPU异常
- 25. 使用nice减少CPU处理时间?
- 26. 更改运行中断处理程序的优先级级别?
- 27. Xcode调试器 - 如何在CPU指令的级别单步执行
- 28. 如何在javascript中处理输入元素状态的编程式更改
- 29. 管理CPU使用
- 30. 识别服务器CPU进程