程序如何控制硬件?

时间:2013-12-11 12:12:54

标签: operating-system hardware

为了由cpu执行,必须将程序加载到RAM中。程序只是处理器可以理解的一系列机器指令(如x86指令集)(因为它通过逻辑门实际实现了它们的语义)。

我可以或多或少地理解本地指令(在cpu芯片组内执行的指令)如'ADD R1,R2,R3'是如何工作的。甚至cpu如何使用数据总线和地址总线通​​过北桥芯片组与ram接口对我来说已经足够清楚了。

我正在努力的是大局。

例如,如何将文件保存到硬盘中? 假设主板使用SATA接口与HDD通信。 这是否意味着这个SATA接口有一个指令集,cpu可以通过准备以正确格式写入的SATA指令来使用它?

PCI接口,AGP接口等同样适用吗?

所有的硬件通信是否基本上都是通过确定某个任务的标准接口并实现它(由创建硬件芯片组的公司)以及任何其他硬件组件可以查询的指令集来完成的?

我对硬件和软件交互的高级理解是否正确?

1 个答案:

答案 0 :(得分:1)

近。它实际上比指令更通用。

这些细节很多都是特定于架构的,所以我将坚持高级概述如何做到这一点。

CPU可以在没有问题的情况下读写RAM吗?您可以发出读写任何内存地址的指令。因此,硬件制造商不是试图扩展CPU以了解每个可能的硬件接口,而是简单地将地址空间的部分(RAM通常在哪里)映射到硬件。

例如,您想将文件保存到硬盘驱动器。这是可能发生的命令序列:

  1. 硬盘驱动器控制器的命令寄存器为地址0xF00,该地址位于RAM之外但可供CPU访问
  2. 将指令写入命令​​寄存器,指示我们要写入硬盘驱动器。
  3. 可能有一个0xF01的地址寄存器告诉硬盘控制器在哪里保存数据
  4. 告诉硬盘驱动器控制器我想要写入的数据位于RAM中的某个地址,并启动写入序列。
  5. 有许多其他方法可以想象,但需要注意的重要一点是它只是使用CPU已经拥有的指令来使用RAM。

    所有这一切都可以由CPU完成,而无需CPU侧的任何特殊指令,只需读写地址即可。您可以想象这是扩展的,USB控制器的地址空间中有一个特殊的位置,其中包含USB设备列表,PCI设备列表有一个特殊的位置,每个PCI设备有几个可以读取的寄存器,写信指示他们做事。

    本质上,设备驱动程序的作用是知道如何读取和写入这些特殊寄存器,设备可以接受哪种命令等等。通常,与许多图形卡的情况一样,这些寄存器的作用是没有向公众记录,所以我们依靠他们的司机正确运行卡。