计算机的I/O系统是主机和外设之间的数据传送系统,目前主要有总线型结构和通道型结构两种类型。
与计算机相连接的外部设备有字符设备和块设备两种类型。
1 I/O设备的类型
设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。
设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。
设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:
设备控制器的基本功能:
设备控制器的组成:
设备控制器减少了CPU对I/O的操作,但是当I/O设备较多时,设备控制器的数量也会增加,于是又退化到了类似早期设备较少时的情形,因而CPU的负担仍然很重。
改进措施:
通道的任务:**由CPU处理的I/O任务转由通道承担,从而把CPU从繁杂的I/O任务中解脱出来。 ** 具体地,使数据的传送独立于CPU,使有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理,从而建立独立的I/O操作。 数据传输的过程:CPU↔内存↔主通道↔子通道↔设备控制器↔设备
通道类型 :
在早期的计算机系统中,由于无中断机构,处理机对I/O设备的控制,采取程序I/O方式(Programmed I/O方式)。
在程序I/O方式中,由于CPU的高速性和I/O设备的低速性,致使CPU 的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成对CPU的极大浪费。 这种轮询的方式中,因为在CPU中无中断机构,使 I/O设备无法向CPU报告它已完成了一个字符的输入操作,所以需要CPU不断地测试I/O设备的状态。效率非常低,一次可能读取不到一个字节,如图6-7所示。
程序I/O方式方式中,CPU主动挨个端口轮询是否有数据要处理,极大地浪费了CPU资源,从而使得整个系统的效率底下 中断驱动I/O控制方式将CPU主动轮询的方式做出了改进,CPU处于被动的位置,等到有设备请求进行输入数据的时候,才去响应,从而提高了CPU的利用率。 也就是说,引入中断之后,每当设备完成I/O操作,便以中断请求方式通知CPU,然后进行相应处理。但由于CPU直接控制输入输出操作,每传达一个单位信息。 相对程序IO方式,CPU资源得以有效地利用。但是每传达一个单位信息都要发生一次中断,仍然消耗大量CPU时间,因此速度较低。
DMA控制器(DMAC)是一种在系统内部转移数据的独特外设 可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器,如图6-8所示。 它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。 值得注意的是,通常只有数据流量较大(KBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口
DMA方式,在一定程度上提升了IO速度,把CPU从低效地IO操作中解脱出来,提高了CPU的利用率,从而提高了整个系统的效率。
特点:
2 DMA控制器的组成 :
在设备管理部分,存在的主要矛盾是高速的CPU和低速I/O设备之间速度不匹配的问题。 对于这种问题,处理的方法一般是增加缓冲。 类似的,在计算机网络通信中,高速发送设备和低速接收设备之间为了防止数据的丢失,也会增加缓冲区。
双缓冲,也成缓冲对换。在IO设备和CPU之间设置了两个缓冲区,使得它们能够交替访问不同的缓冲区,从而提高数据处理的效率。在输入与输出的速度基本匹配时可得到较好的效果,否则,由于缓冲区太少,不能缓解IO设备和CPU之间的速度压力。双缓冲退化为单缓冲。 存在问题:当速度不匹配时效果退化到单缓冲机制的程度。 解决办法:增加缓冲个数,按照循环链的方式组织缓冲区
(3)进程同步
在循环缓冲机制中,如果输入数据和读取数据的速度相当,则运行平稳;如果速度差异较大,则最出现所有缓冲区均为空而无数据可提取或者所有缓冲区均为满而无法输入数据的情况。因此,需要控制数据提取进程和数据输入进程的同步,防止出现与时间相关的错误。与时间相关的错误见第2章2.3.1节P28。 1) Nexti指针追上Nextg指针 输入速度>计算速度,系统受计算限制。 2) Nextg指针追上Nexti指针 输入速度<计算速度,系统受I/O限制。
从管理的层次看,设备的分配对象有两级,分别是作业级分配和进程级分配。
对作业级的分配工作,是在作业提交之后,开始执行前进行的。此时,系统按用户对设备的请求,将该作业所需要的有关设备及相关的通道和设备控制器资源,全部一次性的分给作业,直到作业用完自动释放归还给系统为止。这种分配方式属于静态分配。
进程级的分配,一般由在CPU上运行的进程,根据任务需要,通过系统功能调用提出I/O请求,设备分配程序按一定的策略将可用的设备分配给有I/O请求的进程。同时,还分配与设备相关的通道和设备控制器,以确保在CPU与外设之间形成一条有效的数据通路。由于这种分配是在执行中动态完成的,设备用完后又必须立即释放,所以,属于动态分配。
设备分配是对进程使用外设过程的管理
系统中的每台设备都有一张设备控制表(DCT)。在DCT中充分体现出了设备的类型、标识符、状态(忙/闲)、重复执行次数、设备号以及与该设备相连的设备控制器的地址和等待使用该设备的进程队列。
系统为每个控制器配置一张用于记录本控制器情况的表,称为控制器控制表(COCT)。 系统为每个通道都配置一张通道控制表,通道控制表(CHCT)。
系统设备表:
设备分配的总原则:合理使用外设(公平和避免死锁),提高设备使用率。
(1)先来先服务FCFS
(2)优先级高者优先
3 设备分配的安全性
【建议】在设备分配算法中增加安全性检查。比如银行家算法。 【分析】不安全分配方式可能造成分配不安全是因为有满足死锁成立的条件,即存在请求与保持。也可以认为该分配方式采用的是鸵鸟算法。如果出现死锁是小概率事件,那么用诸如银行家算法之类的死锁避免算法,尽管能够防止死锁的发生,但是从性价比的角度考虑是得不偿失。
绝对号(或物理设备名):
相对号(或称逻辑设备名):
有了设备的绝对号和相对号后,用户编制程序使用的设备与实际使用的设备无关,这就是设备的独立性。
(2)设备独立性优点
将一台物理的IO设备虚拟为多台的逻辑IO设置,这样多个用户就可以共享一台物理IO设置了。
虚拟设备技术假脱机操作(Simultaneous Peripheral Operations On-Line,SPOOLing),利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。 利用假脱机技术,可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率。
由于我们的多道程序技术引入后,我们的利用专门的外围控制机就可以使用程序来进行模拟了。
1)高速虚拟I/O操作:
应用程序的虚拟I/O比实际I/O速度提高,缩短应用程序的执行时间(尽快完成计算,并释放占用的计算机资源)。 另一方面,程序的虚拟I/O操作时间和实际I/O操作时间分离开来。
2)实现对独享设备的共享: 由SPOOLing程序提供虚拟设备,可以对独享设备依次共享使用。
CPU和内存的访问速度比磁盘要快若干个数量级,磁盘系统的性能对整个系统的性能有重要影响,磁盘设备管理的目标就是提高磁盘系统的性能。
温彻斯特硬盘
1973年,IBM研制成功了一种新型的硬盘IBM3340。IBM3340拥有两个30MB的存储单元,而当时一种很有名的“温彻斯特来复枪”的口径和装药也恰好包含了两个数字“30”;于是这种硬盘的内部代号就被定为“温彻斯特”。温彻斯特硬盘拥有几个同轴的金属盘片,盘片上涂着磁性材料。它们和可以移动的磁头共同密封在一个盒子里面,磁头能从旋转的盘片上读出磁信号的变化。温彻斯特硬盘的参数包括磁头数(heads)、柱面数( tracks)、扇区数和字节数。各个盘面上的同一磁道组成一个柱面。每个磁道有30个扇区。每个扇区存储600个字节,其中512个字节存储数据,其余字节存储控制信息。
2磁盘的类型
磁盘的物理构造决定了一次磁盘的I/O操作。物理记录的位置必须由柱面号,磁头号(盘面号)和扇区号三个参数共同确定。如何确定这三个参数是磁盘访问成功的关键。
先进先出(FCFS)算法
优先级算法
后进先出(LIFO算法)
短查找时间优先(SSTF算法)
扫描(SCAN)算法
循环扫描(C-SCAN)算法
N步扫描算法
双队列扫描(FSCAN)算法