I/O输入系统概述

由于I/O设备众多,而且每个不同的I/O设备的细节和特点是不同的,操作系统内核是设计成使用设备驱动程序模块的结构,设备驱动程序为I/O子系统提供了统一的设备接口,以及操作系统对I/O设备的支持的驱动程序大多都是要以模块的形式来进行的,因为可能我这个操作系统发布出来,又有新设备出来了,那我肯定不可能又来了修改内核,如果将其这个读驱动程序作为模块安装会更好

设备和计算机之间的通信其实是可以通过电缆甚至是空气来传递信息的,设备和计算机通信通过一个连接点(或端口),例如串行端口,如果一个或多个设备使用一组共同的线,那么这种连接称为总线

总线其实是一组线和一组严格定义的可以描述在线上传输信息的协议,为什么说还在线上传输信息的协议呢,那是因为信息是通过线上的具有一定时序的电压模式来传递的。如果设备A通过电缆连接到设备B上,设备B又通过电缆连接到设备C上,设备C通过端口连接到计算机上,这种方法就称为链环

下面就是一个典型的PC总线结构,下面这个图显示了一个PCI总线,用以连接处理器-内存子系统与快速设备,扩展总线就是去连接串行、并行端口和相对较慢的设备(比如说键盘)。下面这张图的右上角,4块磁盘一起连到和SCSI控制器相连的SCSI总线

这里写图片描述

从上面这张图当中我们可以看到有很多控制器,控制器是用于操作端口、总线或设备的一组电子器件。串行端口控制器是最简单的设备控制器,它是计算机上一块芯片或部分芯片,用来控制串行端口线上的信号

但是SCSI总线就复杂的多就是由于SCSI协议的复杂性,有一个应用程序向操作系统发出对磁盘设备的写请求。 在SCSI协议层,这个写请求被看成是特定数量的数据块以协议的形式传递到指定位置的命令。作为操作系统和存储设备之间的一个中介,SCSI 协议既不规定数据块如何组织,也不规定怎样把数据块放到磁盘上,SCSI 协议的责任,就是在确认写操作已经正确完成后向操作系统报告成功,而不管在磁盘上物理存储是如何配置以及写操作是如何执行的。

SCSI总线控制器常常实现为与计算机相连接的独立线路板或主机适配器。主机适配器就是,主机适配器是能够让系统总线与外围设备控制器进行通信的设备。这个适配器通常有处理器、微码(是在CISC结构下,运行一些功能复杂的指令时,所分解一系列相对简单的指令)和一部分私有内存,以便可以处理SCSI协议信息

CPU处理器是如何向控制器发送命令和数据以完成I/O传输?,其实就是通过控制器的有一个或者多个用于控制信号的寄存器。处理器通过读写这些寄存器的位模式来与控制器通信,这种通信的方法就是通过使用特殊的I/O指令来向指定的I/O端口地址传输一个字节或字

I/O指令会触发总线线路来选择合适设备并且将位信息传入或传出设备寄存器,以及设备寄存器也可以支持内存映射I/O,设备控制寄存器被映射到处理器的地址空间。处理器执行I/O请求是通过标准数据传输指令来完成对设备控制器的读写

设备控制器也支持内存映射I/O,这个时候设备控制寄存器的地址会被映射到处理器的当中,这样的话处理器执行I/O请求是通过标准数据传输指令来完成对设备控制器的读写

一般来说我们可以通过I/O端口地址来进行对一些控制器的基本操作,因为CPU通过端口地址来定位端口的

端口地址如下所示
这里写图片描述

I/O端口通常有4种寄存器,一个是状态寄存器、控制寄存器、数据输入寄存器与数据输出寄存器

  • 数据输入寄存器是被主机读出以获取数据
  • 数据输出寄存器是被主机写入以发送数据
  • 状态寄存器包含一些主机可读取的位(bit)。这些位指示各种状态,比如说当然任务是否完成了,数据输入寄存器中是否有数据可以读取,是否出现设备故障等
  • 控制寄存器可以被主机用来向设备发送命令或者改变设备状态,比如说一个串行端口的控制寄存器中的一个确定的位选择全工通信(又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式)或单工通信(所谓单工通信,是指消息只能单方向传输的工作方式。例如遥控、遥测,就是单工通信方式),另一个位控制启动奇偶校验检查,第三个位设置字长为7位或者为8位,其他位选择串行端口通信所支持的速度

数据寄存器的大小通常为1~4B。有的控制器有FIFO芯片,可以用来保留多个输入或输出数据,这样就可以在数据寄存器大小的基础上扩展控制器的容量,FIFO芯片可以保留少量突发数据,直到设备或主机可以接收数据

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80683892