系统进入S3,S4,S5的最后一步

来源:互联网 发布:java内存溢出的原因 编辑:程序博客网 时间:2024/04/30 14:48

   一直都不怎么懂,在我们关机的时候,(如在dos下按了power button,在Windows下按了shutdown),计算机最后是怎么关机的呢?肯定有一个通知硬件断电的动作,后来问HW工程师,知道硬件上有S3,S5和S4(intel chipset)的信号,当其中某个信号被拉低的时候,HW上会有相应的power sequence也就是断电时序。

    而s3,s4和s5信号一般是由南桥发出来的,按照ACPI spec,chipset都有SLP_TYPx和SLP_EN这两个寄存器字段来控制HW进入相应的电源模式(Sx)。

    所以,当我们在Windows下按了shutdown后,OS和driver会做进入s5的一些动作,然后OS执行_BTS,_PTS和_GTS(如果都有)三个ACPI规定的方法,最后将5填入SLP_TYPx寄存器,设置SLP_EN想让HW执行S5的sequence.

    就这样结束了吗?那在dos系统下关机有时谁来填的SLP_TYPx和SLP_EN呢? 只有是BIOS。

    BIOS会设两个SMI,一个是由power button触发(当按power button时),一个是由sleep event触发(当填SLP_TYPx或SLP_EN??时)。所以在dos系统下,按power button时BIOS会在处理其SMI时填SLP_TYPx和SLP_EN这两个寄存器;在Windows系统关机或进入睡眠时,OS填SLP_TYPx或SLP_EN时触发sleep event SMI,BIOS会保存一些寄存器,然后填SLP_TYPx或SLP_EN。

    那么这里就又有两个问题啦?1.BIOS填SLP_TYPx或SLP_EN不会触发sleep event SMI么?2.ACPI模式下可以产生SMI么?

1.因为两次BIOS填SLP_TYPx或SLP_EN都是在处理SMI里面,而同时只会有一个SMI被触发,也就是SMI不会存在嵌套,所以在SMI处理时不会再触发SMI.

2.ACPI模式下是可以产生SMI的,只要相应的Status和Enable bit被置位。

原创粉丝点击