NT 分析(1)
作者:陆麟
转载请征得作者同意.
1999.6.21


朋友们好!
今天分析的是WINNT的速度为什么这么慢!
我们所用的NT,它的几个最核心的组件之一:HAL.DLL乃掌管整个系统硬件IO操作的关键驱动程序.它为所有其他DRIVER所仰赖.因为是它提供了对端口的序列化操作.避免端口争用.但是,就是这个HAL.DLL.提供了一个未公开的函数:HalProcessorIdle(void).就是这个函数.简单至极,他负责打开硬件中断,然后调用HLT指令,一旦有任何硬件中断,就调用RET返回.NT系统在运作的时候就不停地调用这个鸟毛的函数.不停地把自己挂起.大大地降低了自己的速度.(也许是为了避免其他软件供应商写类似冷却CPU的程序吧:)NT自己就负责搞定CPU温度了:))

但是很显然.我们并不需要NT为我们冷却CPU,因为NT的速度实在太慢了.我们宁可他温度高点,把速度加快点.那么把这个该死的HLT指令去除,就可以部分达到我们的预定目标.

来来来,看一下,HalProcessorIdle(void)干了什么:
_asm{
  sti
  hlt
  ret
}
这就是HalProcessorIdle(void)的全部代码.现在只要修改HLT指令为NOP,就可以加速NT运行.但是如果你尝试一下直接修改HAL.DLL.你就会发现当你重启动NT时,NT会报告HAL.DLL被破坏,然后NT就报废了.不肯启动了.所以.我写了个DRIVER.动态修改HLT指令.达到加速NT的目的.

需要的朋友请点击这里.