1. I/O设备分类与组成
I/O设备的分类:
-
按使用特性:人机交互外部设备(鼠标,键盘;数据传输慢)
存储设备(U盘;数据传输快)
网络通信设备(路由器)
-
按传输速率:低速设备(鼠标键盘)
中速设备(激光打印机)
高速设备(U盘)
-
按信息交换的单位:块设备(可寻址)
字符设备(传输满,不可寻址,常采用中断驱动)
I/O设备硬件的组成:
- 机械部件
- 电子部件(I/O控制器):一块插入主板扩充槽的印刷电路板,用来控制机械部件
2. I/O控制器
2.1 I/O控制器概述
功能:
- 接受和识别CPU发来的命令(控制寄存器:存放命令和参数)
- 向CPU报告设备状态(状态寄存器)
- 数据交换(数据寄存器)
- 地址识别(为了区分设备控制器中的各个寄存器)
I/O控制器组成:
-
CPU与控制器的接口—I/O逻辑—控制器与设备的接口
-
一个I/O控制器可能会有多个设备
-
数据寄存器、状态寄存器、控制寄存器也可能有多个,且这些寄存器都要编址,占用内存地址的一部分称为内存映像I/O;采用I/O专用地址称为寄存器独立编址
内存映像I/O:优点—可以采用堆内存进行操做的指令来对控制器进行操作
寄存器独立编址:缺点—需要专门的指令来实现对控制器的操作,不仅需要指明寄存器地址,还要指明控制器的编号
2.2I/O控制方式
-
程序直接控制方式:轮询
- CPU干预程度:等待I/O设备完成的过程中CPU需要不断轮询检查
- 数据传送的单位:一个字
- 数据流向:数据输入:I/O设备—>CPU—>内存
- 优点:是实现简单,就需要循环检查的一系列指令
- 缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于忙等状态
-
中断驱动方式:引入中断机制,将等待I/O进程阻塞,CPU先去执行别的进程,处理中断的过程中CPU读到一个字,接着恢复等待I/O的进程的运行环境,然后继续执行
- CPU会在每个指令周期的末尾检查中断
- 中断需要保存、恢复进程环境,要一定的开销,因此不宜频繁中断
- CPU干预程度:干预减少,I/O开始前和I/O结束后才需要CPU干预
- 数据传送的单位:一个字
- 数据流向:数据输入:I/O设备—>CPU—>内存
- 优点:CPU和I/O可并行工作
- 缺点:频繁中断降低系统性能,消耗较多CPU时间
-
DMA方式(直接存储器存取)
-
CPU干预程度:干预再次减少,仅在传送数据块开始和结束时才需要CPU干预
-
数据传送的单位:一个块、多个连续块
-
数据流向:数据输入:I/O设备—>内存,不需要CPU
-
-
通道控制方式:
-
通道是一种硬件,”弱鸡版的CPU“
-
CPU干预程度:CPU给通道指示,通道就去执行相应程序,只有读写完成后发出中断,才需要CPU干预
-
数据传送的单位:一组数据块
-
数据流向:数据输入:I/O设备—>内存,不需要CPU
-
优点:CPU、通道、I/O设备并行,资源利用率高
-
缺点:需要通道这个专门硬件支持
-
3. I/O软件层次结构
3.1层次
-
用户层软件:实现用户交互性接口,用户直接使用该层提供的库函数;将用户请求翻译为格式化的I/O请求,通过”系统调用“请求操作系统完成内核服务
-
设备独立性软件(设备无关软件):与设备的硬件特性无关的功能
- 逻辑设备表LUT:来确定逻辑设备对应的物理设备和设备驱动程序
- 为每个用户都设置一个LUT
-
设备驱动程序:主要负责对硬件的具体控制,将上一层的一系列命令read/write转化为特定设备能听得懂的。不同的I/O设备有不同的硬件特性,只有厂家才知道,因此需要使用厂家提供的相应的驱动程序,见擦汗设备寄存器、状态,与硬件打交道。
-
中断处理程序:进行中断处理,与硬件打交道
3.2实现的功能
3.2.1假脱机技术
3.2.2设备的分配与回收
设备分配时应考虑的因素:
- 设备固有属性:独占设备、共享设备、虚拟设备
- 设备分配算法
- 设备分配中的安全性
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
动态分配:进程运行过程中动态申请资源
设备分配中的数据结构:
-
一个通道可以控制多个设备控制器,每个设备控制器可控制多个设备
-
3.2.3缓冲区管理
缓冲区:存储区域,可以由专门的硬件寄存器组成,也可以用内存作为缓冲区(使用较多)
缓冲池:由系统中公用的缓冲区组成
-
单缓冲:在内存中为其分配一个缓冲区,一个缓冲区的大小就是一个块。
-
当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以在缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出.
-
初始状态:工作区满,缓冲区空,处理一块数据的平均用时:
-
T<C:M+C
-
T>C:M+T
-
-
双缓冲:在内存中为其分配两个缓冲区
-
工作区空,一个缓冲区满,另一个缓冲区空,处理一块数据的平均用时:
-
T>C+M:T
-
T<C+M:C+M
-
-
循环缓冲区: