最近在研读张老师的大作,结合<windows internals>第六版,以及intel官方文档,使我加深了对硬件以及操作系统内部原理的了解。 我想深入了解一下从用户态的API调用进入到内核的整个过程,目前有一些疑问,请张老师指点: 一、MSR寄存器:按我看到的资料,应该是Pentium2之后的处理器引入的,到目前为止,以后的处理器不会增加实现MSR的特性——是否就意味着未来的处理器会抛弃这种方式。《软件调试》P42中也写到:[MSR的本义是指这些寄存器与CPU型号有关,还没有正式纳入到IA-32架构中,也有可能不会被以后的CPU所兼容。]。请问我的理解是对的吗? MSR address range between 40000000H - 400000FFH is marked as a specially reserved range. All existing and future processors will not implement any features using any MSR in this range.(来自intel文档) 二、sysenter指令到底干了什么事情?看了intel文档,但是有一些问题还是不太肯定: 1.sysenter指令会不会产生中断?因为我看完了intel文档,没有说明是否产生中断,只是可以肯定这个指令是为了取代int 2e进入内核而设计,会比int 2e快。如果不会产生中断,那么通过什么机制实现?仅仅是通过改了cs:ip和ss:sp?如果是通过中断,那么中断例程是什么?这比int2e有什么优势? 2.sysenter会从MSR寄存器指向的地方读取CS,ESP,EIP供进入ring0后使用,但intel文档中写的是4个(黑体字): Prior to executing the SYSENTER instruction, software must specify the privilege level 0 code segment and code entry point, and the privilege level 0 stack segment and stack pointer by writing values to the following MSRs。 那么,SS到哪里去取? 问题有点多,但目前就卡在这个理解上面了,请张老师帮忙解答下。谢谢!
另外,我还没有研究中断的处理过程,是不是应该先回头研究一下中断的处理过程?
|