# 第六章：输入输出系统
## I/O系统的功能，模型和接口
### I/O系统管理的对象是I/O设备和相应的设备控制器。
### I/O系统的基本功能
* 隐藏物理设备的细节
* 与设备的无关性
* 提高处理机和I/O设备的利用率
* 对I/O设备进行控制
* 确保对设备的正确共享
* 错误处理
### I/O软件的层次结构
* 用户层I/O软件
* 设备独立性软件
* 设备驱动程序（厂家开发）
* 中断处理程序
* 硬件
### I/O系统的分层
* 中断处理程序
* 设备驱动程序
* 设备独立性软件
### I/O系统接口
* 块设备接口
    * 指以数据块为单位来组织和传送数据信息的设备
    * 典型的块设备是磁盘、光盘
    * 块设备的基本特征
        * ①传输速率较高，通常每秒钟为几兆位；
        * ②它是可寻址的，即可随机地读/写任意一块；
        * ③磁盘设备的I/O采用DMA方式。
* 流设备接口
    * 又称字符设备指以单个字符为单位来传送数据信息的设备
    * 这类设备一般用于数据的输入和输出，有交互式终端、打印机
    * 字符设备的基本特征
        * ①传输速率较低；
        * ②不可寻址，即不能指定输入时的源地址或输出时的目标地址；
        * ③字符设备的I/O常采用中断驱动方式。
* 网络通信接口
    * 提供网络接入功能，使计算机能通过网络与其他计算机进行通信或上网浏览。
## I/O设备和设备控制器
### 分类
* 使用特性分
    * 存储设备
    * I/O设备
* 传输速率分
    * 低速设备（几字节——几百字节）
        * 典型的设备有键盘、鼠标、语音的输入
    * 中速设备（数千——数万字节）
        * 典型的设备有行式打印机、激光打印机
    * 高速设备（数十万——千兆字节）
        * 典型的设备有磁带机、磁盘机、光盘机
### 设备并不是直接与CPU进行通信，而是与设备控制器通信。在设备与设备控制器之间应该有一个接口。
* 数据信号：控制器 ←  设备 ←  控制器
    * 传送数据信号，输入、输出bit
* 控制信号: 控制器  →  设备
    * 执行读、写操作的信号
* 状态信号：设备当前使用状态
### 设备控制器
* 主要功能：控制一个或多个I/O设备，以实现I/O设备和计算机之间的数据交换
* 基本功能
    * 接收和识别命令
        * 控制寄存器、命令译码器
    * 数据交换
        * 实现CPU与控制器，控制器与设备间的数据交换
    * 标识和报告设备的状态
    * 地址识别
        * 配置地址译码器，识别不同的设备
    * 数据缓冲区
    * 差错控制
* 设备控制器的组成
    * 设备控制器与处理机（CPU）的接口
        * 实现CPU与设备控制器之间的通信
    * 设备控制器与设备的接口
        * 控制器可连接多个设备
    * I/O逻辑
        * 实现对设备的控制
        * CPU利用该逻辑向控制器发送I/O命令
        * 命令、地址译码
### 内存映像I/O
* 驱动程序将抽象I/O命令转换出的一系列具体的命令，参数等数据装入设备控制器的相应寄存器，由控制器来执行这些命令，具体实施对I/O设备的操作
### I/O通道
* 目的：建立独立的I/O操作(组织, 管理和结束)，使由CPU处理的I/O工作转由通道完成（解放CPU，实现并行）

* 什么是I/O通道？
    *  是一种特殊的处理机，具有通过执行通道程序完成I/O操作的指令
    *  特点：指令单一(局限于与I/O操作相关的指令)，与CPU共享内存
* 基本过程：
    * CPU向通道发出I/O指令->通道接收指令->从内存取出通道程序处理I/O->向CPU发出中断
* 通道类型
    * 字节多路通道
        * 低中速连接子通道时间片轮转方式共享主通道
        * 字节多路通道不适于连接高速设备，这推动了按数组方式进行数据传送的数组选择通道的形成。
    * 数组选择通道
        * 这种通道可以连接多台高速设备，但只含有一个分配型子通道，在一段时间内只能执行一道通道程序， 控制一台设备进行数据传送， 直至该设备传送完毕释放该通道。这种通道的利用率很低。
    * 数组多路通道
        * 含有多个非分配型子通道，前两种通道的组合，通道利用率较好
* 瓶颈问题
    * 原因;通道不足
    * 解决办法：增加设备到主机间的通路，而不增加通道（结果类似RS触发器）
## 中断机构和中断处理程序
### 中断
* 分类
    * 中断（外部触发）
        * 对外部I/O设备发出的中断信号的响应
    * 陷入（内部原因：除0）
        * 由CPU内部事件引起的中断
* 中断向量表（类比51单片机）
    * 中断程序的入口地址表
* 中断优先级
    * 对紧急程度不同的中断处理方式
* 对多中断源的处理方式
    * 屏蔽中断
    * 嵌套中断
### 中断处理程序
* 测定是否有未响应的中断信号
* 保护被中断进程的CPU环境
* 转入相应的设备处理程序
* 中断处理
* 恢复CPU 的现场并退出中断
## 设备驱动程序
### 是I/O进程与设备控制器之间的通信程序，又由于它常以进程的形式存在，故以后就简称为设备驱动进程
### 主要任务是接受来自它上一层的与设备无关软件的抽象请求，并执行这个请求。
### 功能
* 1) 接收由I/O进程发来的命令和参数， 并将命令中的抽象要求转换为具体要求。例如，将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。
* 2) 检查用户I/O请求的合法性，了解I/O设备的状态，传递有关参数，设置设备的工作方式。 
* 3) 发出I/O命令，如果设备空闲，便立即启动I/O设备去完成指定的I/O操作；如果设备处于忙碌状态，则将请求者的请求块挂在设备队列上等待。
* 4) 及时响应由控制器或通道发来的中断请求，并根据其中断类型调用相应的中断处理程序进行处理。
* 5) 对于设置有通道的计算机系统，驱动程序还应能够根据用户的I/O请求，自动地构成通道程序。 
### 设备驱动程序的处理过程
* 将用户和上层软件对设备控制的抽象要求转换成对设备的具体要求，如对抽象要求的盘块号转换为磁盘的盘面、磁道及扇区。
* 检查I/O请求的合理性。
* 读出和检查设备的状态，确保设备处于就绪态。
* 传送必要的参数，如传送的字节数，数据在主存的首址等。
* 工作方式的设置。
* 启动I/O设备，并检查启动是否成功，如成功则将控制返回给I/O控制系统，在I/O设备忙于传送数据时，该用户进程把自己阻塞，直至中断到来才将它唤醒，而CPU可干别的事。
### 对I/O设备的控制方式
* I/O控制的宗旨
    * 减少CPU对I/O控制的干预
    * 充分利用CPU完成数据处理工作
* I/O 控制方式
    * 轮询的可编程I/O方式
    * 中断驱动I/O方式
    * DMA控制方式
    * I/O通道控制方式
### DMA控制器组成
* 主机与DMA控制器的接口
* DMA控制器与块设备的接口
* I/O控制逻辑
## 与设备无关的I/O软件
### 基本概念
* 含义： 应用程序独立于具体使用的物理设备。
* 驱动程序是一个与硬件(或设备)紧密相关的软件。为实现设备独立性，须在驱动程序上设置一层软件，称为设备独立性软件。
* 设备独立性(Device Independence)的优点
    * 以物理设备名使用设备
    * 引入了逻辑设备名
    * 逻辑设备名称到物理设备名称的转换（易于实现I/O重定向）
### 与设备无关的软件
* 设备驱动程序的统一接口
* 缓存管理
* 差错控制
* 对独立设备的分配与回收
* 独立于设备的逻辑数据块
### 设备分配中的数据结构
* 设备控制表DCT
* 控制器控制表COCT
* 通道控制表CHCT
* 显然，在有通道的系统中，一个进程只有获得了通道，控制器和所需设备三者之后，才具备了进行I/O操作的物理条件
* 系统设备表SDT
* 逻辑设备表LUT
* 分配的流程，从资源多的到资源紧张的:LUT->SDT->DCT->COCT->CHCT
* 在申请设备的过程中，根据用户请求的I/O设备的逻辑名，查找逻辑设备和物理设备的映射表；以物理设备为索引，查找SDT，找到该设备所连接的DCT；继续查找与该设备连接的COCT和CHCT，就找到了一条通路。
## 用户层的I/O软件
### 系统调用与库函数
* OS向用户提供的所有功能，用户进程都必须通过系统调用来获取
* 在C语言以及UNIX系统中，系统调用（如read）与各系统调用所使用的库函数（如read）之间几乎是一一对应的。而微软的叫Win32API
### 假脱机系统（spooling）
* spooling技术是对脱机输入/输出系统的模拟
* 主要组成
    * 输入/输出井
    * 输入/输出缓冲区
    * 输入/输出进程
    * 井管理程序
* 特点（体现操作系统的虚拟性）
    * 提高了I/O的速度
        * 对数据所进行的I/O操作，已从对低速设备演变为对输入井或输出井中的数据存取。
    * 将独占设备改造为共享设备
        * 实际分给用户进程的不是打印设备，而是共享输出井中的存储区域 
    * 实现了虚拟设备功能
        * 将独占设备变成多台独占的虚拟设备。
## 缓冲区管理
### 缓冲的引入（原因）
* 缓和CPU与I/O设备间速度不匹配的矛盾
* 减少对CPU的中断频率，放宽对CPU中断响应时间的限制
* 提高CPU和I/O设备之间的并行性
* 解决数据粒度不匹配的问题
### 单缓冲区
* 即在CPU计算的时候，将数据数据输入到缓冲区(大小取决与T和C的大小)
### 双缓冲区
* 即允许CPU连续工作（T不断）
### 环形缓冲区（专为生产者和消费者打造）
* 组成
    * 多个缓冲区
    * 多个指针
* 使用
    * Getbuf过程
    * Releasebuf过程
* 同步问题
### 缓冲池(理解为更大的缓冲区)
* 组成
    * 空白缓冲队列（emq）
        * 由空缓冲区链接而成F(emq)，L(emq)分别指向该队列首尾缓冲区
    * 输入队列（inq）
        * 由装满输入数据的缓冲区链接而成F(inq)，L(inq)分别指向该队列首尾缓冲区
    * 输出队列（outq）
        * 由装满输出数据的缓冲区链接而成F(outq)， L(outq)分别指向该队列首尾缓冲
* Getbuf和Putbuf过程
    * 收容：缓冲池接收外界数据
    * 提取：外界从缓冲池获得数据
* 缓冲区工作方式（从缓冲区的角度来看）
    * 收容输入
    * 提取输入
    * 收容输出
    * 提取输出
## 磁盘存储器的性能和调度
### 数据的组织和格式
### 磁盘的类型
* 固定头磁盘（贵）
* 移动头磁盘
### 磁盘访问的时间（关键）
* 寻道时间Ts=m*n+s
* 旋转延迟时间Tr
* 传输时间Tt=b/rN
* 总时间Ta=Ts+1/2r+b/rN
### 磁盘的调度算法（掌握图表）
* 先来先服务（FCFS）
    * 优点：公平，简单
    * 缺点：可能导致某些进程的请求长期得不到满足
* 最短寻道时间优先（SSTF）
    * 说明：要求访问的磁道和当前磁头所在的磁道距离最近，以使每次的寻道时间最短
* 扫描算法（SCAN）
    * 扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离，更优先考虑的是磁道当前的移动方向
    * 联想电梯的运行
    * 可防止低优先级进程出现“饥饿”的现象
* 循环扫描算法（CSCAN）
    * 算法规定磁头单向移动，例如，只是自里向外移动，当磁头移到最外的磁道并访问后，磁头立即返回到最里的欲访问磁道，亦即将最小磁道号紧接着最大磁道号构成循环，进行循环扫描
* NStepScan算法
    * N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列，磁盘调度将按FCFS算法依次这些子队列。
* FSCAN算法
    * 是Nstepscan算法的简化，将磁盘请求队列分成两个子队列

*XMind: ZEN - Trial Version*