文件名称:与设备I/O操作有关的程序-UNIX(V6)内核阅读
文件大小:325KB
文件格式:PPT
更新时间:2024-05-12 12:28:09
UNIX(V6)内核阅读
与设备I/O操作有关的程序 rkstrategy(bp) rkintr( ) bp指向rk I/O请求队 列中的第一项 rktab.d-active==0 I/O出错? 清出错次数计数器 (rktab.d-errcnt==0) 在RK I/O请求队列中去 除已执行完毕的第一个 I/O请求块 进行I/O结束处理 (iodone(bp)) 启动执行下一个I/O请求 给控制台打印出错信息, 包括设备名,块号等; 设置RKCS字的0位为1, 进行控制复位操作; 等待RKCS第七位变为1 出错次数加1 (++rktab.d-errcnt) 出错次数<=10? Y N 设置出错标志 重新执行该I/O请求 (rkstart( )) 返回 返回 将bp指向的buf送 入RK I/O请求队 列的末尾 RK盘空闲? Y 启动RK (rkstart( )) 返回 rkstart( ) 在RK I/O请求队列中 取出第一个I/O请求块 队列空? 设置RK控制器忙的 标志 (rktab d-active++) N 调用devstart,按I/O 请求块启动rk I/O操 作 (devstart(bp,RKDA, rkaddr(bp),0)) 返回 Y N RKDA==devblk; RKBA==bp->b-addr; RKWC==bp->b-wcnt; 按规定格式构成RKCS 字,启动I/O操作 返回 devstart(bp.devloc.devblk,hbcom) Y N RKDA:磁盘地址寄存器; RKBA:内存地址寄存器; RKWC:字计数寄存器; RKCS:控制状态寄存器;