I/O设备管理
目录
一、I/O控制器的组成
1、I/O控制器工作的过程
2、寄存器的统一编址和独立编址
二、I/O控制方式
1、程序直接控制方式:
2、 中断控制
3、DMA方式
4、通道控制方式
一、I/O控制器的组成
CPU接口 - I/O逻辑-设备接口(设备可以有多个,连接多个设备)
CPU接口:负责CPU和控制器的通信 I/O逻辑:负责识别CPU的命令,并负责对设备发出命令 设备接口:负责设备和控制器的通信
1、I/O控制器工作的过程
当CPU要对某个设备进行输出时, 首先使用地址线发送信息,指明要对哪个设备进行操作 使用控制线发送信息,指明要对设备做什么操作 再用数据总线,向控制器自带的数据寄存器输入数据 之后,I/O逻辑区就可以从数据寄存器中读取数据,将之发送到对应的设备中 同时,CPU在数据的传输过程中,还需有一些控制参数 这些参数发送给控制寄存器 同时,CPU为了及时实时掌握设备的状态,还通过状态寄存器读取各个设备的状态情况等信息 因此,各个设备还需将自己的状态不断的向状态寄存器写入,以便CPU读取
此外,由于控制器可以有多个设备接口 可是设备很多,不可能所有设备都共同使用一个控制器 因此,需要同时存在多个控制器,对不同的设备进行分别管理
有多个控制器,就有多个寄存器 这就涉及对寄存器进行编址以识别的问题 怎么编? 两种方式:内存统一编址和寄存器独立编址
2、寄存器的统一编址和独立编址
内存统一编址: 和内存一样的编址方式 例如内存的编址是从0-n个地址 设备控制器0: 寄存器0:地址为n+1 寄存器1:地址为n+2 寄存器2:地址为n+3 设备控制器1: 寄存器0:地址为n+3 寄存器1:地址为n+4 寄存器2:地址为n+5 …. 所有寄存器按统一的顺序进行编排 以此类推 这种方式的优点是:不需要单独设计专门的访问控制指令 只需要和内存访问指令一致就可以
寄存器独立编址: 设备控制器的三个寄存器: 寄存器0:0 寄存器1:1 寄存器2:2 设备控制器1的三个寄存器: 寄存器0:0 寄存器1:1 寄存器2:2 设备控制器2的三个寄存器: 寄存器0:0 寄存器1:1 寄存器2:2 每一个控制器内部独立的进行编址 如此类推 这种方式的缺点是:需要设计单独的访问控制指令 因为在访问寄存器之前, 还需要指明到底是哪一个设备控制器的设备
二、I/O控制方式
有四种方式:程序直接控制、中断驱动、DMA、通道控制
1、程序直接控制方式:
1、读/写操作
(注意,首先要清晰设备控制器的各个部件结构和对应功能) 当要读一个设备时, 第一步,CPU向控制器发出读指令,设备启动,并且将设备状态寄存器设为1(表示忙碌) 可是,外部设备的数据传输速度很慢,因此 第二步,CPU不断的对设备状态寄存器进行轮询 如果设备状态寄存器一直是1,说明设备还在忙碌,数据还没有传输完,于是CPU等待 第三步,输入设备的数据传输完毕,并将设备状态寄存器设置为0,表示传输完毕 第四步,CPU检测到设备状态为0(表明已就绪),从数据寄存器读取数据,读到CPU自己的寄存器,再送到内存
2、CPU干预频率 很频繁,因为CPU需要不断的进行轮询
3、数据传输单位一个字节
4、数据流向 读操作:I/O设备->CPU->内存 写操作:内存->CPU->I/O设备
5、优缺点 优点:简单,只需要写循环语句即可 缺点:CPU和I/O设备只能串行工作,且CPU利用率低
2、 中断控制
程序直接控制方式对于CPU利用率很低 因为CPU要一直等待设备 那可不可以不等? 可以, 这就是中断控制方式: 即不要让CPU去等设备 而是在设备比较忙的时候,去做别的事情 当设备完成时,再向CPU发出中断, 此时,CPU响应中断,再转回来处理事务 因此,CPU会在每个指令周期的末尾检查中断 (注意:每一个中断处理,只能从控制器读取一个字节的数据送到CPU寄存器,再写入内存 而后恢复中断,执行其他任务)中断处理中,仅仅读取一个字节的数据!!! 务必注意!!! 因此,如果中断太多,CPU效率也会很低
1、读写操作 和程序直接控制方式一样
2、CPU干预频率 每次I/O操作开始前,完成后都需要CPU参与等待过程中切换到其他任务
3、数据传送单位 每次读/写一个字节
4、数据流向 读操作:I/O设备->CPU->内存 写操作:内存->CPU->I/O设备
5、优缺点 优点:不需要轮询,效率更高,设备和CPU可以并行工作 缺点:每一次只能传输一个字节的数据,而且都需要CPU控制 频繁的中断处理消耗很大
3、DMA方式
中断处理克服了轮询的CPU效率低 可是每一次中断处理只能处理一个字节 效率实在是低 有没有什么新的方式,可以避免每一次CPU只能传送一个字节的数据? 可以不可以一次多传送几个数据呢? 答案是可以 这就是DMA方式,直接存储器方式 如何实现? 1、数据传送单位是”块“,即使用块设备 2、不需要CPU参与,设备和内存直通,直接抵达(用物理电线连接) 3、只有在数据传送的开始和结束时间才需要CPU干预
DMA通道模式结合了中断的优点 但CPU向设备读取数据时 过程和程序直接控制方式一样 但是,CPU不会等待,而是去执行其他任务 当设备完成数据传输,控制器向CPU发出中断,进行相关操作
DMA控制方式,单独对应一个DMA控制器 其结构如下:
其中:DR数据寄存器:暂存数据的地方MAR内存地址寄存器:输入时,表示数据存放在内存什么位置;输出时,表示数据存放在外部设备的什么位置DC数据计数器:指明需要读/写的数据字节数CR命令/控制寄存器:存放CPU发出的I/O命令,或者设备状态信息 (注意:事实上,设备和内存之间的数据传输本质上还是一个字节一个字节的进行 这整个过程,都是通过DMA控制器进行的)
1、读写操作 和中断控制方式一样
2、CPU干预频率 仅仅在数据传送的开始和结束才需要CPU干预
3、数据传输单位 一个数据块/多个数据块 (注意:如果是多个数据块,则必须要求数据块连续,连续读,连续存,即不支持离散存取)
4、数据流向(不需要经过CPU) 因为在控制器和内存之间有直接的系统总线进行物理连接 因此,数据可以直接在设备和内存之间进行传输 读:I/O设备->到内存 写:内存->I/O设备
5、优缺点
优点:数据传输以块为单位,且CPU不需介入 数据传输效率提高,CPU效率提高,CPU和I/O设备并行性提高 缺点:每一次只能读/写一个或者多个连续的数据块 也就是说,不能读/写分散的数据块,或者将数据块存放到不同的位置,只能连续 如果要实现上述的操作,则只能CPU进行多次操作
4、通道控制方式
有缺点,就会有人改进 于是,为了克服DMA的不能离散存储的问题, 就有了一个新的控制方式:通道控制方式
1、读写操作 通道本质是一个硬件,可以理解为简单版CPU(通道=丐版CPU) 通道这个硬件可以识别并且执行一系列的通道指令 也就是说,在内存中会存在一个叫做通道程序的系列指令集合(通道程序=序列指令集合) 当CPU要对某个设备进行操作时 首先向通道发出指令,说明通道程序在哪里,要对哪个设备进行操作,而后CPU执行其他任务剩下的事情交给通道来处理 此时通道已经知道通道程序在哪里,要操作哪个设备 剩下的,就是去调用通道程序即可 通道程序的信息有:读/写多少操作、读/写到哪里等信息 执行完毕通道程序后,向CPU发出中断信号 CPU介入处理,搞完撒花 注意:通道需要访问内存,因此通道和内存共享内存
2、CPU干预频率 很低,只有两个参与过程: CPU发出指令,通道执行完后CPU处理中断
3、数据传输单位 每次读/写一组数据块
4、数据流向(通道控制) 读:I/O设备->内存 写:内存->I/O设备
5、优缺点
缺点:实现复杂,需要通道硬件支持 优点:CPU、I/O设备、通道而可并行过工作,资源利用率高
一个通道可以控制多个I/O控制器 一个I/O控制器可以控制多个设备