linux设备驱动之I/O通道解析


I/O控制方式主要有程序查询方式、中断方式、DMA方式、IO通道方式

1、程序查询方式

  程序查询方式也称为程序轮询方式,该方式采用用户程序直接控制主机与外部设备之间输入/输出操作。CPU必须不停地循环测试I/O设备的状态端口,当发现设备处于准备好(Ready)状态时,CPU就可以与I/O设备进行数据存取操作。这种方式下的CPU与I/O设备是串行工作的,输入/输出一般以字节或字为单位进行。这个方式频繁地测试I/O设备,I/O设备的速度相对来说又很慢,极大地降低了CPU的处理效率,并且仅仅依靠测试设备状态位来进行数据传送,不能及时发现传输中的硬件错误。但是这种方式的过程很简单,易理解,并且不需要额外硬件。

2、中断方式

  当I/O设备结束(完成、特殊或异常)时,就会向CPU发出中断请求信号,CPU收到信号就可以采取相应措施。当某个进程要启动某个设备时,CPU就向相应的设备控制器发出一条设备I/O启动指令,然后CPU又返回做原来的工作。CPU与I/O设备可以并行工作,与程序查询方式相比,大大提高了CPU的利用率。但是在中断方式下,同程序查询方式一样,也是以字节或字为单位进行。但是该方法大大降低了CPU的效率,因为当中断发生的非常频繁的时候,系统需要进行频繁的中断源识别、保护现场、中断处理、恢复现场。这种方法对于以“块”为存取单位的块设备,效率是低下的。

3、DMA(直接内存存取)方式

  DMA方式也称为直接主存存取方式,其思想是:允许主存储器和I/O设备之间通过“DMA控制器(DMAC)”直接进行批量数据交换,除了在数据传输开始和结束时,整个过程无须CPU的干预。每传输一个“块”数据只需要占用一个主存周期。

  DMA方式下,一个完整的数据传输过程:

  1)DMA初始化

  当进程需要I/O设备进行数据输入输出时,CPU对DMA控制器初始化,并向I/O端口发出操作命令,提供准备传输的数据起始地址,需要传送的数据长度等信息送入到DMA控制器中的主存地址寄存器和传送字节计数器中。

  2)DMA传输

  DMA控制器获得总线控制权后,进行输出读写命令,直接控制主存与I/O设备之间的传输。在DMA控制器的控制下,数据传输过程中不需要CPU的参与。

  3)DMA结束

  当完成本次数据传输后,DMA控制器释放总线控制权,并向I/O设备端口发出结束信号。

4、I/O通道控制方式

  通道(Channel)也称为外围设备处理器、输入输出处理机,是相对于CPU而言的。是一个处理器。也能执行指令和由指令的程序,只不过通道执行的指令是与外部设备相关的指令。是一种实现主存与I/O设备进行直接数据交换的控制方式,与DMA控制方式相比,通道所需要的CPU控制更少,一个通道可以控制多个设备,并且能够一次进行多个不连续的数据块的存取交换,从而大大提高了计算机系统效率

  通道的类型:  1)字节多路通道  2)数组选择通道 3)数组多路通道


下面我们主要介绍I/O通道控制方式:

 通道实际上是一种特殊的处理机(处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件)。它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面:一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与I/O操作有关的指令;再就是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。

1、I/O通道设备的引入(I/O Channel)

---- 在CPU与I/O设备之间增加了设备控制器后,已能大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。

 ( 设备控制器:设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和
计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,
以使处理机从繁杂的设备控制事务中解脱出来

为此,在CPU和设备控制器之间又增设了通道。其主要目的是为了建立独立的I/O操作,不仅使数据的传送能独立于CPU,而且也希望有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理。

---- 或者说其目的是:使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来。在设置了通道后,CPU只需向通道发送一条I/O指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发中断信号。

---- 实际上,I/O通道是一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面:

1)其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令主要局限于与I/O操作有关的指令。

2)通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。


2、通道类型

---- 通道是用于控制外围设备(包括字符设备块设备)的。由于外围设备的类型较多,且其传输速率相差甚大,因而使通道具有多种类型。

根据信息交换方式的不同,可把通道分成以下三种类型:

1)字节多路通道(Byte Multiplexor Channel)

这是一种按字节交叉方式工作的通道。它通常都含有许多非分配型子通道,其数量可从几十到数百个,每一个子通道连接一台I/O设备,并控制该设备的I/O操作。这些子通道按时间片轮转方式共享主通道。当第一个子通道控制其I/O设备完成一个字节的交换后,便立即腾出主通道,让给第二个子通道使用;当第二个子通道也完成一个字节的交换后,同样也把主通道让给第三个子通道,依此类推。

-- 当所有子通道轮转一周后,重又返回来由第一个子通道去使用字节多路主通道。这样,只要字节多路通道扫描每个子通道的速率足够快,而连接到子通道上的设备的速率不是太高时,便不致丢失信息。

2)数组选择通道(Block Selector Channel)

字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。这种通道虽然可以连接多台高速设备,但由于它只含有一个分配型子通道,在一段时间内只能执行一道通道程序,控制一台设备进行数据传送,致使当某台设备占用了该通道后,便一直由它独占,即使是它无数据传送,通道被闲置,也不允许其他设备使用该通道,直至该设备传送完毕释放该通道。这种通道的利用率很低。

3)数组多路通道(Block Multiplexor Channel)

---- 数组选择通道虽有很高的传输速率,但它却每次只允许一个设备传输数据。数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。它含有多个非分配型子通道,因而这种通道既具有很高的数据传输速率,又能获得令人满意的通道利用率。因此该通道被广泛的用于连接多台高、中速的外围设备,数据传送是按数组方式进行的。







  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux IO数据通道: 1.虚拟文件系统层:屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一的接口。因为有了这个层次,所以可以把设备抽象成文件,使得操作设备就像操作文件一样简单。 2.具体的文件系统层:不同的文件系统(例如 ext2 和 NTFS)具体的操作过程也是不同的。每种文件系统定义了自己的操作集合。 3.引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。当数据的请求到达时,如果在 cache 中存在该数据且是最新的,则直接将数据传递给用户程序,免除了对底层磁盘的操作,提高了性能。 4.通用块层:接收上层发出的磁盘请求,并最终发出 IO 请求。该层隐藏了底层硬件块设备的特性,为块设备提供了一个通用的抽象视图。 5. IO 调度层:接收通用块层发出的 IO 请求,缓存请求并试图合并相邻的请求(如果这两个请求的数据在磁盘上是相邻的)。并根据设置好的调度算法,回调驱动层提供的请求处理函数,以处理具体的 IO 请求。 6.驱动层:驱动程序对应具体的物理块设备,它从上层中取出 IO 请求,并根据该 IO 请求中指定的信息,通过向具体块设备设备控制器发送命令的方式,来操纵设备传输数据。 7.设备层是具体的物理设备。定义了操作具体设备的规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值