I/O
性能经常称为系统性能的瓶颈I/O
错误条件
I/O
设备(如打印机,磁带等)SPOOLing
技术
SPOOLing技术
当系统中引入多道程序技术后,完全可以利用其中一道程序,来模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时的外围控制机功能,把数据从磁盘传送到低速设备上。这样,便可以在主机的直接控制下,实现脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为,或称为假脱机操作
SPOOLING系统主要有以下四部分:
(1)输入井和输出井 (2)输入进程和输出进程 (3)输入缓冲区与输出缓冲区 (4)井管理程序
1、按照用户的请求,控制设别的各种操作,完成I/O
设备与内存之间的数据交换,最终完成用户的I/O
请求
I/O
操作I/O
缓冲区2、建立方便、统一的独立于设备的接口
I/O
过程的差异性)3、充分利用各种技术(通道,中断,缓冲,异步I/O
等)提高CPU
与设备、设备与设备之间的并行工作能力,充分利用资源,提高资源利用率。
(1)并行性
(2)均衡性(使设备充分忙碌)
I/O
设备一般由机械和电子两部分组成CPU
完成指定操作,CPU
可以另外执行其他计算;命令完成时,控制器产生一个中断,CPU
响应中断,控制器转给操作系统;通过读控制器寄存器中的信息,获得操作结果和设备状态I/O
端口地址:接口电路中每个寄存器具有的、唯一的地址,是个整数I/O
端口地址形成I/O
端口空间(受到保护)I/O
端口地址空间;中间就是一块内存,其中有一部分用作I/O
端口地址空间;而右边是一种混合模式,内存中有一部分用于I/O
端口,在外部还有一个独立的I/O
端口地址空间。I/O
指令对端口进行操作I/O
操作I/O
端口操作的指令类型少,操作不灵活8086/8088
,分配给I/O
端口的地址空间为64k
,0000H~0FFFFH
,只能用in
和out
指令进行读写操作I/O
端口看作一个存储单元,对I/O
的读写操作等同于对内存的操作I/O
端口操作I/O
指令I/O
端口可占有较大的地址空间I/O
操作TEST
可以测试一个内存字是否为零,那么它也可以用来测试一个控制寄存器是否为零。PORT_4
将导致它被高速缓存,随后的引用将只从高速缓存中取值并且不会再查询设备,之后当设备最终变为就绪时,软件将没有办法发现这一点,结果循环将永远进行下去I/O
(轮询/查询)CPU
代表进程给I/O
模块发I/O
命令,进程进入忙等待,直到操作完成才继续执行I/O
I/O
操作结束后,由设备控制器主动通知设备驱动程序DMA
(直接存储器访问)主要差别在于:
中央处理器和外围设备并行工作的方式不同,
并行工作的程度不同。
当处理机向控制器发出一条I/O指令启动输入设备时
b. 处理机循环测试busy标志,直至busy=0。
c. 处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的I/O。
CPU
可以做别的事情,当设备完成之后会给
CPU
发出信号,转入中断处理程序,中断处理程序将结果交给设备处理程序,而设备处理程序将数据发送给应用程序。
中断驱动I/O方式的CPU是以字(节)为单位进行干预
特点
相比中断驱动方式
提高了CPU与I/O设备的并行操作程度
DMA控制器需如下四类寄存器:
(1)命令/状态寄存器(CR)。
(2)内存地址寄存器MAR
(3)数据寄存器DR
(4)数据计数器DC
I/O通道方式是DMA方式的发展,是一种I/O专用处理器
它把对一个数据块的读(写)为单位的干预减少为对一组数据块的读(写)及有关的控制和管理为单位的干预
实现CPU、通道和I/O设备三者的并行操作
更有效地提高整个系统的资源利用率。
通道程序由一系列通道指令构成。
通道指令中都包含下列诸信息
通道程序结束位 P=1表示结束
记录结束标志
分层设计思想:
I/O
软件组织成多个层次较高层不依赖于硬件,并向用户提供一个友好的、清晰的、简单的、功能更强的接口
I/O
数据进行格式化,为假脱机输入输出做准备I/O
完成时,唤醒设备驱动程序进程,进行中断处理I/O
的操作。即用户编写的程序可以访问任意I/O
设备,无需事先指定设备。这样做的好处是设备分配时的灵活性,易于实现I/O
重定向。
I/O
操作I/O
软件时,除了直接与设备打交道的底层软件之外,其他部分的软件不依赖于硬件我们知道,缓冲技术是操作系统中最早引入的技术,最初是为了解决cpu
与I/O
设备之间速度不匹配的问题。
而今天,凡是数据到达和离去的速度不匹配的地方均可采用缓冲技术,提高cpu
与I/O
设备的并行性,减少I/O
设备对cpu
的中断请求次数,放宽cpu
对中断响应时间的要求。
这个版本的UNIX
系统采用缓冲技术可以达到下面目标:
I/O
进程、提高I/O
速度很有帮助。I/O
的次数,提高系统运行的速度)200
个缓冲区(512
字节和1024
字节)av
链)bfreelist
b
链)av
和b
)用于对缓冲池的分配管理每个缓冲区同时在av
链和b
链:
av
链(缓冲区未被使用时)I/O
请求:在设备I/O
请求队列和设备b链I/O
完成:在空闲av
链和设备b链当进程想从指定的盘块读取数据时,系统根据盘块号从设备b
链(散列队列)中查找,如找到缓冲区,则将该缓冲区状态标记为“忙”,并从空闲av
链队列中取下,并完成从缓冲区到内存用户区的数据传送。
如果在设备b
链中未找到时,则从空闲av
链队列首部摘取一个缓冲区,插入设备IO
请求队列,并从原设备b
链中取下,插入由读入信息盘块号确定的新的设备b
链中。
当数据从磁盘块读入到缓冲区后,缓冲区从设备IO
请求队列取下;当系统完成从缓冲区到内存用户区的数据传送后,要把缓冲区释放,链入空闲av
链队尾。
当数据从磁盘块读入到缓冲区,并传送到内存用户区后,该缓冲区一直保留在原设备b
链中,即它的数据一直有效。若又要使用它,则从空闲av
链中取下,使用完后插入到空闲av
链队尾。若一直未使用,则该缓冲区从空闲av
链队尾慢慢升到队首,最后被重新分配,旧的盘块数据才被置换。
系统对缓冲区的分配是采用近似LRU
算法。
系统为每一个I/O设备都配置了一张用于记录本设备情况的设备控制表(Device Control Table,DCT)。
系统为每一个控制器都配置了一张记录本控制器情况的控制器控制表(COntroler Control Table,COCT)。
每个通道都有一张通道控制表(CHannel Control Table,CHCT)。
该表只有在通道控制方式的系统中存在。
设备类型、台数、设备号、设备控制表指针等
在申请设备时,如果设备空闲,就将其独占,不再允许其他区进程申请使用,一直等到该设备被释放,才允许被其他进程申请使用。考虑到效率问题,并避免由于不合理的分配策略造成死锁
分时式共享设备的分配
IO
为单位分时使用设备,不同进程的IO
操作请求以排队方式分时地占用设备进行IO
与设备密切相关的代码放在设备驱动程序中,每个设备驱动程序处理一种设备类型
一般地,设备驱动程序的任务是接收来自与设备无关的上层软件的抽象请求,并执行这个请求。
每一个控制器都设有一个或多个设备寄存器,用来存放向设备发送的命令和参数。设备驱动程序负责释放这些命令,并监督它们正确执行。
在设备驱动程序的进程释放一条或多条命令后,系统有两种处理方式,多数情况下,执行设备驱动程序的进程必须等待命令完成,这样,在命令开始执行后,它阻塞自己,直到中断处理时将它解除阻塞为止;而在其它情况下,命令执行不必延迟就 很快完成。
设备驱动程序与外界的接口
IO
请求、对命令的合法性检查以及参数处理在文件系统中完成。在需要各种设备执行具体操作时,通过相应的数据结构转入不同的设备驱动程序设备驱动程序接口函数
IO
操作函数IO
的指令;对共享设备,将IO
请求形成一个请求包,排到设备请求队列,如果请求队列空,则直接启动设备IO
完成做善后处理,一般是唤醒等待刚完成IO
请求的阻塞进程,时期能进一步做后续工作;如果存在IO
请求队列,则启动下一个IO
请求。IO
进程:专门处理系统中的IO
请求和IO
中断工作IO
请求的进入
send
将IO
请求发送给IO
进程;调用block
将自己阻塞,直到IO
任务完成后被唤醒wakeup
唤醒IO
进程,完成用户所要求的IO
处理IO
中断的进入
IO
中断发生时,内核中的中断处理程序发一条消息给IO
进程,由IO
进程负责判断并处理中断I/O
进程是系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行;I/O
进程开始运行后,首先关闭中断,然后用receive
去接收消息。有两种情形:
IO
请求或IO
中断)a:IO
请求b:IO
中断,进一步判断正常或异常结束,如果正常,则唤醒要求进入IO
操作的进程,如果是异常,则转入相应的错误处理程序。解决IO
性能问题有两个方法:
cpu
利用率尽可能不被IO
降低cpu
尽可能摆脱IO
IO
来使cpu
不等待IO
。还可以使用DMA
、通道等IO
部件来让cpu
摆脱IO
操作。Windows
提供两种模式的IO
操作:异步和同步IO
,应用程序可以启动一个IO
操作,然后在IO
请求执行的同时继续处理IO
操作时间等待的cpu
时间IO
:应用程序被阻塞直到IO
操作完成。IO
处理过程中,cpu
处于空闲等待状态IO
操作cpu
利用率IO
操作会引入切换的开销wait
命令等待其完成