我想知道当我们点击关机选项时计算机是如何关闭的?二元系统还有什么东西吗?

时间:2016-10-12 07:44:06

标签: computer-science

例如打印机如何打印页面? CPU将二进制8位代码传送给打印机而不是......那么当我们启动或关闭它时,计算机内部会发生什么?

1 个答案:

答案 0 :(得分:14)

原始AT computers使用了{em}仅机械开关的AT PSU来打开和关闭电源:

  

早期的微电脑电源完全开启或关闭,由机械线电压开关控制,[...]。这些电源通常无法实现省电模式,如待机或软关机等,或预定的开机电源控制。

因此没有被软件关闭。

在1994年,ATX PSU变得流行,这样PSU引入了一个名为 Power ON 的引脚(以下称为 PWON ) + 5V,必须通过主板拉低以激活PSU 1

由于PWON是电信号,主板可以实现不同类型的逻辑来打开和关闭电源。

首先引入前面板开关,这是打开/关闭PC的唯一方法

Windows 95, Turn off screen

A"软关机"然后引入模式,此模式为不同设备留下一些低功率电源轨以保持活动状态,并通过拉低PWON来唤醒唤醒。
例如:Wake-on-LANWake-on-ringRTC alarm

在引入APM之前,软件无法以标准方式关闭PC。

然而,APM最近被ACPI取代,这是一个非常复杂的系统。

通过PWON信号可以很难想象关闭电脑所需的功能,所需要的只是告诉连接它的芯片将其释放回+ 5V。 没有标准的方法可以做到这一点,但ACPI的目的是克服制造商之间的差异。

特别是,ACPI定义为了关闭系统,将其置于状态 S5 ,软件需要执行固定的步骤序列。
所有信息都可以在ACPI公开的DSDT (Differential System Descriptor Table)FACP (Fixed ACPI descriptor table)表中找到。

第一步是调用一个名为\_S5._PTS的方法,在我的系统中什么都不做:

Method (PTS, 1, NotSerialized)
{
    If (Arg0) {}
}

这使主板设计人员有机会执行复杂的操作,因为这种方法是由他们编写的。

另一步是固定的,它是将PC关闭的实际步骤,它包含将值写入寄存器
感兴趣的注册表(实际上有两个,但我们不在这里讨论)是PM1a_CNT,在我的系统中被宣传为

[0ACh 0172  12]           PM1A Control Block : [Generic Address Structure]
[0ACh 0172   1]                     Space ID : 01 [SystemIO]
[0ADh 0173   1]                    Bit Width : 10
[0AEh 0174   1]                   Bit Offset : 00
[0AFh 0175   1]         Encoded Access Width : 02 [Word Access:16]
[0B0h 0176   8]                      Address : 0000000000001804

告诉我们它位于IO空间 2 中的1804h

写入此寄存器的值称为SLP_TYPa,它位于_S5对象中,对于我的系统:

Name (_S5, Package (0x04)  // _S5_: S5 System State
{
    0x07, 
    Zero, 
    Zero, 
    Zero
})

SLP_TYPa是第一个数字07h 在将此数字写入PM1a_CNT之前,我们需要将其向左移10并设置其位13,因此要写入的实际值为3c00h

要关闭电源,我只需要将3c00h写入端口1804h 3

mov ax, 2007h
mov dx, 1804h
out dx, ax

1 您可以使用回形针将PWON(绿色)短接至GND(黑色),并在未连接PC时将PSU设为ON。 2 我的系统是x86,x86s有两个地址空间:IO和内存 3 启用授权ACPI(将0a0h写入0b2h将在我的系统中启用ACPI)。