第六章:输入输出系统
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命令
- 命令、地址译码
- 设备控制器与处理机(CPU)的接口
内存映像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进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程
主要任务是接受来自它上一层的与设备无关软件的抽象请求,并执行这个请求。
功能
-
- 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。
-
- 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
-
- 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。
-
- 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
-
- 对于设置有通道的计算机系统,驱动程序还应能够根据用户的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操作,已从对低速设备演变为对输入井或输出井中的数据存取。
- 将独占设备改造为共享设备
- 实际分给用户进程的不是打印设备,而是共享输出井中的存储区域
- 实现了虚拟设备功能
- 将独占设备变成多台独占的虚拟设备。
- 提高了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)分别指向该队列首尾缓冲
- 空白缓冲队列(emq)
- 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