第五章 输入输出系统
I/O系统简介
-
设备管理对象:主要是IO设备
-
设备管理的基本任务:完成用户提出的IO请求,提高IO速率以及改善IO设备的利用率
-
主要功能有:
-
隐藏物理设备细节。IO系统对IO设备进行适当的抽象,以隐藏掉物理设备的实现细节,统一向用户提供少量的、抽象的读写命令
-
与设备的无关性。允许应用程序使用抽象的逻辑设备名来使用某类设备,使得应用程序独立于具体使用的物理设备,从而有效的提高OS的可移植性和易适应性
-
提高处理及和IO设备的利用率
-
对IO设备进行控制。通过设备驱动程序启动IO设备进行数据传输并能对数据的传输方式进行有效的控制
-
确保对设备的正确共享。
-
错误处理
-
IO设备和设备控制器等硬件:
在IO系统中,除了需要直接用于IO和存储信息的设备外,还需要有相应的设备控制器和高速总线。
在大、中型计算机系统中,还配置了IO通道或IO处理及
通常,设备并不是直接与CPU通信,而是与设备控制器通信,因此在设备与设备控制器之间有一接口
设备控制器
设备和控制器之间的相连
数据信号线:传送数据信号
状态信号线:指示设备当前信号
控制信号线:由设备控制器向IO设备发送控制信号
设备控制器:
设备控制器是CPU与IO设备之间的接口,它接收从CPU发来的命令,并去控制IO设备工作,以使处理机从繁杂的设备控制事务中解脱
设备控制器的主要职责是控制一个或多个IO设备,以实现IO设备和计算机之间的数据交换
若控制器可以连接多个设备时,则应该含有多个设备地址,并使每个设备地址对应一个设备
IO通道
通道是一种特殊的执行IO指令的处理机
IO中断处理程序
IO设备完成IO操作后,设备控制器便向CPU发送了一个IO中断信号。
CPU相应中断时,保存被中断进程的CPU现场,通过中断向量表转向执行相应的IO中断处理程序
IO中断处理程序的工作过程如下
-
检查本次IO操作的完成情况。中断处理程序通过读设备控制器的状态寄存器来检查本次IO操作的完成情况。
-
进行IO结束或错误处理
-
唤醒被IO操作阻塞的进程
-
启动下一个请求。
-
中断返回
设备驱动程序【了解】
设备驱动程序是IO进程与设备控制器之间的通信程序,它接收来自上层软件的、抽象的IO命令,再把它转换成具体要求后,发送给设备控制器,从而启动设备进行数据传送。
处理过程
-
将抽象要求转换为具体要求
-
检查IO请求的合理性
-
读出和检查设备的状态
-
传送必要的参数
-
启动IO设备
对IO设备的控制方式
使用轮询的可编程IO
中断驱动方式
DMA控制方式
IO通道控制方式
与设备无关的IO软件
-
设备独立性
为什么引入?
为了方便用户和提高OS的可适应性与可扩展性
应用程序独立于具体使用的物理设备
为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
-
实现设备独立性带来的好处
-
设备分配时的灵活性:进程能以逻辑设备名称来请求某类设备时,系统可以立即将该类设备中的任何一台分配给进程,仅当当前类设备全部分配完毕时, 进程才会被阻塞
-
易于实现IO重定向:用于IO操作的设备可以更换,而不必改变应用程序
-
-
设备独立性软件
-
驱动程序是一个与硬件紧密相关的软件
-
为了实现设备独立性,必须在驱动程序上设置一层软件,称为设备独立性软件
-
-
用户层的IO软件
脱机:脱离主机的控制进行的输入输出操作
假脱机(Spooling)系统
通过假脱机技术,将一台物理IO设备虚拟成多台逻辑IO设备,允许多个用户共享一台物理IO设备。
-
什么是Spooling技术
Spooling技术是软件的方式对脱机输入/输出系统的模拟
用一道程序模拟脱机输入时的外围控制机的功能,把低速IO设备上的数据传输到高速磁盘上
用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传输到低速输出设备上
外围操作与CPU对数据处理同时进行,将这种在联机情况下实现的同时外围操作的技术称为SPOOLing
-
SPOOLing系统的组成
输入井和输出井。在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容IO设备输入的数据;输出井模拟脱机输出的磁盘
输入缓冲区和输出缓冲区。用于缓和CPU和磁盘之间速度不匹配问题,暂存输入设备/输出设备的数据,中转站
输入进程和输出进程。输入进程页称为预输入进程,用于模拟脱机输入时外围控制机。输出进程也称为缓输出进程
井管理程序。用于控制作业与磁盘井之间的信息交换
-
SPOOling系统的特点
-
提高了IO速度。缓和了CPU和低速IO设备之间速度不匹配的矛盾
-
将独占设备改造为共享设备。
-
实现了虚拟设备功能。实现了将独占设备变换为若干台对应的逻辑设备的功能。
-
-
如何利用SPOOLing技术实现共享打印机
磁盘缓冲区
打印缓冲区
假脱机管理进程和假脱机打印进程
执行过程
当用户进程发出打印输出请求时,假脱机打印机系统并不是立即把打印机分配给该用户进程,而是由假脱机管理进程完成两项任务:
在磁盘缓冲区为之申请一个空闲盘块,并将要打印的数据送入其中暂存
为用户进程申请一张空白的用户请求打印表,将请求填入,挂到假脱机文件队列上。
对于用户进程而言,打印请求已经得到满足
真正的打印输出是由假脱机打印进程执行的,当打印机空闲从队列的队首摘取请求打印表, 根据要求将数据从输出井传送到内存缓冲区,再交付打印机进行打印,重复执行直到队列为空,此后假脱机打印进程阻塞自己,直到再有打印请求。
对于每个用户而言,系统并非即时执行其程序输出数据的真实打印操作,而只是即时将数据输出到缓冲区,这是的数据并未被真正打印;真正的打印操作是在打印机空闲且该打印任务在等待队列中排到队首时进行;并且打印操作本身也是利用CPU的一个时间片,没有使用专门的外围机;以上对用户是屏蔽的。
设备分配
缓冲区
引入缓冲区的原因:
-
缓和CPU和IO设备速度不匹配的矛盾
-
减少对CPU的中断频率,放宽对CPU中断响应时间的限制
-
解决数据粒度不匹配问题
-
提高CPU和IO设备的并行性
-
提高系统的吞吐量和设备的利用率
-
单缓冲区
-
如果在生产者与消费者之间设置了一个缓冲区,则生产者无需等待消费者就绪,便可把数据输出到缓冲区。可提升IO速度
双缓冲区:
-
由于缓冲区是共享资源,生产者和消费者在使用缓冲区时必须互斥。如果消费者尚未取走缓冲区的数据,即时生产者又生产出新的数据,也无法将它送入缓冲区,等待。
-
为了加快输入和输出速度,提高设备利用率,引入了双缓冲
环形缓冲区
-
当输入速度和输出速度基本匹配时,采用双缓冲能获得较好的效果,可使生产者和消费者基本上能并行操作。若两者的速度相差甚远,双缓冲的效果不理想。随着缓冲区数量的增加,情况有所改善
缓冲池
-
上述的缓冲区是专门为了特定的生产者和消费者设置的,它们属于专用缓冲。当系统较大时,应该有许多这样的循环缓冲,这不仅要消耗大量的内存空间,而且其利用率不高。
-
为了提高缓冲区的利用率,采用既可以用于输入又可以用于输出的公用缓冲区,在池中设置了多个可供若干进程共享的缓冲区。
-
缓冲池和缓冲区的区别:缓冲区仅仅是一组内存块的链表,而缓冲池则是包含了一个管理的数据结构及一组操作函数的管理机制,用于管理多个缓冲区。
-
-
Getbuf和Putbuf过程【什么玩意】
-
为了使诸进程能互斥的访问缓冲池队列,可为每一队列设置一个互斥信号量MS(type)。此外,为了保证诸进程同步的使用缓冲区,又为每个缓冲队列设置了一个资源信号量RS(type)
-
void Getbuf(unsigned type) { Wait(RS(type)); Wait(MS(type)); //用于将从type所指示的队列的队首摘下一个缓冲区 B(number) = Takebuf(type); Signal(MS(type)); } void Putbuf(type,number) { Wait(MS(type)); //将由参数number所指示的缓冲区B挂在type队列上 Addbuf(type,number); Signal(MS(type)); Signal(RS(type)); }
磁盘调度
磁盘调度的目标是使磁盘的平均寻道时间最少,提高磁盘IO速度
-
磁盘IO速度高低、磁盘系统的可靠性直接影响到计算机的性能
提升磁盘IO速度的主要途径
-
选择性能好的磁盘
-
采用好的磁盘调度算法
-
设置磁盘高速缓存
-
其他方法
-
采用高度可靠、快速的容量磁盘系统-磁盘冗余阵列
磁盘简述:
磁盘设备可以包括一个或多个物理盘片,每个磁盘片分为一个或两个存储面,每个盘面上都有若干磁道,磁道之间留有必要的缝隙,每条磁道又从逻辑上划分成若干扇区。
磁盘分类:
固定头磁盘。这种磁盘在每条磁道上都有一读写磁头,所有的磁头都被装在一刚性磁臂中。通过这些磁头可以访问所有各磁道进行并行读写,有效的提高了磁盘的 IO速度,主要用于大容量磁盘上
移动头磁盘。每个盘面配有一个磁头。为了访问所有磁道,需要移动进行训导,只能以串行方式读写,IO速度慢,结构简单用于中小型磁盘。
磁盘访问时间
磁盘调度算法
在书中只需要访问到右侧没有磁道就行,即到184就可以了。
书中的SCAN是LOOK
书中的C-SCAN是C-LOOK方法