【操作系统】OS资源管理之设备管理

写在前面

  • 关于文章
    设备管理是操作系统的主要功能之一,它负责管理所有输入输出设备以完成期望的数据传送。设备管理可能是操作系统设计中最凌乱的部分,这主要是由于计算机系统中存在着大量的输入/输出设备,其性能和应用特点可能完全不同。所以要建立一个通用的、一致的设备访问接口,使用户和应用程序开发人员能够方便地使用输入/输出设备,而无须关心每种设备各自的特性,这正是设备管理的主要目的。

设备与设备分类

输入/输出设备(I/О设备)也称为外部设备( Peripheral Device) ,有时简称为设备或外设,包括计算机系统中除CPU和内存储器以外的所有的设备和装置,还包括所有外部存储设备

设备管理的重要性

操作系统复杂和庞大的主要原因是它所管理的资源的庞杂和并发技术的采用,而I/O设备的庞杂正是操作系统所管理的资源庞杂的主要原因,I/O设备的速度远低于处理器的速度正是导致并发技术产生的直接原因

各种外部设备功能和速度的差异以及工作过程的复杂多样性导致了整个硬件IО过程的复杂多样,再加上用户要求的多样性,CPU进程划分的多样性,就最终导致了具体操作系统的I/O接口和数据结构与算法的多样性。

因此,设备管理在操作系统中具有十分重要的地位,它是操作系统总体性能的重要决定因素、重要表现指标和常见瓶颈之一。

设备管理的任务

  • I/O设备的性能经常成为系统性能的瓶颈。CPU性能越高,I/О设备性能同CPU性能不匹配的反差也越大。如何消解这一矛盾是设备管理的一项重要任务,操作系统主要通过缓冲技术、中断技术和虚拟技术解决这一问题。
  • I/O设备千变万化,怎样对它们实现统一的管理,从而方便用户使用是设备管理的一项重要任务。为此,操作系统需要在设备管理和系统的其他部分之间提供简单而易于使用的接口,这个接口对于所有设备都应该是相同的,这就是所谓的设备独立性。
  • 用户对I/О设备的使用必须是安全的。对于设备的使用者而言,由设备传送或管理的数据应该是安全和保密的,不能破坏或泄露;对于设备的拥有者而言,多用户多任务环境中的设备使用应该通过协调避免冲突,设备不能被破坏。如何保证安全正确地使用设备,也是设备管理的重要任务。

设备分类

按使用特性分类

  • I/O设备计算机与外部世界交换信息的设备
    • 输入设备是计算机用来接受指令和数据等信息的设备,键盘、鼠标等是常见的输入设备
    • 输出设备是计算机用来传送处理结果的设备,常用的输出设备有显示器、打印机等。

    在计算机数据采集和过程控制等应用中,各种传感器、传动器、模拟/数字转换器,数字/模拟转换器等也属于I/O设备,这类设备将外部世界的模拟信号转换成计算机能够识别的数字信息输入计算机进行处理,并且将处理结果转换成模拟量以驱动执行结构达到控制的目的。
    调制解调器、网络适配器(网络接口卡)等数据通信设备也属于IO设备,这类设备用于构建计算机网络通信系统。

  • 存储设备计算机用来存放信息的设备。例如磁带﹑磁盘、光盘,U盘等各种外存设备。其中,可移动的磁带或磁盘在用于不同机器间传送数据时也可看作是I/О设备。

按信息组织方式分类

  • 字符设备( character device)键盘、终端、打印机等以字符为单位组织和处理信息的设备被称为字符设备。字符设备通常以字符为单位发送或者接收字符流,而不存在任何块结构。字符设备不可寻址,所以没有任何寻址操作。除磁盘以外的大多数设备,例如网络接口卡,打印机,鼠标等可看作字符设备。
  • 块设备( block device)。磁盘﹑磁带等以数据块为单位组织和处理信息的设备被称为块设备。块设备的基本特性是能够随时读写其中的任何一块而与所有别的块无关。外存类设备通常是块设备,因其记录长度通常为一个数据块,例如磁盘的扇区或者由若干扇区组成的簇。

划分字符设备和块设备主要是依据设备记录信息的特性,它决定了设备一次操作的数据传送单位和内部是否可寻址。

按共享属性分类

  • 共享设备在一段时间内允许多个进程使用的设备磁盘是典型的共享设备,若干个进程可以交替地从磁盘上读写信息。
  • 独占设备在一段时间内只允许一个进程使用的设备。也称为独享设备,系统一旦把这类设备分配给某个进程后,便由该进程独占,直到用完释放。打印机是典型的独占设备。
  • 虚拟设备利用虚拟技术把独占设备改造成可由多个进程共享的设备。独占设备的使用效率低是造成死锁的条件之一,为此引入了虚拟设备的概念。SPOOLing 系统是一种非常重要的虚拟设备技术

I/O硬件组成

I/O系统结构

从硬件的角度看,一个典型的计算机IО系统结构为中央部分是CPU和主存,通过总线与第二层的接口(适配器)部件相连,第三层是各种外围设备控制器,最外层是外围设备。每一种外围设备在它自己的设备控制器的控制下工作,而设备控制器则通过适配器和主机连接

每个设备控制器都有若干个寄存器用来与CPU进行通信,包括控制寄存器,状态寄存器和数据寄存器。

  • 通过写入控制寄存器,操作系统可以控制设备发送数据、接收数据、开启或关闭。
  • 通过读取状态寄存器,操作系统可以获悉设备的状态,如是否准备好接收新的数据。
  • 数据寄存器通常作为操作系统可以读写的数据缓冲区
/*
为了使CPU能够访问设备控制器中的寄存器,必须为每个寄存器分配唯一的地址,该地址称为I/О端口地址或I/О端口号。I/O端口地址主要有两种编址方式:内存映射编址和IO独立编址。
内存映射编址是分配给系统中所有端口的地址空间与内存地址空间统一编址,处理器把设备控制器中的寄存器看作一个存储单元,对I/О的读写操作等同于对存储器的操作,这样的系统称为内存映射I/O(Memory-Mapped I/O)。大部分处理器采用内存映射I/О。
I/O独立编址是分配给系统中所有端口的地址空间与内存地址空间是完全独立的。采用I/O独立编址的CPU需要使用专门的I/O指令对I/О端口进行操作。
*/

操作系统并不直接与设备本身打交道,而是与设备控制器打交道,也就是说操作系统通过对设备控制器中的寄存器进行读写操作与设备交换数据

数据传送控制方式

程序直接控制方式

程序直接控制方式也称为PIO( Programmed 1/o,程控I/O)方式,是指由用户进程直接控制内存或CPU和外围设备之间进行信息传送的方式,也称为“忙-等”方式.轮询方式或循环测试方式,这种方式的控制者是用户进程

/*
当用户进程需要从外围设备输入数据时,它通过CPU发出启动设备准备数据的启动命令(通常是把一个启动位为1的控制字通过数据总线写入设备的控制寄存器中)。然后用户进程进入测试等待状态。在等待时间,CPU不断地用一条测试指令检查设备的状态寄存器是否为完成状态(通常是检测状态寄存器的完成位是否为1) ,而外围设备只有将输入数据送入数据缓冲寄存器之后,才将该寄存器置为完成状态。当CPU检测到设备的状态寄存器为完成状态,则从设备的数据缓冲寄存器读取数据到内存或CPU。
*/

优点:CPU和外设的操作能通过状态信息得到同步,而且硬件结构比较简单

缺点:CPU效率较低,传输完全在CPU控制下完成,对外部出现的异常事件无实时响应能力

程序直接控制方式只适用于那些CPU执行速度较慢,而且外围设备较少的系统,如单片机系统。


I/O设备数据传送控制方式中,实现程序直接控制方式需要的关键部件包括设备状态寄存器、地址总线和数据总线、设备控制寄存器、设备数据缓冲区和地址译码器不包括设备触发器

中断控制方式

/*
中断是在发生了一个异常事件时,调用相应处理程序(通常称为中断服务程序)进行服务的过程。
中断源一旦需要CPU为其服务时,就向CPU发出请求,CPU一般在当前指令执行完且状态为允许中断的情况下响应该请求。并由硬件自动关中断(防止在保留断点和程序转移过程中又有新的中断请求发生)、保留断点﹑转到相应的中断服务程序人口处。然后执行中断服务程序,由软件完成中断服务。中断服务程序结束时,执行中断返回指令返回断点处,继续执行原程序。
*/

中断服务程序与中断时CPU正在执行的进程是相互独立的,相互不传递数据。

如要采用中断方式进行数据传送,则CPU和设备控制器就应具备中断机构。要求:

  • CPU一侧应具备的功能包括:
    • 具备识别中断请求的能力
    • 具备响应中断的能力(自动关中断、保留断点、转中断处理程序)
    • 当需要时,能拒绝响应外部中断请求
    • 具备按优先级响应中断请求的能力
      上述功能需要相应的电路支持,即需要设置寄存中断状态的“中断允许触发器”,能保留断点和恢复断点的具有先进后出功能的堆栈、中断判优电路及其他相关电路。

  • 设备控制器一侧应具备的功能要具备寄存外设中断请求的能力。

处理过程:

(1) CPU通过数据总线发出命令,启动外设工作,当前进程阻塞,调度程序调度其他进程;(2)外设数据准备好,置位中断请求触发器;
(3)若此时接口中断屏蔽触发器状态为非屏蔽状态,则接口向CPU发中断请求( IR);(4)CPU接受中断请求,且中断为允许中断状态,则中断判优电路工作;
(5)中断判优电路对优先级最高的中断请求给予响应(INTA) ,CPU中断正在执行的其他进程,转而执行中断服务程序。

优点:

  • (1)CPU与外设在大部分时间内并行工作,有效地提高了计算机的效率。CPU启动外设后,不需要去查询其工作状态,可继续执行主程序,因此两者可并行工作。等外设将数据准备好后,主动申请中断CPU的工作,请求服务。
  • (2)具有实时响应能力,可适用于实时控制场合。外部中断源始终处于主动地位,随时可请求CPU为其服务。可保证实时控制中现场的许多实时信息随时得到响应。
  • (3)及时处理异常情况,提高计算机的可靠性。计算机在运行过程中,往往可能出现一些意想不到的情况或发生一些故障。利用中断功能就可以及时进行处理,而不至于造成无可挽回的局面。

缺点:

  • 中断方式交换数据时,每处理一次I/О数据交换都会耗去一定的CPU处理时间,对于一些高速的外围设备以及成组交换数据的情况,仍然显得速度太慢。

IO设备数据传送控制方式中,实现中断控制方式需要中断控制器、地址总线和数据总线、设备控制器关键部件。

DMA控制方式

DMA是直接内存访问( Direct Memory Access)的缩写,它是一种完全由硬件执行IО数据交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I)设备之间进行。采用DMA方式工作时,由DMA控制器向内存发出地址和控制信号,进行地址修改,对传送字的个数计数,并且以中断方式向CPU报告传送操作的结束。

DMA方式的数据块传送过程可分为三个阶段:传送前预处理、数据传送、传送后处理。

/*
预处理阶段——由CPU执行I/O指令对DMAC进行初始化与启动。
数据传送阶段——由DMAC控制总线进行数据传输。当外设数据准备好后发DMA请求,CPU当前机器周期结束后响应DMA请求, DMAC 从 CPU接管总线的控制权,完成对内存寻址,决定数据传送的内存单元地址,对数据传送字进行计数,执行数据传送的操作。
后处理阶段——传送结束,DMAC向CPU发中断请求,报告DMA操作结束。CPU响应中断,转入中断服务程序,完成DMA结束处理工作,包括校验数据,决定是否结束传送等。
*/

DMA方式一般用于高速传送成组的数据

优点:操作均由硬件电路实现,传输速度快;CPU仅在初始化和结束时参与,对数据传送基本上不干预,可以减少大批量数据传输时CPU的开销;CPU与外设并行工作,效率高。

缺点:因为DMA方式在初始化和结束时仍由CPU控制,因此,在大型计算机系统中,增加了CPU的负担和降低计算机系统的并行工作程度。

实现DMA控制方式需要DMA控制器、地址总线和数据总线

通道控制方式

通道( channel)是一个特殊功能的处理器,它有自己的指令和程序,可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。引入通道的目的是为了进一步减少数据输入输出对整个系统运行效率的影响。

优点:通道方式增加了CPU与通道操作的并行能力;增加了通道之间以及同一通道内各设备之间的并行操作能力;为用户提供了灵活增加外设的可能性。

按照信息交换方式的不同,一个系统中可以设立三种类型的通道,即选择通道,数组多路通道和字节多路通道

  • 选择通道是一种高速通道,在物理上它可以连接多个设备,但是这些设备不能同时工作,在某一段时间内通道只能选择一个设备进行工作。选择通道主要用于连接高速外围设备,如磁盘、磁带等,信息以成组方式高速传输。其优点是以数据块为单位进行传输,传输率高;缺点是通道利用率低。
  • 数组多路通道是对选择通道的一种改进,它的基本思想是当某个设备进行数据传送时,通道只为该设备服务;当设备在执行寻址等控制性动作时,通道暂时断开与这个设备的连接,挂起该设备的通道程序,去为其他设备服务,即执行其他设备的通道程序。其优点是同选择通道一样,以数据块为单位进行传输,传输率高;又具有多路并行操作的能力,通道利用率高。缺点是控制复杂。
  • 字节多路通道是一种简单的共享通道,在分时的基础上为多台低速和中速设备服务。它的主要特点是:各设备与通道之间的数据传送是以字节为单位交替进行的,各设备轮流占用一个很短的时间片;多路并行操作能力与数组多路通道相同。

通道具有如下功能:

  • (1)接受CPU的指令,按指令要求与指定的外围设备进行通信。
  • (2)从内存读取属于该通道的指令,并执行通道程序,向设备控制器和设备发送各种命令。
  • (3)组织外围设备和内存之间进行数据传送,并根据需要提供数据缓存的空间,以及提供数据存入内存的地址和传送的数据量。
  • (4)从外围设备得到设备的状态信息,形成并保存通道本身的状态信息,根据要求将这些状态信息送到内存的指定单元,供CPU 使用。
  • (5)将外围设备的中断请求和通道本身的中断请求,按序及时报告CPU。


I/O设备数据传送控制方式中,实现通道控制方式需要关键的软硬件部件有通道控制器、设备控制器、通道程序代码与地址总线和数据总线

I/O软件特点及结构

设计I/О软件的一个最关键的目标是设备独立性( Device Independence) ,也就是说,除了直接与设备打交道的低层软件之外,其他部分的软件并不依赖于硬件。I/O软件独立于设备,就可以提高设备管理软件的设计效率,当IO设备更新时,没有必要重新编写全部IО软件。

为此,l/O设备管理软件的结构,其基本思想是分层构造,也就是说把设备管理软件组织成为一系列的层次,其中低层与硬件相关,它把硬件与较高层次的软件隔离开来。而最高层的软件则向应用提供一个友好的,清晰而统一的接口。I/O软件一般可以分为四层:中断处理程序,设备驱动程序,与设备无关的操作系统软件,用户级软件(指用户空间的I/О软件)

设备驱动程序

设备驱动程序是直接同硬件打交道的软件模块,设备驱动程序中包括了所有与设备相关的代码。一般而言,设备驱动程序的功能是从与设备无关的软件中接收抽象的请求,并进行与设备相关的处理。

设备驱动程序最突出的特点是它与I/O设备的硬件结构密切联系。设备驱动程序是操作系统底层中唯一知道各种输入/输出设备的控制器细节以及其用途的部分。

与设备无关的系统软件

除了一些I/О软件与设备相关之外,大部分软件是与设备无关的。至于设备驱动程序与设备无关的软件之间的界限如何划分,则随操作系统的不同而变化。具体划分原则取决于系统的设计者怎样考虑系统与设备的独立性、驱动程序的运行效率等诸多因素的平衡。

一般而言,所有设备都需要的I/O功能可以在与设备独立的软件中实现。这类软件面向应用层并提供一个统一的接口。

  • 统一命名在操作系统的I/О软件中,对IО设备采用了与文件统一命名的方法,即采用文件系统路径名的方法来命名设备。
  • 设备保护
    对设备进行必要的保护,防止无授权的应用或用户的非法使用,是设备保护的主要作用。
  • 提供与设备无关的逻辑块与设备无关的软件有必要向较高层软件屏蔽各种I/О设备空间大小、处理速度和传输速率各不相同这一事实,而向上层提供大小统一的逻辑块尺寸。这样,较高层的软件只与抽象设备打交道,不考虑物理设备空间和数据块大小而使用等长的逻辑块。这些差别在这一层都隐藏起来了。
  • 缓冲
    对于常见的块设备和字符设备,一般都使用缓冲区。对块设备,由于硬件一般一次读写一个完整的块,而用户进程是按任意单位读写数据的。如果用户进程只写了半块数据,则操作系统通常将数据保存在内部缓冲区,等到用户进程写完整块数据才将缓冲区的数据写到磁盘上。对字符设备,当用户进程把数据写到设备的速度快于系统输出数据的速度时,必须使用缓冲。
  • 存储设备的块分配
    在创建一个文件并向其中填人数据时,通常在硬盘中要为该文件分配新的存储块。为完成这一分配工作,操作系统需要为每个磁盘设置一张空闲块表或位图,这种查找一个空闲块的算法是与设备无关的,因此可以放在设备驱动程序上面的与设备独立的软件层中处理。
  • 独占设备的分配和释放
    有一些设备,如打印机驱动器,在任一时刻只能被某个进程使用。这就要求操作系统对设备使用请求进行检查,并根据申请设备的可用状况决定是接收该请求还是拒绝该请求。
  • 出错处理
    一般来说出错处理是由设备驱动程序完成的。大多数错误是与设备密切相关的,因此只有驱动程序知道应如何处理(比如,重试,忽略或放弃)。但是也有一些典型的错误不是输入/输出设备的错误造成的,如果在读一个用户文件时出现错误,操作系统会将错误信息报告给调用者。若在读一些关键的系统数据结构时出现错误,比如磁盘的空闲块位图,操作系统则需打印错误信息,并向系统管理员报告相应错误。

用户空间的I/О软件

一般来说,大部分I/O软件都包含在操作系统中,但是用户程序仍有一小部分是与库函数连接在一起的,甚至还有在内核之外运行的程序构成。通常的系统调用,包括I/О系统调用,通常先是库函数实现。

典型I/O技术

缓冲技术

计算机系统中各个部件速度的差异是明显的。中央处理机的速度以毫微秒甚至纳秒计,外部设备的处理速度则一般以毫秒甚至秒计。在不同时刻,系统各部分的负荷也常常很不均衡。例如,某进程在一段相当长的时间内可能只是进行计算而无任何I/О操作,有时它又在很短时间内产生大量数据要求输出。虽然中断和通道技术为系统各部分并行工作提供了可能,但是由于中央处理机和外部设备速度不匹配以及工作不均衡,它们的并行程度并不能得到充分发挥

系统中通常有多个进程并发运行,它们或共享或各独占一个或几个外部设备。为了解决中央处理机和外部设备的速度不匹配和负荷不均衡问题,为了提高各种设备的工作效率,增加系统中各部分的并行工作速度,在系统中设置多个可以公用的缓冲存储区是有益的。

缓存技术是以空间换取时间,而且它只能在设备使用不均衡时起到平滑作用

如果在相当长的一段时间内,进程提出的输入/输出要求超出了相应设备不间断工作所能完成的总量,那么一旦缓存已全部存放了1O信息后,多缓存的作用也就基本消失。

缓冲技术是计算机系统中常用的技术。一般,凡是数据到达速度和离去速度不匹配的地方都可以通过设置缓冲区,以缓解处理机与设备之间速度不匹配的矛盾,并减少对CPU的I0中断次数从而提高资源利用率和系统效率

缓冲区可以由硬件实现,称为硬缓冲。硬缓冲区通常设置在设备(如打印机)中。
缓冲区也可以由软件实现,即在内存空间中开辟专门用于数据传输过程中暂存数据的区域。

在操作过程中,通常采用单缓冲、双缓冲、多缓冲和缓冲池技术。

在单缓冲情况下,输入时通道先将数据送入缓冲区,CPU从缓冲区读取数据处理;通道再送入后续数据,如此反复,直到输入任务完成。输出情形正好相反。由于缓冲区属于互斥区,所以单缓冲并不能明显改善 CPU与外部设备的并行性

在双缓冲情况下,分别设置输入缓冲区和输出缓冲区,则CPU和通道可以分别访问两个缓冲区,即在CPU访问一个缓冲区的同时,通道可以访问另一个缓冲区。这就明显提高了效率。

在双缓冲基础上,又发展了多缓冲。即设置一组输人缓冲区和一组输出缓冲区。但由于缓冲区也属于系统中的重要资源,为了提高其利用率,一般将系统中所有缓冲区集中起来统一管理,构成缓冲池(缓冲区队列)。缓冲池属于操作系统空间,用户程序不能直接对其进行操作,只能通过系统调用进入操作来间接使用它们

设备分配技术

在计算机系统中,设备、控制器和通道等资源是有限的,并不是每个进程随时都可以得到这些资源,它首先需要向设备管理程序提出申请,然后由设备管理程序按照一定的分配算法给进程分配必要的资源。如果进程的申请没有成功,就要在资源的等待队列中排队等待,直到获得所需的资源。

任何算法的实现都离不开数据结构的支撑

在设备分配算法的实现中,常采用的数据结构主要含四张表:

  • 系统设备表SDT在SDT表中,每个接入系统中的外围设备都占有一个表目项。登录了该设备的名称、标识及设备控制表DCT的入口地址等相关的信息。SDT表在整个系统中只有一张,全面反映了系统中的外设资源的类型、数量、占用情况等。
  • 设备控制表DCT系统中的每台设备都有一张设备控制表DCT。在 DCT中充分体现出了设备的各方面特征,以及与该设备相连的设备控制器的情况,并保存了控制器块的入口位置。
  • 控制器控制表COCT每个控制器都有一张控制器控制表COCT ,用于登录某控制器的使用分配情况及与该控制器相连的通道的情况。
  • 通道控制表CHCTCHCT表反映了通道的情况,系统中的每个通道都有一张CHCT。

与进程的调度相似,设备的分配也需要一定的策略,通常采用先来先服务(FIFO)和高优先级优先等策略。

  • 先来先服务策略当多个进程同时对一个设备提出I/О请求时,系统按照进程提出请求的先后次序,把它们排成一个设备请求队列,并且总是把设备首先分配给排在队首的进程使用。
  • 高优先级优先策略给每个进程提出的IО请求分配一个优先级,在设备请求队列中把优先级高的排在前面,如果优先级相同则按照FIFO 的顺序排列。这里的优先级与进程调度中的优先级往往是一致的,这样有助于高优先级的进程优先执行、优先完成。

I/O性能问题及解决方案

I/О性能常常成为系统性能的瓶颈,因此提高I/О性能十分重要。在解决这一问题时的一个总思路是使CPU 利用率尽可能不受I/O的影响。
为达到此目标,可以采用如下各种技术以提高I/О性能:

  • (1)通过应用缓冲技术,解决传输速度差异的问题。
  • (2)通过应用异步I/O技术,使CPU不必等待I/О的操作结果。
  • (3)通过应用DMA和通道部件,使CPU与这些部件能够并行执行。
  • (4)通过应用虚拟设备技术,减少进程阻塞时间,提高独占设备的利用率。

微信关注

WeChat

 

阅读剩余
THE END