5.2 I/O软件原理
5.2.1 I/O软件的设计目标和原则
I/O软件的总体设计目标是,
高效率通用性
I/O软件设计主要要考虑以下 4个问题:
设备无关性。
出错处理。
同步(阻塞) —— 异步(中断驱动)传输。
独占性外围设备和共享性外围设备。
操作系统通常把 I/O软件组织成以下四个层次
l I/O中断处理程序 ( 底层 ) 。
l 设备驱动程序 。
l 与设备无关的操作系统 I/O软件 。
l 用户层 I/O软件 。
5.2.2 I/O中断处理程序
输入输出中断的类型和功能如下:
l通知用户程序输入输出操作沿链推进的程度 。 此类中断有程序进程中断 。
l通知用户程序输入输出操作正常结束 。 当输入输出控制器或设备发现通道结束,控制结束,设备结束等信号时,就向通道发出一个报告输入输出操作正常结束的中断 。
l通知用户程序发现的输入输出操作异常,包括设备出错,接口出错,I/O程序出错,设备特殊,设备忙等,以及提前中止操作的原因 。
l通知程序外围设备上重要的异步信号 。 此类中断有注意,设备报到,设备结束等 。
输入输出中断事件的原则如下:
1)如果是操作正常结束
2) 如果由于操作中发生故障或某种特殊事件而产生的中断
3)如果是人为要求而产生的中断
4)如果是外围设备上来的,设备结束,
等异步信号
5.2.3 设备驱动程序
设备驱动程序的功能是从与设备无关的软件中接收抽象的请求,并执行之 。 一条典型的请求是读第 n块 。 如果请求到来时驱动程序空闲,则它立即执行该请求 。
但如果它正在处理另一条请求,则它将该请求挂在一个等待队列中 。
5.2.4 与硬件无关的操作系统 I/O软件
设备无关软件完成的功能:
l 对设备驱动程序的统一接口
l 设备命名
l 设备保护
l 提供独立于设备的块大小
l 缓冲区管理
l 块设备的存储分配
l 独占性外围设备的分配和释放
l 错误报告
操作系统的一个主要论题是文件和 I/O设备的命名方式
操作系统如何保护对设备的未授权访问呢
设备无关软件屏蔽不同磁盘的扇区大小并向高层软件提供统一大小的逻辑块
块设备和字符设备都需要缓冲技术
错误处理多数由驱动程序完成
5.2.5 用户空间的 I/O软件
库例程实现的 I/O系统调用
I/O系统调用通常先是库例程调用格式化输入输出是用库例程实现的
非库例程实现的 I/O系统调用
spooling系统
I/O系统每一层软件及其功能
用户进程 进行 I/O调用;格式化 I/O; SPOOLING
设备无关软件 命名;保护;阻塞;缓冲;分配设备驱动程序 建立设备寄存器;检查状态硬件 执行 I/O操作中断处理程序 当 I/O结束时,唤醒驱动程序层次 I/O应答 I/O功能
I/O请求
5.3 具有通道的 I/O系统管理
具有通道的计算机系统,输入输出程序设计涉及 CPU执行
I/O指令,通道执行通道命令,
以及 CPU和通道之间的通信 。
5.3.1 通道命令和通道程序
5.3.1.1 通道命令
通道又称为 I/O处理机,具有自己的指令系统,
常常把 I/O处理机的指令称通道命令 。
通道命令 (Channel Command Word,CCW) 是通道从主存取出并控制 I/O设备执行 I/O操作的命令字,用通道命令编写的程序称通道程序,
一条通道命令往往只能实现一种功能,由于通道程序由多条通道命令组成,每次启动就可以完成复杂的 I/O控制 。
IBM370系统的通道命令双字长,
格式如下:
命令码 数据主存地址 标志码 传送字节个数通道命令各字段的含义如下:
l命令码 规定了外围设备所执行的操作 。 通道命令码分三类:数据传输类 (读,反读,写,
取状态 ),通道转移类 (转移 ),设备控制类 (随设备类不同执行不同控制 ) 。
l数据主存地址 对数据传输类命令,规定了本条通道命令访问的主存数据区起始 (或末 )地址,
而,传送字节个数,指出了数据区的大小 。 对通道转移类命令,用来规定转移地址 。
l标志码 用来定义通道程序的链接方式或标志通道命令的特点,32位至 36位依次为:数据链,命令链,
禁发长度错,封锁读入主存,程序进程中断 。 32和
33位均为 0,称无链,表示本条通道命令是通道程序的最后一条;为 01时,称命令链,表示本命令的操作已是最后一条,后面还有阉通道命令但为其他命令; 32位为 1时,称数据链,表示下一条通道命令将延用本条的命令码但由下一条通道命令指明新的主存区域 。 34位为 1时,通该条通道命令执行中,
禁止发长度错 。 35位为 1时,能使读型操作实现假读功能 。 36位为 1时,执行到该条通道命令将发出程序进程中断,将通道程序操作沿链推进的程度用中断方式通知操作系统 。
l传送字节个数 对数据传输类命令,规定了本次交换的字节个数;对通道转移类命令,规定填一个非
0数 。
汇编格式写的一个通道程序的例子
CCW X’02’,inarea,X’40’,80
CCW X’02’,*,X’40’,80
CCW X’02’,inarea +80,X’40’,80
CCW X’02’,*,X’40’,80
CCW X’02’,inarea +160,X’40’,80
,,
inarea DS CL240
5.3.1.2通道地址字和通道状态字
通道方式 I/O时,要使用两个固定存储单元:
通道地址字 (Channel Address Word,
CAW)
通道状态字 (Channel Status Word,
CSW) 。
通道地址字
用来存放通道程序的首地址的单元称通道地址字 。
通道状态字
通道状态字是通道向操作系统报告情况的汇集。通道利用通道状态字可以提供通道和外围设备执行 I/O操作的情况。
IBM系统中的通道状态字各字段的含义为:
l通道命令地址:一般指向最后一条执行的通道命令地址加 8。
l设备状态:是由控制器或设备产生,记录和供给的信息,包括:注意,状态修正位,控制器结束,忙,通道结束,设备结束,设备出错和设备特殊 。
l通道状态:由通道发现,记录和供给的信息,
包括:程序进程中断,长度错误,程序出错,存储保护错,通道数据错,通道控制错,接口操作错和链溢出 。
l剩余字节个数:最后一条通道命令执行后还剩余多少字节未交换 。
5.3.2 I/O指令和主机 I/O程序
IBM系统主机提供一组 I/O指令,以便完成 I/O
操作。
I/O指令有:启动 I/O(Start I/O,SIO),查询
I/O(Test I/O,TIO),查询通道 (Test Channel,
TCH),停止 aI/O(Halt I/O,HIO) 和停止设备
(Halt Device,HDV),它们都是特权指令,以防用户擅自使用而引起 I/O操作错误。
SIO X’00E’
执行一次 I/O操作的步骤可归纳如下:
l确定 I/O任务,了解使用何种设备,属于哪个通道操作方法如何等 。
l确定算法,决定例外情况处理方法 。
l编写通道程序,完成相应的 I/O操作 。
l 编写主机 I/O程序,对不同条件码进行不同处理 。
采用双缓冲把磁带上的块记录在行式打印机上输出。
START
BALR 11,0
USING *,11
SSM = X’00’ /*开中断
LA 8,READ0
ST 8,CAW
SIO X’0182’ /*启动磁带机反绕
BC 7,*-4 /*循环直到启动
TIO X’0182’
BC 7,*-4 /*测试直到磁带完成反绕
LOOP LA 8,READ1
ST 8,CAW
SIO X’0182’ /*启动磁带读入缓冲 1
BC 7,*-4
TIO X’0182’
BC 7,*-4 /*测试直到磁带完成
LA 8,PRINT1
ST 8,CAW
TIO X’00E’
BC 7,*-4 /*测试直到缓冲 2打印完
SIO X’00E’ /*启动行印机印缓冲 1的内容
LA 8,READ2
ST 8,CAW
SIO X’0182’ /*启动磁带读入缓冲 2
BC 7,*-4
TIO X’0182’
BC 7,*-4 /*测试直到磁带完成
LA 8,PRINT2
ST 8,CAW
TIO X’00E’ /*查询行印机
BC 7,*-4 /*测试直到缓冲 1打印完
SIO X’00E’ /*启动行印机印缓冲 1的内容
B LOOP
READ0 CCW X’07’,*,X’20’,1
READ1 CCW X’02’,BUFFER1,X’00’,512
READ2 CCW X’02’,BUFFER2,X’00’,512
5.3.3 通道启动和 I/O操作过程
CPU是主设备,通道是从设备,CPU和设备之间是主从关系,需要相互配合协调才能完成 I/O操作。那么 CPU如何通知通道做什么?通道又如何鞍告知 CPU其状态和工作情况呢?
通道方式 I/O过程可以分成三个阶段:
l I/O启动阶段 用户在 I/O主程序中调用文件操作请求传输信息,文件系统根据用户给予的参数可以确定哪台设备,传输信息的位置,
传送个数和信息内存区的地址 。 然后,文件系统把存取要求通知设备管理,设备管理按规定组织好通道程序并将首地址放入 CAW。 CPU向通道发出 SIO,命令通道工作,通道根据自身状态形成条件码作为回答,若通道可用,则
CPU传送本次设备地址,I/O操作开始 。 这一通信过程发生在操作开始期,CPU根据条件码便可决定转移方向 。
l I/O操作阶段 启动成功后,通道从主存固定单元取 CAW,根据该地址取得第一条通道命令,通道执行通道程序,同时将
I/O地址传送给控制器,向它发出读,写或控制命令,控制外围设备进行数据传输 。 控制器接收通道发来的命令之后,检查设备状态,若设备不忙,则告知通道释放 CPU,
并开始 I/O操作,向设备发出一系列动作序列,设备则执行相应动作 。 之后,通道独立执行通道程序中各条 CCW,直到通道程序执行结束 。 从通道被启动成功开始,
CPU巳被解放可执行其它任务并与通道并行工作,直到本次 I/O结束,通道向 CPU发出
I/O操作结束中断,再次请求 CPU干予 。
l I/O结束阶段 通道发现通道状态字中出现通道结束,控制器结束,设备结束或其它能产生中断的信号时,就应向 CPU申请 I/O中断 。 同时,把产生中断的通道号和设备号,以及 CSW存入主存固定单元 。 中断装置响应中断后,CPU上的现行程序才被暂停,调出 I/O中断处理程序处理 I/O中断 。 图 6-3是通道方式 I/O的示意 。
中央处理器用户程序 操作系统保护进程 j现场组织 CCW
CCW首址送 CAW
发 SIO
分析条件码出错进行相应处理启动成功进程 j等待选进程 K运行保护进程 K现场分析中断文件处理 I/O中断选择进程运行判断状态形成条件码执行 CCW
控制设备操作记录操作状态到 CSW
产生中断事件
CSW存入主存通道号、设备号存入主存特定单元发 I/O中断执行规定
I/O操作控制器和设备结束中断通道 I/O控制器和设备请求 I/O
进程 j
进程 k
进程 j或 k