x86 处理器中如何操作硬件特权级别
How hardware privilege levels are manipulated in x86 processor
我无法理解硬件如何知道当前内核代码是 运行。我们是否需要在一些寄存器中设置一些内存地址范围来指示CPU,这些内存地址之间就是内核运行。
在 x86 架构上,这是通过描述符表实现的。启动代码,安装表,告诉 CPU 哪些内存区域有哪些权限。访问内存时,硬件将检查指令 and/or 访问方法是否对给定的地址描述符有效。
嗯,这是一个非常基本的描述,因为这是一个相当宽泛的问题。
一些帖子和 link 帮助您入门:
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
CPU可以通过异常或中断进入更高模式。 CPU 使用来自中断指令的 return 返回到较低模式。
CPU从进程状态寄存器知道它是什么模式运行。
操作系统在执行异常或中断处理程序时知道它处于内核模式。
操作系统设置页表来定义内核的地址范围。这些表的设置是为了在 CPU 不处于内核模式时保护它们不被访问。
我无法理解硬件如何知道当前内核代码是 运行。我们是否需要在一些寄存器中设置一些内存地址范围来指示CPU,这些内存地址之间就是内核运行。
在 x86 架构上,这是通过描述符表实现的。启动代码,安装表,告诉 CPU 哪些内存区域有哪些权限。访问内存时,硬件将检查指令 and/or 访问方法是否对给定的地址描述符有效。
嗯,这是一个非常基本的描述,因为这是一个相当宽泛的问题。
一些帖子和 link 帮助您入门:
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
CPU可以通过异常或中断进入更高模式。 CPU 使用来自中断指令的 return 返回到较低模式。
CPU从进程状态寄存器知道它是什么模式运行。 操作系统在执行异常或中断处理程序时知道它处于内核模式。
操作系统设置页表来定义内核的地址范围。这些表的设置是为了在 CPU 不处于内核模式时保护它们不被访问。