I/O
性能经常称为系统性能的瓶颈I/O
I/O
设备(如打印机,磁带等)SPOOLing
技术 I/O
设备与内存之间的数据交换,最终完成用户的I/O
请求
I/O
操作I/O
缓冲区I/O
过程的差异性)
I/O
等)提高CPU
与设备、设备与设备之间的并行工作能力,充分利用资源,提高资源利用率。
(1)并行性
(2)均衡性(使设备充分忙碌)I/O
设备一般由机械和电子两部分组成
(1)机械部分是设备本身(物理装置)
(2)电子部分又称设备控制器(或适配器) 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方式
当处理机向控制器发出一条I/O指令启动输入设备时
b. 处理机循环测试busy标志,直至busy=0。
c. 处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的I/O。
说明:应用程序发出了一个读数据的请求,设备驱动程序检查设备状态,没问题则给设备发出控制命令,然后不断测试设备是否完成了这次过程,完成之后将数据发送给应用程序。
说明:首先还是应用程序提出请求,设备驱动程序检查状态,如果没问题则发出控制命令,之后将设备状态记录在设备状态表中,此时CPU
可以做别的事情,当设备完成之后会给CPU
发出信号,转入中断处理程序,中断处理程序将结果交给设备处理程序,而设备处理程序将数据发送给应用程序。
中断驱动I/O方式的CPU是以字(节)为单位进行干预
DMA方式
DMA控制器需如下四类寄存器: (1)命令/状态寄存器(CR)。 (2)内存地址寄存器MAR (3)数据寄存器DR (4)数据计数器DC
DMA与中断方式的主要区别
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
算法。设备控制表
控制器控制表
通道控制表
系统设备表
设备分配的数据结构图
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
请求
准备通道程序,发出启动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
命令等待其完成