Operating system 软件/代码实际上是如何与硬件通信的?

Operating system 软件/代码实际上是如何与硬件通信的?,operating-system,Operating System,我的问题是: 当我在Windows/Linux中按下“关机”按钮时,计算机会关机。“关机”命令实际上是如何使计算机物理关机的 我想说清楚: 当我们踢球时,球和我们的腿之间存在着物理接触,以便球移动。那么,如何实现软件和硬件之间的物理连接呢纯文本代码是如何使计算机实现其功能的?虽然答案相当复杂,并且需要了解电气系统和电路(KVL、KCL)、二进制数和布尔逻辑的基础知识,但我们可以从高层次描述该过程:编译代码(由纯文本字表示),组装并最终转换为零和一的组合,分别代表低电压和高电压 当向材料和电路施加

我的问题是:

当我在Windows/Linux中按下“关机”按钮时,计算机会关机。“关机”命令实际上是如何使计算机物理关机的

我想说清楚:


当我们踢球时,球和我们的腿之间存在着物理接触,以便球移动。那么,如何实现软件和硬件之间的物理连接呢纯文本代码是如何使计算机实现其功能的?

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

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

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

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

我写我的程序
cpu.open编译它,组装它,它就可以运行了。当我在CPU上运行程序时,蜂鸣器打开

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

为了使复杂系统能够相互作用,这些系统由抽象层组成

最底层是电压、电路和硅,或者你可能认为是实际的“物理硬件”。硬件旁边通常会有一个“微控制器”或一个专门的处理单元,用于与硬件的细节进行交互。想象一下一个光盘驱动器,它的微控制器能够弹出驱动器托架,启动电机,校准激光器,并从光盘上传输数据

微控制器运行的软件称为固件。它是一个控制硬件功能的专用操作系统,还可能包括一个API。在假想的1位CPU示例中,程序将是固件,
CPU.turn,CPU.turn
将是API

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

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


将其与
shutdown
命令放在一起:命令解释器使用管理系统电源的操作系统级API。该API向操作系统的其余部分发送通知,以处理诸如正常刷新内存缓冲区、保存应用程序状态、终止通信通道以及关闭各种硬件系统(或者更可能进入低功耗模式)等事项。它还使用电源驱动器(ACPI?)与计算机的电源管理子系统接口。该子系统被指示关闭,然后向计算机电源发送信号,断开电路,不再向大多数组件供电

PC程序和外部现实世界之间有几个接口

有些连接到CPU。例如端口和硬件中断(IRQ)。这些允许发送少量数据(通过主机程序请求)和基于硬件触发器(从低到高的离散线)调用函数(中断处理程序)

有更快的接口来传输绕过CPU的大量数据。这称为DMA(直接内存访问)。这些用于将数据传输到磁盘、网络、显示适配器等

对于端口IO(操作码输入和输出),软件是启动器。对于IRQ,硬件首先发出声音以触发软件响应


仅允许设备驱动程序执行所有这些操作。如果您尝试从应用程序执行此操作,操作系统会立即将其粉碎。应用程序通过设备驱动程序提供的API连接到这个世界。许多API都是标准化的,因此您可以更换实际设备,而无需进行不同的交互(例如打印机、磁盘、键盘、鼠标、CRROM、ATX电源开关)。

好吧,关机实际上不是物理性的,在您实际拔下电源之前,计算机中的所有电路都不会完全关闭

软件使用BIOS中的接口控制计算机中的电源电路

当计算机关闭时,它仍然可以打开,而无需进行物理操作