| 
																		
      最近在研读张老师的大作,结合<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到哪里去取?              问题有点多,但目前就卡在这个理解上面了,请张老师帮忙解答下。谢谢! 
 
       另外,我还没有研究中断的处理过程,是不是应该先回头研究一下中断的处理过程? 
  
																		 
																	 |