首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序如何控制硬件?

程序如何控制硬件?
EN

Stack Overflow用户
提问于 2013-12-11 12:12:54
回答 1查看 1.6K关注 0票数 1

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

我可以或多或少地理解本地指令(在cpu芯片组内执行的指令)是如何工作的,比如'ADD R1,R2,R3‘。甚至cpu是如何使用数据总线和地址总线通过northbridge芯片组与ram接口的,我也很清楚。

我所奋斗的是大局。

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

这同样适用于PCI接口、AGP接口等等吗?

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

我对硬件和软件交互的理解正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 05:31:56

差不多吧。它实际上比指令更一般。

这些细节中有很多是特定于体系结构的,所以我将继续对如何做到这一点进行高层次的总体概述。

CPU可以读写RAM而没有问题,对吗?您可以发出读取和写入任何内存地址的指令。因此,硬件制造商没有尝试扩展CPU来理解所有可能的硬件接口,而是简单地将地址空间(通常是RAM所在的部分)映射到硬件上。

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

  1. 硬盘驱动器控制器的命令寄存器是地址0xF00,该地址位于RAM之外,但CPU可以访问。
  2. 将指令写入命令寄存器,指示我们要写入硬盘驱动器。
  3. 可以想象,0xF 01上有一个地址寄存器,它告诉硬盘控制器在哪里保存数据。
  4. 告诉硬盘控制器,我想写的数据在RAM中的某个地址,并启动写入顺序。

还有很多其他的方法可以想象,但重要的是,它只是使用CPU已经拥有的使用RAM的指令。

所有这些都可以由CPU完成,而无需在CPU端执行任何特殊指令,只需将其读写到地址即可。您可以想象这是扩展的,USB控制器的地址空间中有一个特殊的位置,其中包含一个USB设备列表,还有一个用于PCI设备列表的特殊位置,每个PCI设备都有几个寄存器,可以读写这些寄存器来指示他们进行操作。

从本质上说,设备驱动程序的作用是知道如何读取和写入这些特殊寄存器,设备可以接受什么样的命令等等。通常,就像许多显卡一样,这些寄存器所做的事情没有被公众记录下来,因此我们依赖于它们的驱动程序来正确地运行这些卡。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20518835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档