我无法理解硬件如何知道当前内核代码正在运行。我们是否需要在某些寄存器中设置一些内存地址范围,指示这些内存之间的CPU地址,它是内核运行的。
答案 0 :(得分:2)
在x86架构上,这是通过描述符表实现的。启动代码,安装表告诉CPU哪些内存区域具有哪些权限。访问内存时,硬件将检查指令和/或访问方法是否对地址的给定描述符有效。
嗯,这是一个非常基本的描述,因为这是一个相当广泛的问题。
一些发布和链接可帮助您入门:
What are Ring 0 and Ring 3 in OS
http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/
我还建议下载(免费)英特尔手册,因为这里也有详细介绍。
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
答案 1 :(得分:0)
CPU可以通过异常或中断进入更高模式。 CPU使用从中断返回指令返回到较低模式。
CPU知道它从进程状态寄存器运行的模式。 操作系统在执行异常或中断的处理程序时知道它处于内核模式。
操作系统设置页表以定义内核的地址范围。设置这些表,以便在CPU未处于内核模式时保护它们不被访问。