首页 > 编程知识 正文

输入输出设备有哪些,无法找到音频输入输出设备

时间:2023-05-03 14:25:26 阅读:233626 作者:2040

文章目录 接口和设备:经典的适配器模式CPU是如何控制IO设备的信号和地址:发挥总线的价值内存映射IO(MMIO)端口映射IO(Port-Mapped IO)Command模式 总结

接口和设备:经典的适配器模式

大部分的输入和输出设备都有两个组成部分:第一个是接口,第二个是实际的IO设备。

我们的硬件设备并不是直接接入到总线上和CPU通信的,而是通过接口,用接口连接到总线上,再通过总线和CPU通信。

CPU是如何控制IO设备的


以打印机为例,分析CPU如何控制IO设备

数据寄存器(Data Register):CPU向IO设备写入需要传输的数据,比如要打印”wangkai“,我们先要发送一个”w“给到对应的IO设备命令寄存器(Command Register ): CPU发送一个命令,告诉打印机,要进行打印工作,打印机里的控制电路会做两件事情 设置我们状态寄存器里的状态,设置为not-ready。实际操作打印机进行打印。 状态寄存器(Status Register):not-ready告诉CPU,设备已经在工作了,CPU再发送命令来是没有用的。ready状态告诉CPU可以发送下一个字符和命令

实际情况下,打印机里还有数据缓冲区,CPU也不是一个字符一个字符交给打印机去打印的,而是一次性将文档传输到打印机的内存或者数据缓冲区里一起打印。

信号和地址:发挥总线的价值

CPU和IO设备的通信,一样是通过CPU支持的机器指令来执行的。

内存映射IO(MMIO)

为了能让CPU尽可能的简单,计算机把IO设备的各个寄存器、以及IO设备内部的内存地址,都映射到主内存地址空间来。

主内存的地址空间,会给不同的IO设备预留一段一段的内存地址。

CPU要和这些IO设备进行通信的时候,就往这些地址发送数据。

IO设备会监控地址线,在CPU往自己地址发送数据的时候,把对应的数据先里面传输过来的数据,接入到对应的设备里面的寄存器和内存里面来。

CPU无论是向IO设备发送命令、查询状态、传输数据都是以这样的方式,这种方式叫做内存映射IO(Memory-Mapped I/O,简称 MMIO)

端口映射IO(Port-Mapped IO)

Intel x86架构的计算机可以设计专门和IO设备通信的指令,in和out指令

Intel 的CPU虽然支持MMIO,它还可以通过特定的指令来支持端口映射IO(Port-Mapped I/O,简称 PMIO)或者也可以叫独立输入输出(Isolated I/O)

PMIO访问的设备地址是一个专门的端口,并不是在内存地址空间里的,这个端口并不是一个硬件上的插口,而是和CPU通信的一个抽象概念。

Command模式 无论是PMIO还是MMIO,CPU都会传送一条二进制的数据,给到IO设备对应的地址。设备自己本身的接口电路,再去解码这数据。解码之后的数据,会变成设备支持的一条指令,再去通过控制电路去操作实际的硬件设备。对于CPU来说,他不需要关心设备本身能支持哪些操作,只是在总线上传输一条条数据就好了。

在总线上传输的是一个个数据对象,接收这些对应的设备,根据具体的对象内存,进行实际的解码和命令执行。

总结

CPU并不是发送一个特定的操作指令来操作不同的IO设备。解决CPU和IO设备之间的通信方式如下:

IO设备方向

IO设备被拆分为能和CPU通信的接口电路、实际的IO设备本身。接口电路里有状态寄存器、命令寄存器、数据寄存器、数据缓冲区、设备内存等。接口电路通过总线和CPU通信,接收来自CPU的指令和数据。接口电路中的控制电路,再解码收到的指令,实际去操作对应的硬件设备。

CPU方向

对于CPU来说,看到的不是特定的设备,而是一个个内存地址或者端口地址。CPU只是向这些地址传输数据或者读取数据需要的指令和操作内存地址的指令本质上没有什么差别。通过软件层面对于传输的命令数据的定义,而不是提供特殊的新的指令,来实际操作对应的IO硬件。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。