6.1.1 设备管理功能
一、设备的类型
按照不同的分类方法可以获得不同的外部设备的类型。下面是常用的三种分类方法:
1.按操作特性分类
按这种方法可把外部设备分为存储设备和输入/输出(I/O)设备。
2.按传输的信息特点分类
按这种方法可将外部设备分为字符设备和块设备
3.按系统和用户的观点分类
按这种观点可将外部设备分为系统设备和用户设备两种。
二、设备管理的功能
1.监视系统中所有设备的状态。
2.设备分配。
3.设备控制,它包括设备驱动和设备中断处理,具体的工作过程是在设备处理的程序中发出驱动某设备工作的 I/O 指令后,再执行相应的中断处理。
设备管理的任务主要包括以下 4 个方面
1.选择和分配输入输出设备,以进行数据传输。
2.控制输入输出设备与 CPU(或内存)之间的数据交换。
3.为用户提供统一、透明的设备接口,使用户程序不必涉及设备的具体细节。
4.提高设备与 CPU 之间以及设备与设备之间的并行操作度,以使计算机系统具有更高的效率。
6.2.1 程序直接方式
一、数据传送控制方式
现代计算机系统中,数据传送的控制方式主要包括
1.程序直接控制方式。
2.中断控制方式。
3.DMA 方式。
4.通道控制方式。
二、程序直接控制方式
程序直接控制方式是指由程序直接控制内存或 CPU 和外围设备之间进行信息传送的方式。通常又称为“忙—等”方式或循环测试方式。
在数据传送过程中,必不可少的一个硬件设备是 I/O 控制器,它是操作系统软件和硬件设备之间的接口,它接收 CPU 的命令,并控制 I/O 设备进行实际的操作。
三、程序直接控制方式的工作过程
由于数据传送过程中输入和输出的情况比较类似,下面只给出输出数据时的工作过程。
(1)把一个启动位为“1”的控制字写入该设备的控制状态寄存器。
(2)将需输出数据送到数据缓冲寄存器。
(3)测试控制状态寄存中的“完成位”,若为 0,转(2),否则转(4)。
(4)输出设备将数据缓冲寄存器中的数据取走进行实际的输出。
一、中断控制方式
设备控制器通过控制线向 CPU 发送中断信号,CPU 执行相应的中断程序来完成数据传送。这种方式使 CPU 与 I/O 设备之间能够并行操作,提高了 CPU 利用率。但它以字(节)为单位进行 I/O,效率仍然不高。
二、中断控制方式的工作过程
1.进程需要数据时,将允许启动和允许中断的控制字写入设备控制状态寄存器中,启动该设备进行输入操作。
2.该进程放弃处理机,等待输入的完成。操作系统进程调度程序调度其他就绪进程占用处理机。
3.当输入完成时,输入设备通过中断请求线向 CPU 发出中断请求信号。CPU 在接收到中断信号之后,转向中断处理程序。
4.中断处理程序首先保护现场,然后把输入缓冲寄存器中的数据传送到某一特定单元中去,同时将等待输入完成的那个进程唤醒,进入就绪状态,最后恢复现场,并返回到被中断的进程继续执行。
5.在以后的某一时刻,操作系统进程调度程序选中提出的请求并得到获取数据的进程,该进程从约定的内存特定单元中取出数据继续工作。
一、概念
DMA 方式又称直接存储器访问(Direct Memory Access)方式。其基本思想是在外设和主存之间开辟直接的数据交换通路以实现数据传送。
二、DMA 方式的特点
(1)数据传送的基本单位是数据块。
(2)所传送的数据是从设备送内存,或者相反。
(3)仅在传送一个或多个数据块的开始和结束时,才需中断 CPU,请求干预,整块数据的传送在 DMA 控制器控制下完成。
一、概念
通道控制方式与 DMA 方式相类似,也是一种内存和设备直接进行数据交换的方式。与 DMA 方式不同的是,在通道控制方式中,数据传送方向存放数据的内存始址及传送的数据块长度均由一个专门负责输入/输出的硬件——通道来控制。另外,DMA 方式每台设备至少需要一个 DMA 控制器,而通道控制方式中,一个通道可控制多台设备与内存进行数据交换。
二、通道指令包含的内容
(1)操作码:它规定指令所执行的操作,如读、写等。
(2)内存地址:标明数据传送时内存的首址。
(3)计数:表示传送数据的字节数。
(4)通道程序结束位 R0,表示通道程序是否结束。
(5)记录结束标志 R1,表示所处理的记录是否结束。
四、通道数据传输的步骤
(1)用户程序使用访管指令进入管理程序。
(2)CPU 根据用户的访管指令形成一个通道程序,并启动通道。
(3)通道处理器执行 CPU 为它组织的通道程序,控制完成指定的数据的输入输出传输操作。
(4)通道在执行完通道程序后向 CPU 发出中断请求。
(5)中断处理结束后,CPU 返回到被中断进程处继续执行。
通道传送的时间关系如下图
6.3.1 缓冲的引入
缓冲技术是用来在两种不同速度的设备之间传输信息时平滑传输过程的常用手段。在 OS 的设备管理中,引入缓冲技术的主要原因可归结为以下几点。
(1)缓和 CPU 与 I/O 设备间速度不匹配的矛盾。一般情况下,程序的运行过程是时而进行计算,时而进行输入或输出。以打印机输出为例,如果没有缓冲,则程序在输出时,必然由于打印机的速度跟不上而使 CPU 停下来等待;然而在计算阶段,打印机又无事可做。如果设置一个缓冲区,程序可以将待输出的数据先输出到缓冲区中,然后继续执行;而打印机则可以从缓冲区取出数据慢慢打印。
(2)减少中断 CPU 的次数。例如,假定设备只用一位二进制数接收从系统外传来的数据,则设备每接收到一位二进制数就要中断 CPU 一次,如果数据通信速率为 9.6Kb/s,则中断 CPU 的频率也是 9.6KHz,即每 100us 就要中断 CPU 一次,若设置一个具有 8 位的缓冲寄存器,则可使 CPU 被中断的次数降低为前者的 1/8。
(3)提高 CPU 和 I/O 设备之间的并行性。由于在 CPU 和设备之间引入了缓冲区,CPU 可以从缓冲区中读取或向缓冲区写入信息,相应地设备也可以向缓冲区写入或从缓冲区读取信息。在 CPU 工作的同时,设备也能进行输入输出操作,这样,CPU 和 I/O 设备就可以并行工作。
根据系统设置的缓冲器的个数,可把缓冲技术分为单缓冲、双缓冲、环形缓冲和缓冲池几种。
一、单缓冲
单缓冲是操作系统提供的最简单的一种缓冲形式。每当一个进程发出一个 I/O 请求时,操作系统便在主存中为之分配一缓冲区,该缓冲区用来临时存放输入/输出数据。
二、双缓冲
1.概念
解决外设之间并行工作的最简单的办法是设置双缓冲。在双缓冲方案中,具体的做法是为输入或输出操作设置两个缓冲区 buffer1 和 buffer2,一个用于输出另一个用于输入,如下图。
3.双缓冲方式的特点
双缓冲方式和单缓冲方式相比,虽然双缓冲方式能进一步提高 CPU 和外设的并行程度,并能使输入设备和输出设备并行工作,但是在实际系统中很少采用这一方式,这是因为在计算机系统中的外设很多,又有大量的输入和输出,同时双缓冲很难匹配设备和 CPU 的处理速度。因此现代计算机系统中一般使用环形缓冲或缓冲池结构。
三、环形缓冲
环形缓冲技术是在主存中分配一组大小相等的存储区作为缓冲区,并将这些缓冲区链接起来,每个缓冲区中有一个指向下一个缓冲的指针,最后一个缓冲区的指针指向第一个缓冲区,这样 n 个缓冲区就成了一个环。此外,系统中有个缓冲区链首指针 Start 指向第一个缓冲区,Out 指针指向当前取出数据的缓冲区,In 指针指向当前写入数据的缓冲区
对环形缓冲的操作即是利用 Out 指针和 In 指针对各缓冲区数据进行读写。这里需要考虑读写的同步。具体情况请同学们自己分析。
6.3.3 缓冲池技术
一、缓冲池的组成
从自由主存中分配一组缓冲区即可构成缓冲池。
缓冲池中的缓冲区一般有以下三种类型:空闲缓冲区、输入数据的缓冲区和输出数据的缓冲区
二、缓冲池的工作方式
缓冲区可以在收容输入、提取输入、收容输出和提取输出四种方式下工作。
1.管理
对缓冲池的管理由如下几个操作组成,其中,参数 type 表示缓冲队列类型,number 为缓冲区号,而 work_buf 则表示工作缓冲区类型。
(1)从三种缓冲区队列中按一定的选取规则取出一个缓冲区的过程 take_buf(type);
(2)把缓冲区按一定的选取规则插入相应的缓冲区队列的过程 add_buf(type,number);
(3)供进程申请缓冲区用的过程 get_buf(type,number);
(4)供进程将缓冲区放入相应缓冲区队列的过程 put_buf(type,work_buf)。
2.工作过程
使用这几个操作,缓冲池的工作过程可描述如下:
首先,输入进程调用 get_uf(emq,number)过程从空白缓冲区队列中取出一个缓冲号为 number 的空白缓冲区,将其作为收容输入缓冲区 hin,当 hin 中装满了由输入设备输入的数据之后,系统调用过程 put_buf(inq,hin)将该缓冲区插入输入缓冲区队列 inq 中。
另外,当进程需要输出数据数据时,输出进程经过缓冲管理程序调用过程 get_buf(emq,number)从空白缓冲区队列中取出一个空白缓冲区 number 作为收容输出缓冲区 hout,待 hout 中装满输出数据之后,系统再调用过程 Put_buf(outq,hout)将该缓冲区插入输出缓冲区队列 outq.
对缓冲区的输入数据和输出数据的提取也是由过程 get_buf 和 put_buf 实现的。get_buf(out,number)从输出缓冲队列中取出装满输出数据的缓冲区 number,将其作为 sout。当 sout 中数据输出完毕时,系统调用过程 put_buf(emq,sout)将该缓冲区插入空白缓冲队列。而 get_buf(inq, number)则从输入缓冲队列中取出一个装满输入数据的缓冲区 number 作为输入缓冲区 sin,当 CPU 从中提取完所需数据之后,系统调用过程 put_buf(emq,sin)将该缓冲区释放和插入空白缓冲队列 emq 中。
一、设备控制表
为管理系统中的外部设备,操作系统为每台设备开辟一个存储区,随时记录系统中每台设备的基本信息和使用情况,这个存储区被称为设备控制块(DCB)。
如下图所示,左侧的 DCB 表示系统中所有外部设备的 DCB 的集合。DCBi 给出了 DCB 中可能有的一些表项。不难理解,随着系统的不同,DCB 中所含的内容也不尽相同。
二、系统设备表 SDT
为管理设备,系统要有一张系统设备表 SDT。系统初启时,每个标准的及用户提供的外部设备,在该表里都有一个表目,表目内容有该设备的标识、所属类型以及它的设备控制块 DCB 的指针。在输入/输出时,系统从 SDT 得到设备的 DCB,然后从 DCB 里得到有关该设备的信息
在多进程系统中,由于进程要求设备数多于实际的设备数,因而必然引起进程对资源的争夺。为了使系统有条不紊地工作,也为了使用户能方便地使用外围设备,系统设备分配原则的基本原则是:合理分配设备,避免死锁发生,提高整个系统的利用率。
为此需要考虑:
1.设备特性。从设备的特性来看,可以把设备分成独占设备、共享设备和虚拟设备三类。
2.在应用程序中使用逻辑设备名来请求使用某类设备,因此系统必须将逻辑设备转换成具体的物理设备。
3.采用合适的设备分配算法。
为了使系统能够安全高效地工作,系统在进行设备分配时应考虑的因素有:⑴设备的固有属性;⑵设备的分配算法;⑶设备分配的安全性。
1.根据设备的固有属性而采取的策略
在分配设备时,首先应考虑设备的属性。根据设备的固有属性采取以下三种策略:
(1)独享方式
独享方式是指将一个设备分配给某进程后,便一直由它独占,直至该进程完成或释放该设备为止,系统才能将该设备分配给其它进程使用。这种分配方式是对独占设备采用的分配策略。它不仅往往造成设备利用率低,而且还会引起系统死锁。
(2)共享方式
共享方式是指将共享设备(磁盘)同时分配给多个进程使用。但是这些进程对设备的访问需进行合理的调度。
(3)虚拟方式
虚拟方式是指通过高速的共享设备,把一台慢速的以独占方式工作的物理设备改造成若干台虚拟的同类逻辑设备,这就需要引入 SPOOLing 技术。虚拟设备属于逻辑设备。
2.设备分配算法
与进程的调度算法相似,通常只采用以下两种分配算法:
(1)先来先服务
当多个进程同时向某一设备提出 I/O 请求时,该算法就根据对该设备提出请求的先后次序将这些进程排列成一个设备请求队列,设备分配程序把设备首先分配给队首进程。
(2)优先级高者优先
对优先权高的进程所提出的 I/O 请求赋予高优先权,在形成设备队列时,将优先级高的进程排在设备队列前面,先得到分配。而对于优先权相同的 I/O 请求,则按先来先服务原则排队分配。
6.5.1 磁盘结构与参数
一、磁盘格式化
磁盘盘面上有着薄薄的一层用于记忆的可磁化金属氧化物。刚生产出的磁盘上,没有任何信息存在。在它可被使用前,每个盘片必须通过软件对其进行低级格式化,也称“物理格式化”。
所谓“低级格式化”,指将磁盘的每个盘面划分成可供磁盘控制器进行读/写的扇区的过程。格式化后,盘面上就有了一系列同心的磁道,每个磁道包含若干数目的扇区。划分出的扇区格式如图所示。
前导码:位于每个扇区头部,记录着该扇区的有关信息,比如扇区号。磁盘控制器可根据这些信息识别一个扇区的开始,以及是哪一个扇区。
ECC 是纠错码的意思。在磁盘控制器往扇区写数据时,会根据所写数据计算出一个值对 ECC 进行更新。在对磁盘扇区读时,会根据所读数据重新计算 ECC 值,并与原存储的值进行比较。如果这两值不同,就表示该扇区的数据区已损坏,或该扇区变坏。
数据区:是扇区中存放数据的地方,其尺寸由进行低级格式化的程序决定,通常有几种选择:256 字节、512 字节或 1024 字节,大多数磁盘都选用 512 字节的扇区。
二、磁盘结构
经格式化后的磁盘结构如下图所示。
三、磁盘的编址方式
扇区是磁盘空间分配和进行 I/O 传输的数据单位。确定一个扇区需三个参数:柱面(磁道)号、盘面(磁头)号、扇区号。也就是说,扇区的物理地址是三维的。
一般应用时,是把磁盘上的所有扇区统一进行编号:0、1、2、……称为扇区的“逻辑块号”。扇区的物理地址是三维的,逻辑块号是一维的,因此有一个在这两种地址之间进行转换的问题。
数据信息是按柱面来存放的,同一柱面上的各磁道放满信息后,再存到下一个柱面上。所以,磁盘上磁盘块(即扇区)的编号是按柱面的顺序进行(从 0 开始),每个柱面按柱面的磁道顺序进行(从 0 开始),每个磁道按扇区顺序进行(从 0 开始)。
假定用 c 表示每个柱面上的磁道数,用 s 表示每个盘面上的扇区数,则第 i 个柱面、j 磁头、k 扇区所对应的磁盘块号 b 可以用如下的公式计算:
b=k+s´(j+i´c)
根据给出的磁盘块号为求第 p 个磁盘块在磁盘上的位置,令 D=s´c(每个柱面上拥有的磁盘块数),设 M=p/D,N=p%D(“/”和“%”表示整除和求余)。于是,求第 p 块在磁盘上位置的公式为:
柱面号=M; 磁头号=N/s; 扇区号=N%s
例子:一个磁盘组有 100 个柱面,每个柱面有 8 个磁道,每个盘面划分成 8 个扇区。现有含 6400 个记录的文件,记录大小与扇区尺寸同,编号从 0 开始。该文件从 0 柱面、0 磁道、0 扇区顺序存放。试问:(1)该文件第 3680 个记录存放在磁盘哪个位置?(2)第 78 柱面第 6 磁道第 6 扇区中应存放该文件的第几个记录?
第 3680 记录就放在第 3680 块中。由题知,每个柱面有 D=8´8=64 个扇区,N=3680%D=32。根据公式该块的位置为:
柱面号=3680/D=57(柱面); 磁头号=32/8=4(磁道)
扇区号=32%8=0(扇区)
第 78 柱面第 6 磁道第 6 扇区位置处存放的是:
磁盘块号=6+8´ (6+78´8) =5046(块)
即存放的是文件中编号为第 5046 个的记录(实际上应该是第 5047 个记录,因为记录号是从 0 开始算起的)。
一、磁盘的性能参数
磁盘驱动器工作时,以恒定的速度进行旋转。只有当磁头位于指定的磁道和该磁道中指定的扇区开始处时,才能够进行读或写操作。
对于磁盘,有三种时间需关注:把磁头定位到磁道所需时间,称“寻道时间”;磁头到达扇区开始位置的时间,称“旋转延迟”;一旦磁头被定位,磁头就对旋转通过它下面的扇区执行读操作或写操作,完成数据信息的传输,传输所花费的时间称“传送时间”。
在寻道时间、旋转延迟和传送时间中,寻道时间花费是最多的,因此在磁盘调度中主要考虑减少寻道时间。
二、调度策略
为了便于讨论,我们假设:磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。
1.先来先服务调度策略
(1)调度策略,是以 I/O 请求到达队列的时间顺序,作为选择为其提供服务的顺序。
(2)优点:简单,公平。
(3)缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
例子:
针对前面的假设,得到下图所示的磁头移动轨迹。
2.最短寻道优先调度策略
(1)算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
(2)优点:改善了磁盘平均服务时间。
(3)缺点:造成某些访问请求长期等待得不到服务。
3.扫描算法(电梯算法)
(1)算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复
(2)优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向。
4.单向扫描调度算法
(1)算法思想
● 总是从 0 号柱面开始向里扫描。
● 按照各自所要访问的柱面位置的次序去选择访问者。
● 移动臂到达最后一个柱面后,立即带动读写磁头快速返回到 0 号柱面。
● 返回时不为任何的等待访问者服务。
● 返回后可再次进行扫描。
(2)优点:算法实现简单
(3)不足:服务效率比扫描算法低。
本章的学习了 I/O 设备管理的目标、功能与任务,I/O 设备控制的主要方式及其特点。学习了主要的缓冲技术及其特点、应用范围。介绍了操作系统管理 I/O 设备的基本原理,讨论了设备分配的原则和策略。学习了磁盘的结构与参数,以及以磁头臂移动为基础的主要磁盘调度算法。