外设IO原理


外设一般是指除了CPU、内存之前的其他接入到计算机的设备,比如硬盘、光驱、鼠标、键盘、打印机等。一般软件编程领域的同学关心的I/O,是I/O硬件提供给软件的接口,如硬件能够接收的命令、它能够完成的功能以及它能够报告的错误。

IO设备分类

    I/O设备大概分为两种:块设备和字符设备。
    块设备:信息存储在固定大小的块中,传输以一个或多个完整(连续的)块为单位。块设备特征是每个块都可以独立于其他块进行读写。其中硬盘、CD-ROM和USB是最常见的块设备。
    字符设备:以字符为单位发送或者接收一个字符流,而不考虑任何块结构。字符设备不可寻址,没有寻道操作。打印机、网络接口、鼠标以及大多数与磁盘不同的设备都可以看作是字符设备。
    问题:这种分类并不完美。如时钟既不是块设备也不是字符设备。内存映射的显示器也不适用于这一分类。

IO设备核心结构

    I/O设备一般是由机械部分和电子部分构成。

  • 控制器

    电子部分被称为设备控制器或者适配器。对于个人设备而言,一般是主板上的芯片或者插入PCI扩展槽中的印刷电路板。控制器通常有一个插口,通往设备的电缆可以插到这个插口中,很多控制器可以控制2、4甚至8个相同设备。会有各种适合这个接口标准的控制器或设备,如IDE、SATA、SCSI或USB等接口的磁盘驱动器。

  • 控制器和设备之间的交互

    控制器和设备之间一般通过串行的位流进行数据传输,控制器负责把串行的位流转换为字节块,并进行必要的错误矫正。字节块一般存储在控制器内部的缓冲区,在这里位流按位组装,校验证明无错后再复制到主存中。

  • 控制器和cpu的通讯

    控制器存在几个寄存器与cpu进行通讯,这些寄存器被称为控制寄存器。通过控制寄存器,操作系统可以命令设备发送数据、接受数据、开启或者关闭,亦或是执行某些操作,也可以了解设备状态,如是否准备好接受一个新的命令等。
    除了控制寄存器,许多设备还有数据缓冲区,操作系统可以往数据缓冲区读入或者取出数据。CPU与I/O设备的控制寄存器和数据缓冲区的通讯存在三种方法:

  1. 为控制寄存器分配一个端口号,所有I/O端口形成I/O端口空间。操作系统可以(而普通用户程序不可以)使用一条特殊的I/O汇编指令访问控制寄存器,将端口中内容存入到cpu的寄存器中,或者将cpu寄存器的内容写出到端口中。在这一方案中,内存地址空间和I/O地址空间是不同的。
  2. 将控制寄存器映射到内存空间中。每个控制寄存器被分配唯一的内存地址,且不会有内存被分配这一地址,通常控制寄存器的地址位于地址空间的顶端。这种方法叫做内存映射I/O。这一方案的好处是可以把普通内存的访问指令用作控制寄存器地址的访问指令,而不需要区分两者。
  3. 第三种方案其实是种混合方案,数据缓冲区使用内存映射,控制寄存器使用单独的I/O端口。

对于方案1:cpu如果想要读入一个字,首先需要将地址放到总线的地址线上,总线的一条控制线上置起一个READ信号,还需要一个信号线表明是I/O空间还是内存空间,这样I/O空间和内存空间可以区分开来响应请求。

对于方案2:不需要信号线表明I/O还是内存空间,因为内存模块和I/O模块会将总线上的请求地址和自己的服务范围地址作比较,来确定是内存进行响应还是I/O进行响应,由于不存在地址既分给了I/O又分给了内存,所以不存在歧义和冲突。

对于如何存取I/O数据的优化方案:直接存储器存储(DMA):
使用DMA控制器,就不需要CPU参与数据的传输工作,直接使用DMA将缓冲区数据读取到内存中去。这样只需要在处理完成之后,发送中断信号给cpu即可。数据传输准备工作交给DMA完成,可以极大的节省CPU的计算资源。

本系列文章:
    计算机底层架构(偏硬件)综述
    计算机处理器(CPU)基础
         汇编语言基础–机器级数据存储
         汇编语言基础–汇编操作指令概述
     计算机多级存储模型
     外设IO原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章