zoukankan      html  css  js  c++  java
  • I/O 端口和 I/O 内存

    每个外设都是通过读写它的寄存器来控制. 大部分时间一个设备有几个寄存器, 并且在连 续地址存取它们, 或者在内存地址空间或者在 I/O 地址空间.

    在硬件级别上, 内存区和 I/O 区域没有概念上的区别: 它们都是通过在地址总线和控制 总线上发出电信号来存取(即, 读写信号)[32]32并且读自或者写到数据总线.

    但是一些 CPU 制造商在他们的芯片上实现了一个单个地址空间, 有人认为外设不同于内 存, 因此, 应该有一个分开的地址空间. 一些处理器(最有名的是 x86 家族)有分开的读 和写电线给 I/O 端口和特殊的 CPU 指令来存取端口.

    因为外设被建立来适合一个外设总线, 并且大部分流行的 I/O 总线成型在个人计算机上, 即便那些没有单独地址空间给 I/O 端口的处理器, 也必须在存取一些特殊设备时伪装读 写端口, 常常利用外部的芯片组或者 CPU 核的额外电路. 后一个方法在用在嵌入式应用 的小处理器中常见.

    由于同样的理由, Linux 在所有它运行的计算机平台上实现了 I/O 端口的概念, 甚至在 那些 CPU 实现一个单个地址空间的平台上. 端口存取的实现有时依赖特殊的主机制造和 型号( 因为不同的型号使用不同的芯片组来映射总线传送到内存地址空间).

    即便外设总线有一个单独的地址空间给 I/O 端口, 不是所有的设备映射它们的寄存器到 I/O 端口. 虽然对于 ISA 外设板使用 I/O 端口是普遍的, 大部分 PCI 设备映射寄存器 到一个内存地址区. 这种 I/O 内存方法通常是首选的, 因为它不需要使用特殊目的处理 器指令; CPU 核存取内存更加有效, 并且编译器当存取内存时有更多自由在寄存器分配和 寻址模式的选择上.

  • 相关阅读:
    DB设计原则
    英文地址[转]
    ICollection
    雅虎优化14条
    vue过滤器
    php中echo(),print(),print_r()之间的区别
    jQ中对attr()方法的理解
    浅析call和apply的不同
    浅析call和apply
    PHP是弱类型语言,自动转换,强制转换
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11142142.html
Copyright © 2011-2022 走看看