软件/代码如何实际与硬件通信?

Aby*_*mes 64 operating-system

我的问题是:

当我按下Windows/Linux中的"关机"按钮时,计算机将关闭."关闭"命令如何实际使计算机物理关闭?

说清楚我的观点:

当我们踢球时,球与我们的腿之间存在物理接触,以便球移动.那么软件和硬件之间的物理连接如何实现?代码的纯文本如何使计算机完成它的工作?

Ala*_*lan 43

虽然答案相当复杂,并且需要了解电气系统和电路(KVL,KCL),二进制数和布尔逻辑的基础知识,但我们可以在高级别描述该过程:编译代码(由纯文本字表示) ,组装并最终转换为Zero和Ones的组合,分别代表低压和高压.

当电压施加到材料和电路时,这些电压会改变它们的物理特性,例如关闭向灯泡提供电流的电路(使其发光)或向可能打开CD的直流电机提供电流/ DVD /蓝光/(?)驱动器.

现在想象一个假想的1位CPU,它能够关闭电路并向蜂鸣器发送电流,发出声音.这个1位CPU有一个输入,可以有两个值:0和1.

这个简单的CPU有一个非常简单的汇编语言:ONOFF,我们有一个奇特的编程语言,它提供了一些更好的抽象:cpu.turnOn,cpu.turnOff.

我编写我的程序cpu.turnOn;编译它,组装它,它已准备好运行.当我在CPU上运行程序时,蜂鸣器打开.

在现实世界中,计算机由更复杂的系统组成.我们拥有64位CPU,具有复杂的指令集和无数的设备,而不是单个1位CPU.

为了使复杂系统能够进行交互,这些系统由抽象层组成.

最低层是电压,电路和硅,或者您可能认为的实际"物理硬件".除此之外,硬件通常是"微控制器"或专门的处理单元,其设计用于与硬件的细节交互.想象一下光盘驱动器,它的微控制器能够弹出驱动器托架,启动电机,对齐激光器,并从盘上流出数据.

微控制器运行的软件称为固件.它是一个控制硬件功能的专用操作系统,也可能包含API.在假想的1位CPU示例中,程序将是固件,并且cpu.turnOn, cpu.turnOff将是API.

鉴于计算机由许多硬件组件(图形,存储,通信,i/o)组成,计算机由许多专用固件组成.对于完成该硬件的任何有用的东西,需要另一层抽象,例如以通用方式处理键盘,或者允许鼠标,触摸板和轨迹球尽管有不同的交互,但都表现相同.这就是操作系统的用武之地.操作系统提供了一个API来管理相关设备组,并为硬件供应商提供了挂钩,以提供操作系统命令和微控制器理解的命令之间的转换.在Windows领域,这是一个driver.

操作系统和驱动程序之上的下一层抽象是应用程序,用户用来做实际工作(或玩Fortnite).这些程序是用无数的languanges,SDK和工具包编写的,这也是StackOverflow存在的原因.这些语言编译成可执行代码,操作系统加载和管理,并由计算机执行.

将所有内容与shutdown命令结合使用:命令intepreter使用管理系统电源的操作系统级API.该API向操作系统的其余部分发送通知,以处理诸如正常刷新内存缓冲区,保存应用程序状态,终止通信通道以及关闭各种硬件系统(或更可能进入低功耗模式)之类的操作.它还使用电源驱动程序(ACPI?)与计算机电源管理子系统连接.该子系统被指示关闭,该信号又向计算机电源发送信号以断开电路并且不再向大多数组件供电.


小智 11

如果您认为软件与硬件相比是一种不同的生物,那么解释不会让您满意.认为软件就像一系列电荷.您编写的所有代码都将作为电荷序列存储在RAM或磁盘上.所以你不是写文字而是电荷的顺序.您的视频卡正在用英语在显示器上绘制内容,以帮助您了解您正在键入的内容.在某种程度上,也许真的,无论你在电脑上做什么都是物理的.


Guf*_*ffa 5

好吧,关机实际上并不是物理的,计算机中的所有电路都不会完全关闭,直到你拔掉电源.

该软件使用BIOS中的APM(高级电源管理)接口来控制计算机中的电源电路.

当计算机关闭时,它仍然可以在没有物理拉动开关的情况下打开,例如通过计算机中网卡的Wake on LAN信号.

  • 电源问题只是一个例子。我认为OP想知道如何使用像“文本”这样抽象的东西来控制像电源这样的物理东西,或者弹出CD托盘...... (2认同)
  • 是的,这正是我想知道的.阿兰提到了什么 (2认同)

小智 5

软件存储在硬件中,作为硬盘驱动器或软盘上的磁畴,或作为计算机芯片中的高低电压存储。当您在键盘上键入内容时,每个字符都会转换为0和1的电气序列,然后将其作为高低压存储在称为RAM的计算机芯片中。然后将RAM中的低电压和高电压转换为硬盘驱动器或软盘上的磁畴,以供以后由磁盘磁头读回为电压,或者将高电压和低电压存储在非易失性计算机芯片中,以供以后回读。低电压和高电压表示由键盘字符产生的电0和1。