RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 940104
Accepted
Alleksh _
Alleksh _
Asked:2020-02-03 15:53:35 +0000 UTC2020-02-03 15:53:35 +0000 UTC 2020-02-03 15:53:35 +0000 UTC

处理器如何与外围设备一起工作?

  • 772

我正在寻找有关处理器如何与硬盘驱动器、网卡一起工作、如何将数据加载到内存并发送的信息。
请推荐一本书或简要说明。

книги
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Arhadthedev
    2020-02-03T18:10:51Z2020-02-03T18:10:51Z

    处理器不直接与外围设备一起工作。例如,根据 Intel Core i7 的规范(第 37-51 页),它与外界通信的唯一总线是三组引脚:两组用于 RAM(DDR1_*、DDR2_*)和一组用于QPI(QPI_*) .

    也就是说,处理器有两个抽象——“RAM”(用引号括起来,因为实际上它只是一个可以与任何东西相关联的地址空间,而不仅仅是 RAM)和一个用于双向数据包传输的通道(它对程序员只为那些中断通过它而所谓的I / O端口通过它工作的人)。

    所有三个总线都进入芯片组。然而:

    • 对于前两个,芯片组的那部分(以前称为“北桥”)可以工作。它处理读取和写入“RAM”的处理器请求,根据分配的物理地址将它们重定向到 RAM 芯片或南桥。此外,此分配可以根据 BIOS 或南桥的请求动态更改。

    • “南桥”从第三个开始工作。是他与外设打交道,了解IDE/SATA/PS2等接口。好吧,或者知道相应的微控制器连接到芯片组的哪条腿。它的任务是将来自硬件总线的电信号转换为处理器 QPI 中断的语言,以及处理来自“北桥”的请求以使用保留的内存区域,将它们重定向到适当的设备。

    特定设备的工作——它将在哪里使用中断,以及它将缓冲区映射到“RAM”的位置——由其制造商决定。这就是为什么需要驱动程序将特定设备与处理器通信的这种独特方式组合转换为其他程序可用的标准操作系统抽象(“硬盘”、“网卡”等)。

    • 6
  2. Best Answer
    Pavel Gridin
    2020-02-03T16:49:38Z2020-02-03T16:49:38Z

    在一般情况下,外围设备被设计为一小块内存,将命令和参数写入特定地址,从特定地址读取有关您正在使用设备的状态的信息。碰巧有时候这块内存区域是在所谓的分配的。I/O 端口的话,读/写都是通过特殊的方式进行的。命令,但这不会改变一般逻辑。

    对于与特定设备的交互,您需要阅读您感兴趣的控制器的描述,通常是某种微电路。

    我以非常简单的方式描述了一切,为了研究这些东西,您必须首先阅读硬件中断及其处理以及直接访问所谓的内存。DMA。

    相关链接: I/O 端口 总线 中断 DMA

    • 4
  3. Александр Привалов
    2020-07-19T20:15:36Z2020-07-19T20:15:36Z

    除了前面的回答:处理器可以直接和外设一起工作,唯一的问题是它是如何实现的。无论如何,如果是x86或ARM处理器,它有这样的IN和OUT指令,只是为了工作而设计的与外设。根据外设,有总线控制器,或其他一些控制器(例如北桥)处理来自 CPU 的命令。处理器接收 OUT 端口,例如 AL 指令,并设置端口端口总线上的地址,并在端口所在的地址区拉出某个负责外设的支路,总线控制器分别收到该信号后,将相应的外设连接到总线上。如果省略细节,那么对于 99% 的架构来说,过程完全相同。这就是隔离 I/O 的实现方式。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5