设备管理概述
操作系统的设备管理,又称为I/O管理,它负责管理设备和控制I/O传输操作。
设备分类:
存储设备
存储设备又称块设备,是存储信息的设备,如:磁盘、 磁鼓 (以块为单位传输信息) 。
输入输出设备
输入输出设备又称字符设备,能将信息从计算机外部输入到机内,或反之,如:键盘、显示器、打印机 (以子符为单位传输信息) 。
通信设备
通信设备负责计算机之间的信息传输,如调制解调器、网卡等。
设备管理的目标
(1) 提高设备利用率
① 合理分配设备
② 提高设备与CPU、各外部设备之间的并行性
(2) 方便用户的使用
提供使用方便且独立于设备的界面
① 统一:对各种不同的设备提供一致的界面
② 独立于设备:用户使用的设备与物理设备无关
(可以看成具有良好的封装性)
设备管理的三大功能
(1) 状态跟踪
动态地记录各种设备的状态。设备状态信息保留在设备控制块中。
(2) 设备分配与回收
① 静态分配 —— 应用程序级
程序进入系统时进行分配,退出系统时收回全部资源。
② 动态分配 —— 进程级
进程提出设备申请时进行分配,使用完毕后立即收回。
(3) 设备控制
实施设备驱动和中断处理的工作。
设备独立性
所谓设备独立性是指,用户在程序中使用的设备与实际使用的设备无关,也就是在用户程序中仅使用逻辑设备名。
② 逻辑设备名
逻辑设备名,是用户自己指定的设备名 (或设备号),它是暂时的、可更改的。
③ 物理设备名
物理设备名,是系统提供的设备的标准名称,它是永久的、不可更改的。
两种类型的设备独立性
① 一个程序独立于分配给它的某种类型的具体设备
系统可以根据设备的使用情况,动态地分配给程序某类设备中的任一台物理设备,程序都能正确地执行。
② 程序应尽可能与它所使用的I/O设备类型无关
在输入 (或输出)信息时,信息可以从不同类型的输入 (或输出)设备上输入 (或输出),若要改变输入 (或输出) 设备的类型,程序只需进行最少的修改。
优点:
很明显,方便用户、改善设备利用率、提高系统的可扩展性和可适应性
逻辑设备描述器ldd:
描述了进程的逻辑设备和物理设备名的对应关系。
设备独立性的实现
① 在高级语言中用软通道实现
使用高级语言提供的指派语句,通过指派一个逻辑设备名(通道号)来定义一个设备或文件。
如:fd = open(“/dev/lp”, mode)
② 在批处理系统中,用联接说明语句来定义
如:OUTPUT1 = LPT
③ 在交互系统中,用指派命令来定义
如:PDP系列机上的RT11系统
ASSIGN 设备物理名 设备逻辑名
设备控制块DCB
系统为每一台设备都配置了一个用来记录设备的硬件特性、连接和使用情况的一组数据,称为设备控制块。
① 设备名
设备的系统名,即设备的物理名。
② 设备属性
描述设备现行状态的一组属性。
③ 命令转换表
转换表包含设备特定的I/O例程地址,不具备相应功能的设备在其例程地址上可以填“-1”。
缓存技术
缓冲是两种不同速度的设备之间传输信息时平滑传输过程的常用手段。
缓冲类别:
① 缓冲器
缓冲器是用来暂时存放数据的一种存储装置,它容量较小,存取速度快。
② 软件缓冲
在I/O操作期间用来临时存放I/O数据的一块存储区域。
引入缓冲的目的:
① 处理数据流的生产者与消费者间的速度差异
如:从调制解调器收到一个文件,并保存到硬盘上。
② 协调传输数据大小不一致的设备
如:在计算机网络中用来处理消息的分段和重组。
③ 应用程序的拷贝语义
如:操作系统需要保证系统调用write的正确语义 (应用程序要写入磁盘的数据就是write系统调用发生时的版本)。
方法:在系统调用返回前将应用程序缓冲区复制到内核缓冲区。
利用缓冲技术进行I/O操作
进程活动时,读入数据
步骤:
ⅰ 当用户要求在某个设备上进行读操作时,首先从系统中获得一个空的缓冲区 (图中标注的操作①);
ⅱ 将一个物理记录送到缓冲区中 (图中标注的存在②) ;
ⅲ 当用户请求这些数据时,系统将依据逻辑记录特性从缓冲区中提取并发送到用户进程存储区中 (图中标注的操作③) ;
ⅳ 当缓冲区空而进程又要从中取用数据时该进程被迫等待。此时,操作系统需要重新送数据填满缓冲区,进程才能从中取数据继续运行。
要注意操作②与操作③的同步关系
进程活动时,输出数据
步骤:
ⅰ 当用户要求进行写操作时,首先从系统中获得一个空的缓冲区 (图中标注的操作①) ;
ⅱ 将一个逻辑记录从进程存储区传送到缓冲区中 (图中标注操作②) ;
ⅲ 当缓冲区写满时,系统将缓冲区的内容作为物理记录文件写到设备上,使缓冲区再次为空 (图中标注的操作③) ;
ⅳ 只有在系统还来不及腾空缓冲区之前,进程又企图输出信息时,它才需要等待。
要注意操作②与操作③的同步关系
上述在保证BUF写、输入是满的前提下再进行输出、输入操作是为了保证数据的可靠性
双缓冲
在双缓冲方案下,为输入或输出分配两个缓冲区buf1 、 buf2 。
①输入设备先填满BUF1
②进程从BUF1提取数据的同时,输入设备填充BUF2
③当BUF1空、BUF2满时,进程又可从BUF2提起数据,与此同时,输入设备又填充BUF1
还可以使用缓冲池。
UNIX系统的缓冲区管理
目的:
加快系统响应、增强系统吞吐量
减少对磁盘的I/O操作次数
UNIX系统缓冲管理的思路
当进程要从磁盘读数据时,首先考虑从高速缓冲中读———–预先缓存
当进程要写数据到磁盘时,先写入高速缓冲中———–延迟发送
缓冲区队列结构
ⅰ 设备缓冲区队列
与某类设备有关的所有缓冲区组成的队列称为设备缓冲区队列,简称b链。
ⅱ 空闲缓冲区队列
可供重新分配使用的缓冲区组成的队列称为空闲缓冲区队列,简称av链。
步骤:
ⅰ 一个buf被分配用于读/写某设备上的块时置B_ BUSY=1,位于b链上,不在av链上;
ⅱ 当读/写操作结束时释放该buf,置B_BUSY=0,仍留在b链上,并送入av链尾;
- 在空闲缓冲区队列中的缓存,只要还没有重新分配就保持原有内容不变
ⅲ 若进程需要的信息在buf中时在该设备的b链上找到,置B_BUSY=1;从av链上摘除,使用完后,又送入av链,链入队尾。
ⅳ 对空闲buf空队列的处理
当需要一个空闲buf时,总是取空闲buf队列(av链) 的首元素;一个使用过的buf释放时,插入到空闲buf队列(av链)的队尾。
实现了精确的最久未使用淘汰算法 (LRU算法)
ⅴ 对延迟写的处理
当一个具有延迟写标记的buf移到av链头,要用于分配时,立即进行写操作。从av链上摘除,使用完后又送入av头部。
设备分配
独占分配
在一个作业执行前,将它所要使用的设备分配给它;当它结束撤离时,将分配给它的这类设备收回。
让一个作业在整个运行期间独占使用的设备
特点
ⅰ 临界资源
ⅱ 费时的I/O操作或需人工干预
可能会引起进程死锁
共享分配
由多个作业、进程共同使用的设备称为共享设备。
特点
ⅰ 旋转设备,可直接或随机访问
ⅱ 便于共享,转接简单,耗费较少
不会引起进程死锁
虚拟分配
就是如果要使用独占设备的话,就先将数据输入、输出到辅存中。当进程需要输入数据、输出数据的时候,再把数据输入、输出(从辅存中)。理论上一个独占设备可以和辅存上的多个存储区连接,就形成了独占设备变成共享设备的假象。
本质上是提高了独占设备的利用率。
(1) 虚拟技术
所谓虚拟技术,是在一类物理设备上模拟另一类物理设备的技术,是将独占设备转化为共享设备的技术。
(2) 虚拟设备
通常把用来代替独占型设备的那部分外存空间 (包括有关的控制表格)称为虚拟设备。
(3) 虚拟分配
当进程需要与独占型设备交换信息时,系统将分配磁盘空间,并建立相应的数据结构,这种分配方法称为设备的虚拟分配。
SPOOLING系统
SPOOLING系统提供外围设备同时联机操作的功能。利用通道和中断技术,在主机控制之下,由通道完成输入输出工作。系统提供一个软件系统 (包括预输入程序、缓输出程序、井管理程序、预输入表、缓输出表)。它提供输入收存和输出发送的功能,使外部设备可以并行操作。这一软件系统称为SPOOLING系统。
设计思想(也就是虚拟设备的设计思想)
① 预输入
在应用程序需要数据前,OS已将所需数据预先输入到辅存 输入井存放。当应用程序 (或进程) 需要数据时,可直接从辅存中读入主存。
② 缓输出
在应用程序执行时,将输出数据写入辅存输出井中。当应用程序 (或进程)执行完毕 (或需要数据时) ,由操作系统将数据输出。
优点:
① 提供虚拟设备
② 外围设备同时联机操作
③ 加快作业处理速度
实现SPOOLING系统的基础
① 大容量的辅存空间
在辅存上需开辟两个较大的输入井和输出井,用以存放大量应用程序的输入信息和输出信息。
② 硬件基础
通道装置、中断系统
③ 数据结构
预输入表、缓输出表:描述辅存输入井和输出井的状态变化。
如: 输入信息从哪台设备输入,存放在辅存输入井什么位置;输出信息存放在辅存输出井什么位置,从哪台输出设备输出。
所需的软件程序
ⅰ 输入程序 控制信息从独占设备输入到辅存
ⅱ 缓输出程序 控制信息从辅存输出到独占设备
ⅲ 井管理程序 控制用户程序和辅存之间的信息交换
输入\输出控制
端口:设备与计算机通信的硬件连接点。
总线:一组线+一组严格定义的可以描述在线上传输信息的协议。这一组线用来连接一个或者多个设备,这种连接成为总线。
控制器:用于操作端口、总线或设备的一组电器器件。
输入\输出控制方式
循环测试I/O方式
I/O中断方式
通道方式
DMA方式
具体可见组成原理相关章节
I/O子系统
对设备的控制和操作由内核的IO子系统来实现。可以对设备进行分类,并且提供接口。
① 解释用户的I/O系统调用
② 设备驱动
③ 中断处理
① 在应用层为用户提供I/O应用接口
对设备的控制和操作则由内核I/O子系统来实施。
② 每个通用设备类型都通过一组标准函数(及接口)来访问
具体的差别被I/O子系统中的内核模块(称为设备驱动程序)所封装,这些设备驱动程序一方面可以定制以适合各种设备,另一方面也提供了一组标准的接口。设备驱动程序层的作用是为内核I/O子系统隐藏设备控制器之间的差异。将I/O子系统与硬讲分离,简化了操作系统开发人员的任务,也有利于设备的设计与制造。
设备处理程序
设备处理程序是能直接控制设备运转的程序,它根据各类设备的特点和性能来编写。每一类设备有一个相应的设备处理程序,能控制同类中多台物理设备同时工作。
控制I/O核心模块的方式
① 以设备处理进程的方式
ⅰ 为每一类设备设置一个设备处理进程 (对应的程序就是设备处理程序);
ⅱ 当有I/O请求来到时该进程被唤醒,进行设备驱动工作;当没有I/O请求时,该进程睡眠。
由I/O控制模块的接口程序负责解释用户的I/O系统调用,将其转换成I/O控制模块认识的命令形式后,将I/O请求发给对应的设备处理进程。
② 将设备与文件一样对待
将设备与文件一样对待,使用文件系统的系统调用命令进行设备的读、写。
例子:
(1) 用户进程请求I/O的系统功能调用
系统功能调用的形式为:
doio(ldev,mode,amount,addr);
ldev: 逻辑设备名
mode: 操作模式
amount:传输数据的数目
addr: 传送地址
(2) I/O接口程序(I/O过程)
① 将逻辑设备转换为物理设备
ⅰ 获得 I/O系统调用中给出的逻辑设备名 (ldev);
ⅱ 根据逻辑设备描述器,将逻辑设备名转换为物理设备名。
② 合法性检查
ⅰ 获得 I/O系统调用中给出的操作模式mode;
ⅱ 根据DCB中命令转换表中允许的操作,检查操作的合法性。
③ 形成I/O请求块,发消息给对应的设备处理进程
ⅰ 根据请求的参数形成I/O请求块 (IORB);
ⅱ 将I/O请求块 (IORB)挂到对应的设备请求队列。
(3) I/O接口程序的描述
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 { while (该进程的逻辑设备描述器队列不空)
{
if (与ldev相联结的物理设备找到)
break; / *找到* /
}
if (该进程的逻辑设备描述器队列为空)
return(错误码); / * 设备逻辑名错* /
检查参数与该设备特性是否一致;
if (不一致)
return (错误码); / * 传送参数错 * /
构造iorb;
把iorb插入到该设备的请求队列中;
唤醒因等待I/O请求块而睡眠的进程;
}(4) 设备处理进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 process io
{ l: while (设备请求队列不空)
{ 取一个iorb;
提取请求的详细信息;
启动I/O操作;
sleep (事件:I/O完成) /* I/O操作* /
/* 等I/O完成后,进入中断处理程序,并在那里唤醒设备处理进程* /
if (出错) 将错误信息写在该设备的dcb中;
传送数据到目的地;
唤醒请求此I/O操作的进程;
删除iorb;
}
sleep (事件:因无I/O请求);
goto l ;
}
问题
第七章 习题及解答
8-1 什么是设备独立性?引入这一概念有什么好处?
答:所谓设备独立性是指,用户在编制程序时所使用的设备同实际使用的设备无关,也就是在用户程序中仅使用逻辑设备。
引入设备独立性,可使应用程序独立于物理设备。此时,用户编程只需用逻辑设备去请求使用某类设备。当系统中有多台该类设备时,系统将其中的任一台备分配给请求进程,而不必局限于某一指定设备。这样,可以显著地提高资源的利用率和可适应性。
独立性还可以使用户程序独立于设备类型。例如,在进行输出时,既可以利用显示终端进行输出,也可以利用打印机进行输出。有了这种适应性,就可以很方便地实现输出重定向,类似地可以实现输入重定向。
8-4 什么是缓冲?引入缓冲的原因是什么?
答:缓冲是两种不同速度的设备之间传输信息时平滑传输过程的常用手段。
引入缓冲技术的原因有如下几点。
(1) 缓和CPU 和I/O设备之间速度不匹配的矛盾。
(2) 减少中断次数和CPU 的中断处理时间。如果没有缓冲,慢速 I/O设备每传一个字节就要产生一个中断,CPU 必须处理该中断;如果采用了缓冲,则慢速 I/O 设备将缓冲填满时,才向CPU发出中断,减少了中断次数和CPU 的中断处理时间。
(3) 解决 DMA 或通道方式下数据传输的瓶颈问题。DMA或通道方式都用于成批数据传输,在无缓冲的情况下,慢速 I/O设备只能一个字节一个字节的传输信息,成了DMA 或通道方式数据传输的瓶颈。缓冲的设置适应了DMA 或通道方式的成批数据传输方式,解决了数据传输的瓶颈问题。
8-5 常用的缓冲技术有哪些?
答:常用的缓冲技术有双缓冲、环形缓冲和缓冲池。
引入双缓冲以提高处理机与I/O设备之间的并行操作程度,例如,输入设备备先将第一个缓冲装满数据,在输入设备向第二个缓冲装数据时,处理机就可以从第一个缓冲中取出数据进行处理。第一个缓冲的数据处理完毕,若第二个缓冲已经装满数据,则处理机又可以从第二个缓冲中取出数据进行行处理,而输入设备又向第一个缓冲装填数据。
为了在CPU与 外设对信息的操作速度相差甚远时仍能得到良好并行效果,可以采用环形缓冲技术。环形缓冲技术是在主存中分配一组大小相等的存储区作为缓存区,并将这些缓存区链接起来,每个缓存区中有一个指向下一个缓存区的指针,最后一个缓存区的指针指向第一个缓存区,这样n 个缓存区就成了一个环形缓冲外,系统中有个缓冲链首指针指向第一个缓存区。环形缓冲用于输入输出时,需要两个指针in 和out,in 指向第一个空缓存区,out 指向第一个装满数据的缓存区。输入时,把数据输入到in 所指的空缓存区中,然后 in 模取后移一位,指向下一个空缓存区。输出时, 从out所指的满缓存区中取出数据,然 out 模取后移一位,指向下一个满缓存区。
缓冲池是由若干个大小相等的缓存区组成的。缓冲池中的每一个缓存区都由系统统一管理和动态分配。若某个进程需要使用缓冲时便提出申请,由系统将缓存区分配给它,进程不再使用缓存区时,就将缓存区交还给缓冲池。这样,就可以用少量的缓存区服务更多的进程。缓冲池通常将缓存区排成3 个队列:空闲缓存区队列、输入缓存区队列和输出缓存区队列。
8-8 什么是独占设备?对独占设备如何分配?
答:独占设备是指在一段时间内只允许一个用户进程访问的设备。系统一旦把这类设备分配给某进程后,便由该进程独占直到使用完后释放。多数低速 I/O设备都属于独占设备,如打印机等。
独占设备采用独占分配方式,即将一个独占设备分配给某进程后便一直由它独占,直到该进程完成或释放该设备时,系统才能将该设备分配给其他进程。
8-9 什么是共享设备?对共享设备如何分配?
答:共享设备是指在一段时间内允许多个进程同时访问的设备,如磁盘。对共享设备可将其同时分配给多个进程,使用共享分配方式显著提高了设备的利用率,但对设备的访问需进行合理的调度。
8-10 什么是虚拟设备技术?什么是虚拟设备?如何进行行虚拟分配?
答:所谓虚拟设备技术,是在一类物理设备上模拟另一个物理设备的技术,是将独占设备转换成共享设备的技术。目前广泛流行的虚拟设备技术是SPOOLing技术,网络环境中的虚拟打印机。
虚拟设备是指通过虚拟技术将一独占设备变换成若干台逻辑设备,供若干个用户进程使用,通常把这种经过虚拟技术处理的设备称为虚拟设备。引入虚拟设备的目的是为了克服独占设备速度较慢、资源利用率较低的缺点,以提高设备的利用率。
虚拟分配是针对虚拟设备而言的。当进程申请独占设备时,由系统分配给它共享设备,如磁盘的一部分存储空间。当进程要和设备交换信息,系统就将要交换的信息放到这部分存储空间中,在合适的时候,系统再将存储空间中的信息传到独占设备。