什么是IO?
IO是输入输出的意思,也就是Input和Output,这不是重点,重点是IO是相对谁,在我们编写代码的时候也有I/O的概念。以Java为例,InputStream一般都伴随read方法,OutputStream一般对应write方法,也就是说,从哪读,写到哪去?所有的IO都是相对于内存,严格来说是内存的缓冲区。所有的程序都需要加载到内存中才能使用,而普通程序(除操作系统外)都无法直接访问硬件(外设),所有的 外设也没法直接访问用户空间中的用户程序,对于一个普通程序的一次普通IO来说,所有的数据都是先加载到内核空间的缓冲区,然后再被copy到用户空间的缓冲区,我们去read这个缓冲区。
IO接口:IO设备的代言人
大部分的输入输出设备,都有两个组成部分。第一个是它的接口,第二个才是实际的 I/O 设备。我们的硬件设备并不是直接接入到总线上和 CPU 通信的,而是通过接口,用接口连接到总线上,再通过总线和 CPU 通信。
而IO接口标识了设备状态,设立了缓冲区,标识了设备ID,完成了地址转换,甚至可以分析指令。也就是说真实的IO设备根本不会和总线直接交互。
CPU 是如何控制 I/O 设备的?
CPU不会直接和I/O设备交互,所有的操作都要通过接口,那么这就牵扯出CPU是如何控制接口的?
程序查询方式:由CPU通过程序不断查询I/O设备是否已经做好准备,从而控制I/O设备与主机交换信息。
CPU在和接口交互之前