IO设备根据不同的分类标准,可以进行不同的分类。 首先,根据IO设备的使用特性,可以分为人机交互类外部设备(打印机、显示器)、存储设备和网络设备。按照传输速率分类,可以分为低速设备、中速设备和高速设备。按照信息交换的单位分类可以分为块设备和字符设备,块设备的信息存取以数据块为单位,速率快而且可以寻址,字符设备传输的基本单位为字符,传输速率低而且不可寻址。
外围设备与内存之间的输入输出控制方式主要有四种,在计算机组成原理中提到了三种,在操作系统中又补充了一种: ①程序直接查询方式 在计算机组成原理中叫做程序查询方式,CPU对外设状态进行循环检查,直到确定需要的数据已经在IO设备的数据寄存器中,这个过程属于快速的CPU一直在等待慢速的IO设备,所以造成了CPU的资源浪费。这种方式下由于CPU没有采用中断机构,所以IO设备无法向CPU报告已经完成了一个字符的输入,从而只能让CPU循环扫描。
②中断驱动方式 在计算机组成原理中叫做程序中断方式,通过增加中断机构,让CPU摆脱外设的限制。该方式之下,CPU给IO设备发送IO信号之后,无需循环等待IO设备,而是继续做自己的任务,当IO设备完成输入之后,通过中断的方式报告CPU,由CPU采用中断的处理来完成IO输入输出。具体的中断过程属于计算机组成原理的内容。中断驱动方式相比于程序直接控制方式,由于不需要让快速的CPU等待慢速的外设,所以CPU的利用率提高了很多,但是每次中断CPU都需要进行上下文的保护以及切换,所以还是需要一定的开销。 ③DMA方式 在中断驱动方式的基础上再次优化,DMA方式的基本思想是在IO设备和内存之间开辟一条单独的数据交换通路,从而彻底解放CPU。采用DMA方式的情况下,数据传输的单位是块,数据在内存和设备之间传送而不需要经过CPU,仅在传输开始或者结束时才需要CPU的干预,而数据的传送是由专属的DMA控制器来完成。 DMA控制器主要由四部分组成: a 命令/状态寄存器:用于接收CPU发过来的IO命令或者控制信息。 b 内存地址寄存器:用于存放地址,输入时为数据要放在内存上的地址,输出时为数据来自于内存的地址。 c 数据寄存器:用于暂存本次要传送的数据。 d 数据计数器:用于存放本次要传送的字节数。
DMA控制器是很具有自主性的控制器,DMA控制器工作过程中,首先IO设备发出DMA请求,CPU收到DMA请求后启动DMA控制器,然后继续工作,关于IO的事情就交给DMA代为处理,根据计算机组成原理,DMA控制器此时占据总线,CPU进行的工作不能使用总线,当DMA控制器完成数据传送时会再次发送中断信号报告CPU已经完成。所以只有传送开始和结束的时候才会用到CPU。 对比DMA方式和中断驱动方式,前者在传送的一批数据完全传送完时才会中断通知CPU,而后者每次传输一个数据就需要一次中断,此外前者是在DMA控制器的控制下完成的,而后者则是在CPU控制下来完成传输。可以说DMA方式以存储器为核心,而中断控制方式以CPU为核心。此外DMA是以块为单位进行传输,而中断控制方式以字节为传输单位。 ④通道控制方式 这种方式是操作系统中才介绍的,属于对DMA方式的进一步优化。IO通道指的是专门负责输入输出的处理机,这种方式可以进一步减少CPU的干预,即把以一个数据块的读写为单位的干预换成对一组数据块的读写为单位,同时还可以实现CPU、通道和IO设备三者的并行。 简单来说这种方式就是多IO设备的DMA方式,比如当CPU需要完成一组相关的读写操作及有关控制时,只需要向IO通道发送一条IO指令,给出要执行的通道程序的首地址和要访问的IO设备,可以进行多个IO设备的传送。数据传送结束时再向CPU发出中断请求。 IO通道可以看作是专门为IO而生的简化处理机,通道指令类型单一,而且没有自己的内存,通道所执行的通道程序是存放在内存上的,即通道与CPU共享内存。 相比于DMA方式,DMA方式需要CPU来控制数据块大小、传输的位置等,而通道方式完全是由通道来控制的,此外每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备和内存的数据交换。 这部分属于课本上有但是王道上没有的,常用的通道有三类: a 字节多路通道 字节多路通道是一种简单的共享通道,主要用于连接控制多台低速外设,以字节交叉方式传送数据。例如,某个外设的数据传输率只有1000B/s,即传送1个字节的时间间隔是1ms,而通道从设备接收或发送一个字节只需要几百ns,因此,通道在传送两个字节之间有很多空闲时间,字节多路通道正是利用这个空闲时间为其他设备提供服务。每个设备分时占用一个很短的时间片,不同的设备在各自分得的时间片内与通道建立连接,实现数据的传输。 b 选择通道 选择通道又称高速通道,在物理上它可以连接多个设备,但是这些设备不能同时工作,在某一个时间段内通道只能选择一个设备进行工作。选择通道很像一个单道程序的处理器,在一段时间内只允许执行一个设备的通道程序,只有当这个设备的通道程序全部执行完毕后,才能执行其他设备的通道程序。选择通道主要用于连接高速外围设备,如磁盘、磁带等,信息以成组方式高速传输。由于数据传输率很高,如达到1.5MB/s,通道在传送两个字节之间只有很少的空闲时间,所以,在数据传送期间只为一台设备服务是合理的。但是,这类设备的寻址等辅助操作的时间往往很长,在这样长的时间里通道一直处于等待状态,因此,整个通道的利用率还不是很高。 c 数组多路通道 连接控制多个高速外设并以成组交叉方式传送数据的通道称为数组多路通道。数组多路通道是对选择通道的一种改进,当某个设备进行数据传送时,通道只为该设备提供服务;当设备在执行寻址等控制性动作时,通道暂时断开与该设备的连接,挂起该设备的通道程序,而转去为其他设备提供服务,即执行其他设备的通道程序。所以,数组多路通道很像一个多道程序的处理器。 从图里面可以看出,字节多路是多个外设一个传输一字节从而交替进行,选择通道是选择连接的多个外设中的一个进行传输,而数组多路则是对前面两种的综合。
IO软件涉及范围很广,IO软件不仅要与硬件打交道,而且还需要与进程协作。一般来说IO软件普遍采用层次式结构,这种结构类似于计算机网络中的分层结构,上下层之间靠接口连接,上层只需要知道下次提供的服务而不需要知道服务的具体细节。 一个比较合理的层次划分如下: 整个IO系统可以看作四个层次的系统结构: ①用户层IO软件 实现与用户交互的接口,用户可直接调用在用户层提供的、与IO操作有关的库函数对设备进行操作。 ②设备独立性软件 用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备分配与释放,同时为设备管理和数据传送提供必要的存储空间。 设备独立性也称作设备无关性,是使得应用程序独立于具体使用的物理设备。为了实现设备独立性,引入了逻辑设备和物理设备,应用程序中用逻辑设备名来请求使用某种设备,而系统在实际执行时必须将逻辑设备映射成为物理设备名来使用。这样做增加了设备分配的逻辑性,易于实现IO设备的重定向。一般为了实现设备独立性,都需要在驱动程序上再设置一层设备独立性软件,设备独立性软件需要执行所有设备的公有操作,并且向用户层提供统一接口。 ③设备驱动程序 与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动IO设备工作的驱动程序。通常每类设备配置一个设备驱动程序,它是IO进程与设备控制器之间的通信程序。 ④中断处理程序 用于保存被中断进程的CPU环境,转入相应的中断处理程序,处理完成后恢复现场。 ⑤硬件设备 一般包括一个机械部件和一个电子部件,电子部件称为设备控制器,一般是一块电路板,而机械部件则是设备本身。 设备控制器通过寄存器与CPU通信,可以看作是IO设备的代理人。设备控制器需要实现的功能包括接受识别CPU或者通道的指令、实现数据交换、发现和记录设备及自身的状态信息和识别设备地址。 设备控制器需要分成两部分来看: a 设备控制器与CPU的接口 该接口和CPU相连,需要三类信号线(数据线、地址线和控制线),数据线一般和数据寄存器、控制状态寄存器相连。 b 设备控制器与设备的接口 该接口与设备相连,一个接口对应一台设备。 c IO逻辑控制 用于实现对于设备的控制,负责选择相应的设备。
IO子系统是指控制设备的多种方法,它将内核的其他方面从繁重的IO设备管理中解脱出来。
IO子系统需要解决的问题首先是IO调度,即选择一个好的顺序来执行这些IO请求,让进程之间公平地进行设备的访问,上一章中的磁盘调度算法其实就属于IO调度中的一种。
操作系统中通过使用磁盘高速缓存技术来提高磁盘的IO速度。该技术是指利用内存上的存储空间来暂存从磁盘中读出的一系列盘块中的信息,所以磁盘高速缓存理论上属于磁盘,而物理上是驻留在内存上的物理盘块。 高速缓存在内存中分为两种形式,一种是在内存上开辟一个单独的存储空间作为磁盘高速缓存,大小固定;另一种是把未利用的内存空间作为一个缓冲池,用于共享。
引入缓冲区,主要是为了以下目的: 当缓冲区的数据非空时不能向缓冲区冲入数据,只能把数据从缓冲区传出;当缓冲区为空时,可以网缓冲区冲入数据,但必须把缓冲区充满后才能从缓冲区中把数据传出。 在引出缓冲区之间,在缓冲区这部分有一个常用的计算处理时间的方法。首先规定一个初始状态,然后计算下一次到达相同状态所需要的时间,这个时间就是处理一块数据所需要的时间。这个方法在缓冲区部分会很常用。 根据系统设置缓冲器的个数,缓冲区可以分为以下几种: ①单缓冲 设备和处理机之间设置一个缓冲区,交换数据时,先把被交换的数据写入缓冲区,之后需要的设备或者处理机将数据从缓冲区中取走。 根据前面所提到的计算处理时间的方法,可以得到单缓冲区处理每块数据的用时为max(C,T)+M。 ②双缓冲 IO设备先装填缓冲区1,填满后再填充缓冲区2,此时缓冲区1中的数据可以取出交给进程处理,当缓冲区1中的数据处理完后,如果缓冲区2也满了,那就处理缓冲区2同时填充缓冲区1。 这种方式提高了处理机和输入设备的并行操作的程度。采用相同的方式,可以得到双缓冲区处理每块数据的用时为max(C+M,T)。采用双缓冲区时,当M+C>T时,相当于处理器消费的很慢,所以CPU不需要等待设备输入,当M+C<T时,处理器消费速度很快,所以需要等待缓冲区满,即可使块设备连续输入。 ③循环缓冲 包含许多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区又指向第一个缓冲区,多个缓冲区构成一个环形。需要两个指针来指示缓冲区。 ④缓冲池 多个系统公用的缓冲区组成,缓冲区按照使用情况分为三个队列:空缓冲队列、装满输入数据的缓冲队列和装满输出数据的缓冲队列。 IO子系统也需要考虑设备的分配和回收。 设备的分配需要充分发挥设备的使用效率,尽可能让设备忙碌,但是又要避免由于不合理的分配方法而导致的进程的死锁。从设备的特性上来看,设备可以分为下面三类: ①独占式使用设备 申请设备时如果设备空闲才可以使用并且独占,不允许其他进程申请使用,直到该设备被释放才能允许其他进程申请使用。 ②分时式共享使用设备 一定程度上提高了使用率,对磁盘的IO操作其实就属于分时式共享使用设备。 ③以SPOOLing方式使用外部设备 即假脱机IO技术,即对IO操作进行批处理,属于一种拿空间换时间的技术。
设备分配过程需要一个设备控制表(DCT)用一个设备控制表来表征一个设备,表中的表项就是设备的各个属性。这种思想在进程(PCB)、文件(FCB)的思想是一样的。系统中设置一张系统设备表,每个连接到系统中的设备都在里面占据一个表面。
设备分配时需要根据设备特性、用户要求和系统配置情况来综合考虑,总原则是:既要充分发挥设备的使用效率,又要避免死锁,同时还需要将用户程序和具体设备隔离开。 为了实现设备独立性,应用程序内部使用的是逻辑设备名来请求某类设备,而系统中有一张逻辑设备表,用于将逻辑设备名转换为物理设备名。
SPOOLing技术也叫假脱机技术,指的是为了缓和CPU高速性与IO设备低速性之间的矛盾从而引入的技术。该技术利用专门的外围控制机,将IO设备的数据传送到高速磁盘上,或者相反。 该技术组成如图: 磁盘上的输入井和输出井是内存中开辟的两个单独的存储区域,输入井用于模拟脱机输入时的磁盘,可以收容IO设备输入的数据,输出井用于模拟脱机输出时的磁盘,用于收容用户程序的输出数据。 内存中划分两个缓冲区,输入缓冲区用于暂存由输入设备送来的数据,以后传送到输入井,输出缓冲区则暂存从输出井送来的数据,以后传送到输出设备。 输入进程用于模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区送入输入井,输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先送到内存在送到输出井。 这个技术比较抽象,共享打印机就是使用该技术的一个实例。当用户进程请求打印输出时,该系统同意为它打印输出,但并没有立即把打印机分配给该进程,而是在由输出进程将要打印的数据暂存在输出井,再由输出进程去打印队列上排队。这样子CPU要打印打印的数据可以先输出到磁盘的输出井中,之后做其他的事情,打印交给SPOOLing系统去做,由于输出到磁盘的速度比打印机快,所以提高了速度。
设备的固有属性决定了决定了设备的使用方式,设备独立性可以提高设备分配的灵活性和设备的利用率,设备安全性可以保证分配设备时不会导致永久阻塞,而及时性一般不考虑。 典型的现学现卖题目,这道题只要看懂就完全不需要太多的知识。每分钟打印6页,一页是50行,一行是80个字符,所以有6×50×80个字符,而每个字符需要50微秒的处理时间,所以总共处理字符的中断时间为50×10的-6次方×24000=1.2秒,所以占的比例为2%。 缓冲区的计算题是这部分比较典型的题目。根据缓冲区的知识,只有缓冲区满了以后才能传递给进程,进程消耗完后等缓冲区满了才能再取数据。所以一开始100微秒用于填满缓冲区,之后50微秒传送到CPU,之后的50微秒CPU在分析数据,与此同时磁盘也在向缓冲区读入数据,当50微秒过后缓冲区没满,必须要等到第250毫秒才能开始传送到CPU。所以相当于一次传送需要150微秒,十个磁盘块的文件,需要10次传送,最后一次还需要额外的50毫秒分析,所以在单缓冲区结构下,需要1550微秒。而双缓冲区情况下,由两个缓冲区交替进行,首先填满缓冲区1用100微秒,之后传输和分析的过程在完成后,缓冲区2搞好填满,再次重复填充缓冲区1,如此下来,最后一次填满刚好是1000微秒,再加上传送到CPU与分析的100微秒,总共是1100微秒。其实也没必要这么麻烦,双缓冲区必然要比单缓冲区优秀,所以必然是时间更小,所以直接排除CD。 这是一道同类型的计算题,数据块数目较少可以直接手动模拟。一开始100用来从外设读入到缓冲区,满了以后移动到工作区用5,接下来90工作区开始分析,但是完成后缓冲区没满,等到总时间的205才满,转移到用户工作区并分析,再消耗95,总共用时300. 鼠标移动时,若有优先级更高的操作产生,为了记录鼠标的活动,必须要采用缓冲技术。磁盘驱动器和IO设备之间的吞吐量不同,所以也需要缓冲技术。为了能使数据从用户作业空间传送到磁盘从磁盘传送到用户作业空间,需要缓冲技术。为了便于多幅图形的存取以及提高性能,缓冲技术可以采用,特别是在显示当前一幅图形又要得到下一幅图形时。
专业课终于搞完了,虽然也没感觉记住了多少,总归是记住了一点。希望剩下来的复习一切顺利!