。。截至到现在,中央处理器只和内存打交道,从内存中取一个数,或者把一个数写入内存,这都可以,但她怎样才能得到从外部设备来的数据呢?毕竟她和内存不是一伙的。千万不要说使用开关手工把她放到内存里,这太折磨人了。
为了在外部设备和计算机核心之间传送数据,需要在这两者之间连线,并构造逻辑电路。在逻辑电路里,有一些寄存器,通常称之为I/O端口,或直接称为端口。当中央处理器有话要对外部设备说时,就把她放在端口(逻辑电路的寄存器)上,由后者(逻辑电路)取走;当外部设备也有话要跟中央处理器说时,也照此办理。从形式上看,端口类似于企事业单位门口的传达室。
计算机内的所有端口都应当像内存地址一样顺序编号,以方便读写。
具体cpu怎么访问端口呢?
为cpu增加新的指令,专门用于访问io端口,比如:in ra,61
她的意思是从61号端口把数据读入RA寄存器。
个人理解:
每个外部设备都有自己的逻辑电路、端口。比如:键盘控制器、显卡、声卡等等。
而外部设备和cpu交互,都是通过端口(也是寄存器),二者之间有连线。
外部设备只管把数据放到端口上,接下来由cpu自己来拿。是cpu轮询来查看有无数据吗?
我想这样的话,cpu太忙了吧。应该是这样设计的:端口上一旦有了数据,就通知cpu来拿(通过中断,让cpu来处理这些数据)。这很合理。
我们公司在做一个智能车位锁项目,车位锁有无线模块、单片机,车位锁和网关通信,网关再和mina服务器通信,从而实现通信。
mina服务端就是一直监听(mina软件在网卡上的)端口,当网关把数据放到这个端口上,mina服务端就拿走。
声卡(对应音响设备)、显卡(显示器)。
cpu只认识二进制数字。声卡上的逻辑电路,需要把模拟信号(电压、电流模拟声音)转成二进制数字信号,再放到端口上。
同样,播放声音时,cpu把二进制放到声卡的端口上,由声卡转成模拟信号,这些模拟信号来控制音响设备。