输入输出系统
I/O系统的功能、模型和接口
-
功能
-
隐藏物理设备的细节:仅向上层进程提供少量的、抽象的读/写命令
-
与设备无关性:用户不仅可以使用抽象的I/O命令,还可使用抽象的逻辑设备名来使用设备
-
提高处理机和I/O设备的利用率:尽可能让处理机和I/O设备并行操作
-
对I/O设备进行控制
-
采用轮询的可编程I/O方式
-
采用中断的可编程I/O方式
-
直接存储器访问方式
-
I/O通道方式
-
-
确保对设备的正确共享
-
独占设备:互斥使用,如打印机,磁盘
-
共享设备:如磁盘
-
-
错误处理
-
临时性错误:重试操作纠正
-
持久性错误:向上层汇报
-
-
I/O系统的层次结构和模型
-
I/O软件的层级结构
-
I/O系统的上下接口:
-
I/O系统接口
-
RW/HW(软件/硬件)接口
-
-
I/O系统的分层
-
中断处理程序
-
设备驱动程序
-
设备独立性软件
-
I/O系统接口
-
块设备接口
-
块设备:如磁盘,光盘存储器
-
数据的存取和传输以数据块为单位
-
传输效率较高
-
可寻址
-
-
隐藏了磁盘的二维结构,改变为一种按扇区编号的线性序列
-
将抽象命令映射为低层操作
-
-
流设备接口(通常为独占设备,用互斥方式实现共享)
-
字符设备:如键盘,打印机
-
数据存取和传输以字符为单位
-
传输效率低
-
不可寻址
-
-
get/put操作:建立字符缓冲区,顺序存取
-
in-control指令:统一的方式处理有差异的不同设备
-
-
网络通信接口
I/O设备和设备控制器
-
I/O设备类型:
-
存储设备,I/O设备
-
低速/中速/高速设备
-
-
设备与控制器之间的接口
-
数据信号线
-
控制信号线
-
状态信号线
-
设备控制器
-
基本功能
-
接受和识别命令:控制寄存器,用来存放接受CPU传来的命令和参数,并进行译码
-
数据交换:CPU和控制器之间,控制器和设备之间,数据寄存器
-
标识和报告设备的状态:状态寄存器
-
地址识别:识别控制的每个设备的地址,地址寄存器
-
数据缓冲区:协调I/O设备和CPU传输的效率
-
差错控制:数据传输时进行差错检测,并向CPU报告错误信息
-
-
基本组成
-
设备控制器与处理机的接口
-
设备控制器与设备的接口
-
I/O逻辑
-
-
寄存器独立编制和内存映像I/O
-
寄存器独立编址:为每个控制寄存器分配一个I/O接口,设置特定的I/O指令
-
内存映像I/O:不区分内存单元地址和设备控制器中的寄存器地址,统一了对内存和控制器的访问方法
-
I/O通道
建立独立的I/O操作,是一种特殊的处理机,区别:
-
指令类型单一,局限于与I/O有关的指令
-
通道没有自己的内存,而是与CPU共享内存
CPU向通道发送I/O指令,通道收到指令后从内存取出要执行的通道程序并执行,完成任务后再向CPU发送中断信号
-
通道类型
-
字节多路通道: 多个子通道按时间片轮转方式共享主通道
-
数组选择通道:按数组方式传送数据,速率快,但只有一个分配型子通道,一段时间内只能执行一道通道程序,独占,利用率较低
-
数组多路通道:多个非分配型子通道,且数据传送按数组方式进行
-
-
瓶颈问题:通道数量不足,I/O慢,系统吞吐量下降
-
解决办法:增加设备到主机间的通路而不增加通道
-
一个设备连接到多个控制器上,一个控制器连接到多个通道上
-
-
中断机构和中断处理程序
-
中断:CPU对I/O设备发来的中断信号的一种响应
-
外中断:(CPU外部)外部设备引起,如I/O设备(字符设备,块设备,通信设备)
-
陷入trap:内中断,CPU内部事件引起
-
-
中断向量表
-
为每种设备配以相应的中断处理程序,程序入口地址放在中断向量表的一个表项中
-
-
中断优先级
-
对多中断源的处理方式:
-
屏蔽(禁止)中断
-
嵌套中断
-
-
中断处理程序
一个进程请求I/O操作时,该进程被挂起,直到I/O设备完成I/O操作后,设备控制器向CPU发送一个中断请求,CPU响应后转向中断处理程序,中断处理程序处理完后解除相应进程的阻塞状态中断处理程序的处理过程:
-
测定是否有未响应的中断信号:程序每执行完当前指令后,处理机都要测试是否有未响应的中断信号
-
保护被中断进程的CPU环境(若发现有未响应的中断信号)
-
保存处理机状态字PSW,下一条指令地址,CPU寄存器数据(压栈保存)
-
-
转入相应的设备处理程序:确定引起本次中断的I/O设备,发出确认信号,装入中断处理程序的入口地址
-
中断处理
-
正常完成中断
-
异常结束中断
-
-
恢复CPU现场并退出中断
-
屏蔽中断方式:回到被中断的进程,并恢复现场
-
中断嵌套方式:(若有)处理更高优先级的中断请求
-
-
-
I/O操作完成后,设备驱动程序必须检查本次I/O操作是否发生错误,并向上层软件报告,最终向调用者报告本次I/O执行情况
设备驱动程序
亦即设备处理程序,接受上层软件的抽象I/O要求化为具体要求,传送下层设备控制器发来的信号
-
功能
-
特点
-
驱动程序是实现与设备无关的软件和设备控制器之间通信和转换的程序
-
对于不同类型的设备,应配置不同的驱动程序,但相同的多个终端应设置一个终端驱动程序
-
驱动程序与I/O设备采用的I/O控制方式紧密相关
-
驱动程序与硬件紧密相关,其中一部分需用汇编语言编写
-
驱动程序应允许可重入,即驱动程序可能一段时间内被多次调用
-
-
处理过程
-
将抽象要求转换为具体要求
-
对服务请求进行校验
-
检查设备的状态,如设备控制器的状态寄存器
-
传送必要的参数
-
启动I/O设备
-
对I/O设备的控制方式
四种方式
-
轮询:CPU一直询问,忙等
-
中断:CPU等中断期间可以做其他事
-
直接存储器访问方式DMA:频率,数据按块中断,读或写连续的数据块
-
DMA控制器
-
-
通道控制方式
-
数据块可以离散
-
通道程序(任务清单)
-
与设备无关的I/O软件
-
物理设备名和逻辑设备名
-
I/O重定向:用于I/O操作的设备可以更换,而不必改变应用程序
-
通道、控制器和设备之间的关系
-
与设备无关的软件
设备分配
-
考虑因素
-
设备固有属性:独占设备,共享设备,虚拟设备
-
设备分配算法:先来先服务,优先级高者服务
-
设备分配中的安全性:安全分配方式,不安全分配方式
-
-
数据结构:
-
设备控制表DCT
-
通道控制表CHCT
-
系统设备表SDT
-
改进:物理设备名换为逻辑设备名
加入逻辑设备表LUT
-
LUT设置的两种方式
-
用户层的I/O软件
-
系统调用(应用程序取得OS所有服务的唯一途径)和库函数
假脱机系统Spooling
simultaneous peripheral operating online
-
假脱机技术:用软件模拟脱机(释放CPU)输入时的外围控制机功能,在联机情况下实现同时外围操作(输入输出)的技术
-
通道技术,多道程序技术的基础上
-
-
组成:
-
输入井和输出井
-
输入缓冲区和输出缓冲区
-
输入进程和输出进程
-
井管理程序:控制
-
-
特点:
-
提高I/O速度
-
将独占设备改造为共享设备:共享打印机
-
实现虚拟设备功能(逻辑上的设备)
-
假脱机打印系统
-
磁盘缓冲区,打印缓冲区,假脱机管理进程和假脱机打印进程
-
假脱机管理进程
-
磁盘缓冲区中申请空闲盘块,并暂存要打印的数据
-
为用户进程申请请求打印表,挂在假脱机文件队列上
-
-
假脱机打印进程
-
从假脱机文件队列的队首摘取一张请求打印表,按照要求将要打印的数据由输出井传送到内存缓冲区,再交付打印机打印
-
重复该过程直至队列为空
-
-
-
守护进程
-
用户自己提供请求打印表,挂在文件队列上
-
缓冲区管理
-
引入原因
-
缓和CPU与I/O设备速度不匹配的矛盾
-
减少对CPU的中断频率,放宽对CPU中断响应时间的限制
-
解决数据粒度不匹配的问题
-
提高CPU与I/O设备之间的并行性
-
单缓冲区和双缓冲区
-
单缓冲区
-
磁盘把一块数据送到缓冲区时间:T
-
OS将缓冲区的数据送到用户区的时间:M
-
CPU对该块数据的计算时间:C
-
T和C之间可以并行
-
-
双缓冲区
-
单缓冲区任意时刻只能单向通信
-
环形缓冲区
-
使用:Getbuf,Releasebuf,计算进程,输入进程
-
进程同步问题:系统受计算限制(Nexti 赶上Nextg),系统受I/O限制(Nextg 赶上Nexti)
-
缓冲池
-
三个缓冲区队列
-
四种工作缓冲区
-
多个进程对缓冲区队列应互斥同步地使用
-
工作过程
磁盘
-
磁盘有多个磁盘片,每个磁盘片有一个或两个磁盘面surface
-
每个磁盘面:
-
磁道track,扇区sector(盘块、物理块)
-
-
柱面,物理地址(柱面号,盘面号,扇区号)
-
存储(读/写)以扇区为单位
-
温切斯特盘低级格式化方式
-
标识符字段ID Field,数据字段Data Field
-
-
磁盘类型:固定头磁盘,移动头磁盘
-
磁盘访问时间
-
寻道时间
-
延迟时间
-
传输时间
-
磁盘调度算法
-
先来先服务算法FCFS
-
公平,平均寻道时间较长
-
-
最短寻道时间优先SSTF
-
平均寻道时间短,可能出现饥饿现象
-
-
基于扫描的磁盘调度算法
-
扫描算法SCAN
-
也叫电梯算法
-
基于磁头移动方向,直至最外层/最内层才掉头
-
响应频率不平均
-
-
LOOK调度算法
-
边移动边观察,若该方向上已经没有别的请求,可以立即掉头
-
-
循环扫描算法C-SCAN
-
只处理某个特定方向上的请求
-
响应频率平均
-
-
C-LOOK调度算法
-
C-SCAN和LOOK结合
-
-
-
NStepSCAN算法和FSCAN算法
-
处理由于某些具有较高访问频率磁道带来的“磁臂黏着“现象:磁臂停留某处不动
-
将磁盘请求队列分成若干个子队列,队列之间用FCFS算法处理,每个子队列用SCAN处理
-
处理某子队列时,若出现新的I/O请求,则将该请求放入其他队列
-
只将队列分为当前队列和扫描期间新出现的请求组成的队列两个队列的是FSCAN算法
-