第六章 设备管理 自测习题

一、单项选择题

1.下列设备中,不属于独占设备的是(  B  )。

 A. 打印机

 B. 磁盘

 C. 终端

 D. 磁带

2.通过硬件和软件的功能扩充,把原来独占的设备改造成为能为若干用户共享的设备,这种设备称为(   D )设备。

 A. 存储

 B.

 C. 共享

 D. 虚拟

解析:
通过硬件和软件的辅助,将原本只能独占使用的物理设备(如打印机)改造为可供多个用户逻辑上共享的设备,这种技术称为虚拟设备技术,得到的设备称为虚拟设备。典型的例子是通过SPOOLing(假脱机)技术将一台打印机变为多用户可以逻辑上同时使用的共享打印机。

A 存储(强调存放数据)

B 块(按块传输的设备类型)

C 共享(描述属性,但不是这种改造后的专用术语)

D 虚拟(正确)

3.在操作系统中,用户在使用I/O设备时,通常采用(  B  )。

 A. 设备的绝对号

 B. 设备的相对号

 C. 虚拟设备号

 D. 设备名

解析:

设备的绝对号:系统为每个物理设备分配的唯一编号(如 0 号磁盘、1 号打印机)。用户若直接使用绝对号,程序就无法在不同配置的机器上运行。

设备的相对号:用户在编程时使用的一种逻辑设备编号,由系统在程序运行时根据当前的设备分配表将相对号映射为绝对号。例如,程序中写使用设备相对号 1”,系统可能把它映射到实际的打印机或磁盘。

这种设计是实现设备独立性的一种具体手段。用户不关心物理设备具体是哪个,只需指出我要用第几个 I/O 设备即可。

4.通道是一种(   C )。

 A. I/O端口

 B. 数据通道

 C. I/O专用处理机  

 D. 软件工具

解析:
通道(Channel)是一个专门用于输入/输出操作的硬件处理器,它拥有自己的指令系统,能够在 CPU 的授权下独立控制 I/O 设备与内存之间的数据传输,而不需要 CPU 逐条指令干预。通道可以并行执行通道程序,从而提高 CPU I/O 设备之间的并行度。

5CPU启动通道后,设备的控制工作由(   )。

 A. CPU执行程序来控制

 B. CPU执行通道程序来控制

 C. 通道独立执行预先编好的通道程序来控制

 D. 通道执行用户程序来控制

6.用户编制的程序与实际使用的物理设备无关是由(D )功能实现的。

 A. 设备分配

 B. 设备驱动

 C. 虚拟设备

 D. 设备独立性

解析:
设备独立性(也称设备无关性)是指用户编程时使用逻辑设备名(如 /dev/printer),而不直接指定物理设备(如 COM1)。操作系统通过逻辑设备名到物理设备名的映射,在程序实际运行时再分配具体的物理设备。这使得用户程序与具体物理设备解耦,更换或升级设备时无需修改用户程序。

A 设备分配(负责将物理设备分给进程,但不提供独立性)

B 设备驱动(处理具体硬件的 I/O 指令,与设备紧密相关)

C 虚拟设备(通过软件将独占设备变为共享设备,与独立性有交集但不是直接实现独立性的核心)

D 设备独立性(正确)

7.下列描述中,不是设备管理的功能的是(  C  )。

 A. 实现缓冲区管理

 B. 进行设备分配

 C. 实现中断处理

 D. 完成I/O操作

解析:
设备管理的主要功能包括:缓冲区管理、设备分配、设备驱动、I/O 控制、设备独立性、虚拟设备(SPOOLing 等。

A 实现缓冲区管理:是设备管理功能(用于缓和 CPU I/O 设备速度不匹配)。

B 进行设备分配:是设备管理核心功能之一(根据进程请求分配设备)。

C 实现中断处理:虽然中断处理与 I/O 完成有关,但中断处理属于操作系统内核的更底层机制(中断向量、中断服务程序),不属于设备管理模块的专属功能。

D 完成 I/O 操作:通过设备驱动程序执行 I/O 指令,是设备管理的目标。

8.下列不属于设备分配技术的是(D )。

 A. 虚拟分配技术

 B. 独占分配技术

 C. 共享分配技术

 D. 通道分配技术

解析:
设备分配技术主要根据设备的物理特性(是否可共享、是否可虚拟)分为三类:

A. 虚拟分配技术:通过 SPOOLing 技术将独占设备改造为逻辑上共享的设备,属于设备分配的一种方式。

B. 独占分配技术:将设备一次分配给一个进程,使用期间由该进程独占(如打印机)。

C. 共享分配技术:将设备同时分配给多个进程,各进程可以交替使用(如磁盘)。

D. 通道分配技术:通道本身是 I/O 处理机,用于控制 I/O 传输,不属于设备分配分类中的一种分配技术,而是 I/O 控制方式的一部分。

9.采用SPOOLing技术的目的是( A   )。

 A. 提高独占设备的利用率

 B. 提高主机效率

 C. 减轻用户编程负担

 D. 提高程序的运行速度

解析:
SPOOLing(假脱机)技术通过在磁盘上设置输入井和输出井,将独占设备(如打印机)改造为可供多个用户逻辑上共享的设备。多个进程可以将输出数据写入输出井,再由一个专门的守护进程(如打印守护进程)实际驱动物理设备输出。

这样一来,独占设备不再被单个进程长时间占用,而是被多个进程时分共享,从而显著提高了独占设备的利用率

10SPOOLing技术可以实现设备的(   C )分配。

 A. 独占

 B. 共享

 C. 虚拟

 D. 物理

解析:

SPOOLing 技术通过磁盘缓冲区将独占设备(如打印机)改造成多个用户可以逻辑上同时访问的设备。这种改造后的设备被称为虚拟设备,而 SPOOLing 实现的是设备的虚拟分配——即用户感觉自己在独享设备,实际上是通过共享物理设备+磁盘空间实现的逻辑分配。

在部分教材和考试题目中,术语使用存在细微差别:

共享分配:指物理设备本身具备同时服务多进程的能力(如磁盘)。

虚拟分配:指通过软件将独占设备模拟成共享设备,SPOOLing 正是典型例子。

因此,这道题若强调“SPOOLing 技术实现的是,很多题库的标准答案为 虚拟分配

11.设备的打开、关闭、读、写等操作是由(   D )完成的。

 A. 用户程序

 B. 编译程序

 C. 设备分配程序

 D. 设备驱动程序

解析:
设备的打开、关闭、读、写等具体 I/O 操作是由设备驱动程序完成的。设备驱动程序是操作系统内核中与具体硬件交互的模块,它接受上层(如文件系统或用户程序)发出的抽象 I/O 请求,将其转换为设备特定的命令序列(如向设备寄存器写入命令、读取状态、传输数据)。

12.下列关于设备驱动程序的描述,错误的是(  C  )。

 A. 设备驱动程序应可以动态装卸

 B. 设备驱动程序往往由生产设备的厂家提供

 C. 设备驱动程序可使用系统调用

 D. 设备驱动程序可实现请求I/O进程与设备控制器之间的通信

解析:

A 正确:现代操作系统(如 LinuxWindows)支持设备驱动程序动态加载和卸载(如 insmod、rmmod),无需重启系统。

B 正确:设备驱动程序通常由设备生产厂家提供,因为厂家最了解硬件的控制方式和寄存器细节。

C 错误设备驱动程序本身运行在内核态,不能调用系统调用(系统调用是用户态程序进入内核的接口)。驱动程序直接调用内核函数(如内存分配、中断注册),而不是通过 syscall 方式。

D 正确:驱动程序确实负责实现请求 I/O 的进程与设备控制器之间的通信,将上层 I/O 请求转换为设备控制器能理解的命令。

13.引入缓冲技术的主要目的是(  C  )。

 A. 改善用户编程环境

 B. 提高CPU的处理速度

 C. 提高CPU与设备之间的并行程度

 D. 降低计算机的硬件成本

14CPU处理数据的速度远远高于打印机的打印速度,为了解决这一矛盾,可采用(  C  )。

 A. 并行技术

 B. 通道技术

 C. 缓冲技术

 D. 虚存技术

15.下列缓冲技术中,对于一个具有信息的输入和输出速率相差不大的I/O系统比较有效的是( A   )。

 A. 双缓冲技术

 B. 环形缓冲技术

 C. 多缓冲技术

 D. 单缓冲技术

解析:
双缓冲技术的核心是在内存中设置两个缓冲区,当一个缓冲区中的数据正在被处理(或输出)时,另一个缓冲区可以同时用于输入。这种机制特别适用于输入和输出速率相差不大的场景,因为它能平衡两侧的速度差异,减少等待时间。

B 环形缓冲技术:适用于输入/输出速率波动较大、需要多块缓冲区的场景(如网络数据流)。

C 多缓冲技术:通常用于输入/输出速率差异很大的情况(如视频播放、高速数据采集),通过更多缓冲区吸收突发流量。

D 单缓冲技术:只有一个缓冲区,输入和输出无法重叠,当速率接近时容易造成频繁等待,效率较低。

16.为了使多个进程能有效地同时处理阵发性的输入和输出,最好使用( A   )结构的缓冲技术。

 A. 多缓冲

 B. SPOOLing

 C. 单缓冲区

 D. 双缓冲区

17.一个含有6个盘片的双面硬盘,盘片每面有100条磁道,则该硬盘的柱面数为(  C )。

 A. 12

 B. 250

 C. 100

 D. 1200

解析:

硬盘的柱面是所有盘片上相同磁道号的集合(即所有盘片同一半径的同心圆)。

题目给出:6个盘片 12 个磁面(每个盘片两面)。

每面有 100 条磁道磁道号从 0 99

柱面数 = 每个磁面上的磁道数 = 100(而不是磁面数或总磁道数)。

A 12(这是磁面数)

B 250(无意义)

C 100(正确)

D 1200(可能是 12 个磁面 × 100 条磁道,但这是总磁道数,不是柱面数)

18.设磁盘的转速为3000/分,盘面划分为10个扇区,则读取一个扇区的时间是(B )。

提示:1分(m)等于60秒(s),1秒等于1000毫秒(ms)。

 A. 20ms 

 B. 2ms 

 C. 3ms 

 D. 1ms

解析:

1. 先算转一圈需要的时间

转速 3000 /
转一圈时间 =60 /3000=0.02 =20 毫秒

2. 读取一个扇区的时间(平均情况)

磁盘旋转一圈可读出 10 个扇区(假设扇区均匀分布)。
读出 1 个扇区的时间 =20 ms/10=2 ms

19.下列关于磁盘的描述中,正确的是( A   )。

 A. 减少磁盘的寻道时间可以显著改善系统性能

 B. 当关掉电源后,磁盘存储的内容丢失

 C. 磁盘属于字符设备

 D. 磁盘的动作不局限于机械运动,可以无限快

20.下列关于Linux系统设备管理的描述中,不正确的是(B    )。

 A. 把设备作为特殊文件处理

 B. 将存储设备称为字符设备

 C. 设备名由主、次设备号构成

 D. 设备驱动程序可动态装卸

解析:
Linux 系统中,设备分为字符设备块设备两大类:

字符设备:以字符流方式传输数据,无缓冲区(如键盘、鼠标、串口)。

块设备:以数据块为单位传输,支持随机访问并有缓冲区(如硬盘、U 盘、SSD)。

存储设备(如硬盘)属于块设备,而不是字符设备。因此选项 B 的说法不正确。

二、判断题

1.计算机系统为每一台设备确定的一个用以标识它的编号,被称为设备的绝对号。(A

 A.

 B.

解析:
在操作系统中,设备的绝对号是指系统为每一台物理设备分配的一个唯一的、固定的编号,用于在内核层面标识该设备(例如 Linux 内核中设备的 dev_t 类型,包含主设备号和次设备号)。用户程序通常不直接使用绝对号,而是通过逻辑设备名或相对号访问设备,由系统在设备分配时将逻辑名映射为绝对号。

2.现代计算机系统中,外围设备的启动工作都是由系统和用户共同来做的。(B

 A.

 B.

解析:
在现代计算机系统中,外围设备的启动工作主要由操作系统负责,用户通常不直接参与设备启动过程。

3.用户程序应与实际使用的物理设备无关,这种特性称作设备独立性。(A

 A.

 B.

4.共享分配技术适用于高速、大容量的直接存取存储设备,如磁盘等。(A

 A.

 B.

解析:
共享分配技术允许多个进程同时或交替使用同一个设备,适用于高速、大容量、支持直接存取(随机访问) 的设备,如磁盘、固态硬盘等。这类设备可以将请求排队或分区域使用(如文件系统将不同文件分布在不同扇区),从而在硬件和软件的配合下实现资源共享。而独占设备(如打印机)则不适合共享分配。

5.利用共享分配技术可以提高设备的利用率,使得打印机之类的独占设备成为可共享的、快速I/O设备。(B

 A.

 B.

解析:
共享分配技术适用于本身支持多进程同时或交替访问的设备(如磁盘),而打印机独占设备,无法同时被多个进程直接使用。要将打印机改造成为可共享的设备,需要使用SPOOLing 技术(虚拟分配技术),而不是共享分配技术。SPOOLing 通过磁盘缓冲区(输出井)将独占设备逻辑上变为共享设备。

因此,题目张冠李戴,说法错误。

6.实现设备虚拟分配最成功的技术是SPOOLing。(A

 A.

 B.

7SPOOLing系统能实现设备管理的虚拟技术,即:将共享设备改造为独占设备。它由专门负责I/O的常驻内存的进程以及输入、输出井组成。(B

 A.

 B.

8.采用SPOOLing技术情况下,可用1台计算机代替脱机技术需要的3台计算机。(A

 A.

 B.

解析:
传统的脱机技术(如早期的卫星机)需要三台计算机:

一台用于将纸带上的数据输入到磁带上(输入机)

一台用于处理数据(主机)

一台用于将磁带上的结果输出到打印机(输出机)

SPOOLing(假脱机)技术一台计算机(主机)上通过磁盘输入井、输出井和外围控制守护进程模拟了脱机输入/输出的过程,从而替代了另外两台外围计算机的功能。因此,SPOOLing 可用一台计算机完成脱机技术需要三台计算机才能完成的任务。

9.一个设备驱动程序可以控制同一类型的多个物理设备。(A

 A.

 B.

解析:
设备驱动程序是控制某种类型设备的软件模块。一个驱动程序通过主设备号标识设备类型,使用次设备号区分同一类型的不同物理设备实例(例如两个相同的 USB 磁盘或两块相同型号的网卡)。驱动程序会根据次设备号选择操作对应的设备寄存器或地址,从而实现对多个相同类型物理设备的控制。

三、简答题

1、操作系统中设备管理的功能是什么?

操作系统中的设备管理I/O 管理)是操作系统最核心的子系统之一,负责管理计算机系统中的所有硬件设备(如磁盘、键盘、打印机、显示器等),其主要功能可以概括为以下几个方面:

一、设备独立性(设备无关性)

功能:用户编程时使用逻辑设备名(如 /dev/printer),而不需要知道具体的物理设备(如 COM1)。操作系统负责将逻辑设备名映射到实际的物理设备。

目的:使用户程序与具体设备解耦,当设备变更(如更换打印机型号)时,无需修改用户程序。

二、设备分配与回收

功能:根据进程的请求和系统当前的设备使用情况,决定将哪个设备分配给哪个进程,并在进程结束时回收设备。

分配方式

独占分配:设备一次只分配给一个进程(如打印机)。

共享分配:多个进程可以同时或交替使用设备(如磁盘)。

虚拟分配:通过 SPOOLing 技术将独占设备改造为逻辑上的共享设备。

三、设备驱动程序管理

功能:加载、卸载设备驱动程序,并提供统一的上层接口(如 read、write、ioctl)。

作用:驱动程序负责将抽象的 I/O 请求翻译为设备特定的命令序列,并处理设备的中断。

四、缓冲区管理

功能:在内存中设置缓冲区(单缓冲、双缓冲、环形缓冲、缓冲池),用于暂存数据。

目的:缓和 CPU I/O 设备之间的速度不匹配,减少 CPU 等待 I/O 的时间,提高系统并行性。

五、设备控制与 I/O 操作

功能:通过设备控制器或通道向设备发出 I/O 指令,完成数据的输入输出。

控制方式

程序循环检测方式(轮询)

中断驱动方式

DMA(直接存储器访问)方式

通道控制方式

六、虚拟设备(SPOOLing)管理

功能:利用磁盘作为缓冲区(输入井、输出井),将独占设备(如打印机)模拟为可共享的逻辑设备。

优点:提高了独占设备的利用率和系统吞吐量,实现了脱机输入输出的效果。

七、设备出错处理

功能:检测 I/O 操作中的错误(如设备未就绪、读写出错、介质损坏),并尝试恢复或向上层报告错误。

策略:重试、降级、热替换、记录日志等。

八、设备性能优化

功能:通过 I/O 调度(如电梯算法、CFQ)、预读、延迟写、缓存等手段,提高设备的访问效率。

应用:磁盘调度算法优化磁头寻道时间;SSD 的磨损均衡与 TRIM 管理。

九、提供统一的文件接口(针对块设备)

功能:将块设备(如磁盘)通过文件系统抽象为目录和文件,用户通过 open、read、write、close 等系统调用访问设备。

特殊处理:字符设备(如键盘)不通过文件系统缓存,直接进行 I/O

十、支持设备的热插拔与电源管理

功能:在系统运行时动态检测设备的插入与拔出(如 USB 设备),并自动加载/卸载驱动程序。同时管理设备的低功耗状态(休眠、挂起)。

2、UNIX/Linux系统中主次设备号各表示什么含义?

一、主设备号(Major Number

含义:表示设备的类型,即该设备是由哪一个驱动程序管理的。

作用:当应用程序访问设备文件时,操作系统(VFS)根据主设备号找到对应的设备驱动程序,并调用其提供的文件操作函数(如 read、write、open)。

特点

同一类设备(如所有 SATA 硬盘、所有 USB 键盘)通常共享相同的主设备号。

主设备号与驱动程序一一对应(一个驱动程序可以支持多个同类型设备,通过次设备号区分)。

二、次设备号(Minor Number

含义:表示同一类型设备中的具体哪一个设备实例,或者该设备的某个子功能/分区。

作用:驱动程序通过次设备号来区分不同的物理设备、分区或设备内部的逻辑单元,从而对具体的硬件进行操作。

特点

次设备号可以表示设备序号(如 0 第一个硬盘,1 → 第二个硬盘)。

也可以表示设备的分区(如 sda1、sda2 使用相同的主设备号,不同的次设备号)。

总结

主设备号 → 标识驱动(设备类型)

次设备号 → 标识驱动管理的具体对象(第几个设备、哪个分区)

这种设计使得 Linux 内核可以动态管理设备:同一驱动程序(主设备号固定)可支持任意多个同类设备(通过不同的次设备号区分),设备文件与驱动程序的绑定非常灵活。

3、设备分配技术主要有哪些?常用的设备分配算法是什么?  

一、设备分配技术的主要类型

根据设备的物理特性和使用方式,设备分配技术主要分为以下三种:

1. 独占分配技术

适用设备:打印机、磁带机、绘图仪等独占设备

分配方式:将一个设备一次性分配给某个进程,由该进程独占使用,直到进程释放设备。

优点:管理简单,无冲突。

缺点:设备利用率低,可能造成进程长时间等待。

2. 共享分配技术

适用设备:磁盘、固态硬盘等共享设备(块设备)。

分配方式多个进程可以同时或交替访问同一个设备(例如磁盘的 I/O 请求队列)。

优点:设备利用率高,系统吞吐量大。

缺点:需要复杂的请求调度算法(如电梯算法)。

3. 虚拟分配技术(SPOOLing

适用设备:原本独占的设备(如打印机),通过软件改造为逻辑上的共享设备。

分配方式:用户进程将输出数据写入磁盘中的输出井,由一个独立的守护进程(如打印守护进程)实际控制物理设备输出。

优点:提高了独占设备的利用率,缩短了进程等待时间。

缺点:需要额外的磁盘空间和守护进程开销。

二、常用的设备分配算法

设备分配算法主要用于共享设备(如磁盘)  I/O 请求调度,以及独占设备的分配队列管理。常见算法如下:

算法名称

适用场景

核心思想

优缺点

先来先服务(FCFS

独占设备、磁盘调度

按请求到达顺序分配设备或处理 I/O 请求

公平简单,但性能差(磁头移动无优化)

优先级调度

实时系统、有优先级需求的系统

高优先级进程优先获得设备

可保证重要任务,但低优先级可能饥饿

最短寻道时间优先(SSTF

磁盘调度

选择离当前磁头最近的请求先服务

提高平均寻道性能,但可能造成饥饿

扫描算法(SCAN / 电梯算法)

磁盘调度

磁头单向移动,服务沿途请求,到尽头后折返

避免饥饿,性能较好,但两端请求等待时间长

循环扫描(C-SCAN

磁盘调度

单向移动服务请求,到尽头后快速返回起点再继续

使各区域请求等待时间更均匀

LOOK C-LOOK

磁盘调度

改进 SCAN,磁头移动到最远请求处即折返,不一定要到端点

更高效,减少无效移动

对于独占设备的分配,若多个进程同时申请,通常采用 FCFS + 优先级相结合的方式;若资源不足,进程会被阻塞并放入设备等待队列。

三、总结

分配技术:独占、共享、虚拟(SPOOLing)。

分配算法FCFS、优先级、SSTFSCANC-SCANLOOK 等(主要用于磁盘调度)。

核心目标:提高设备利用率、减少进程等待时间、保证公平性或实时性(根据系统需求权衡)。

4、SPOOLing系统的主要功能是什么?

SPOOLing 系统(Simultaneous Peripheral Operation On Line,假脱机系统)的主要功能是通过磁盘缓冲区(输入井/输出井) 守护进程,将独占设备(如打印机、读卡机)改造为可供多个进程逻辑上共享的虚拟设备。其核心功能包括:

1. 输入/输出井管理(磁盘缓冲)

在磁盘上划分出输入井输出井

输入井:暂存需要从低速输入设备(如键盘、扫描仪)读入的数据。

输出井:暂存需要从高速输出设备(如打印机)输出的数据。

作用:缓和 CPU 与低速 I/O 设备之间的速度不匹配,避免进程直接等待物理 I/O

2. 输入/输出守护进程(外围控制进程)

输入守护进程:负责将实际输入设备的数据预先读入输入井。

输出守护进程:负责将输出井中的数据取出,送往实际输出设备打印或传输。

特点:守护进程独立于用户进程运行,模拟了脱机输入/输出的效果。

3. 虚拟设备映射        

用户进程操作的是虚拟设备(如 /dev/lp 的逻辑映像),而不是物理设备。

进程对虚拟设备的读写被转化为对输入井/输出井的读写(磁盘操作),由 SPOOLing 系统负责与实际物理设备的数据交换。

4. 共享与并行性提升

多个用户进程可以同时向输出井写入打印数据,而不需要互相等待物理打印机空闲。

输出守护进程依次处理输出井中的任务,使打印机(原本独占)在逻辑上成为多个进程共享的设备。

同时,CPU I/O 设备可以并行工作:进程在磁盘缓冲区快速读写,而物理设备在后台异步完成实际 I/O

5. 资源管理与调度

维护输出井/输入井中的任务队列(如打印队列)。

提供优先级调度或 FCFS 策略,决定守护进程处理任务的顺序。

在设备出现故障时,可保留任务并在设备恢复后继续处理。

5、一般I/O软件系统的层次是怎样的?

一般 I/O 软件系统采用分层结构设计,每一层隐藏底层硬件细节,向上层提供更抽象、更易用的接口。这种分层提高了模块化、可移植性和安全性。典型的层次结构(由低到高)如下:

1. 硬件层(I/O 设备 + 控制器/通道)

内容:物理设备(磁盘、键盘、打印机)、设备控制器、DMA 控制器、通道等。

功能:完成实际的信号传输、机械动作、数据存储或状态检测。

特点:直接与硬件打交道,由上层软件控制。

2. 中断处理程序

位置:内核最低层,紧贴硬件。

功能

响应设备发出的中断信号。

保存被中断进程的 CPU 现场。

调用相应的设备中断服务例程(ISR)。

清除中断标志,恢复现场并返回。

说明:中断处理是异步 I/O 完成的关键机制。

3. 设备驱动程序

位置:内核中,每个设备(或设备类型)对应一个驱动程序。

功能

向上层(如设备独立层)提供统一的接口(open、read、write、ioctl 等)。

将上层抽象的 I/O 请求转化为设备控制器能理解的命令序列(如读写寄存器、发送命令码)。

处理 I/O 的初始化、启动、错误重试、DMA 设置等。

特点:与硬件强相关,通常由设备厂商提供。

4. 设备独立层(设备无关 I/O 层)

位置:内核中,位于驱动程序之上。

功能

设备命名与映射:将逻辑设备名(如 /dev/lp)映射到具体驱动程序。

设备保护:检查用户进程是否有权访问该设备。

缓冲管理:提供单缓冲、双缓冲、环形缓冲等,缓和 CPU 与设备速度不匹配。

错误处理:捕获驱动程序返回的错误,统一向上层报告(如 EIO)。

I/O 调度:对共享设备(如磁盘)的 I/O 请求进行排队与重排(如电梯算法)。

分配与回收:管理独占设备的分配与释放。

作用:使上层程序与具体设备类型解耦,实现设备独立性。

5. 用户级 I/O 软件(系统调用接口 + 库函数)

位置:内核最外层(系统调用接口)及用户空间库(如 stdio)。

内容

系统调用open、read、write、close、lseek、ioctl 等。

C 标准库fopen、fread、printf、scanf 等(封装系统调用,增加缓冲)。

用户程序:直接调用库函数或系统调用来完成 I/O

功能:为用户进程提供统一、方便的 I/O 操作方式。

6、设备驱动程序的主要功能是什么?它在系统中处于什么位置?

一、设备驱动程序的主要功能

设备驱动程序是操作系统中直接与硬件交互的软件模块,其主要功能包括:

设备初始化与配置

在系统启动或设备热插拔时,对设备控制器进行初始化(设置工作模式、分配中断、配置 DMA 等)。

接收上层 I/O 请求

接收来自设备独立层文件系统的抽象请求(如 read、write、ioctl),并将其转换为设备控制器能理解的命令序列(如写入控制寄存器、设置数据传输长度、指定内存地址)。

启动 I/O 操作

按照设备协议向设备控制器的寄存器写入命令,启动数据传输(轮询、中断或 DMA 方式)。

处理 I/O 完成与中断

响应设备发出的中断信号,读取设备状态,判断 I/O 是否成功,并调用中断处理程序通知上层。

错误检测与恢复

监测设备运行中的错误(如介质错误、设备超时),尝试重试或向上层返回错误码(如 EIO)。

提供统一接口

实现内核定义的标准接口(如 struct file_operations 中的 .read、.write、.open、.release 等),使上层代码无需知道具体硬件细节。

支持设备的动态管理

支持设备的热插拔(如 USB 设备插入时自动加载驱动)、电源管理(挂起/唤醒)等。

二、设备驱动程序在系统中的位置

设备驱动程序处于操作系统内核的最底层,位于硬件内核的其余部分之间。其具体位置如下(由低到高):

上方:设备驱动程序接收来自设备独立层(或直接来自系统调用层)的 I/O 请求。

下方:驱动程序直接与硬件控制器交互(通过读写 I/O 端口、内存映射寄存器、DMA、中断等)。

执行环境:驱动程序运行在内核态,可以访问内核地址空间和硬件资源。

7、为什么要引入缓冲技术?设置缓冲区的原则是什么?

一、为什么要引入缓冲技术?

引入缓冲技术的主要目的是解决 CPU I/O 设备之间速度不匹配的矛盾,并提高系统的并行性和响应速度。具体原因包括:

缓和 CPU I/O 设备的速度差异

CPU 的速度远高于 I/O 设备(如磁盘、打印机、键盘)。无缓冲区时,CPU 必须等待慢速 I/O 完成,导致 CPU 空闲等待。缓冲区允许 CPU 将数据快速写入内存缓冲区后继续执行,而设备在后台慢慢处理。

减少 I/O 中断频率

如果不使用缓冲区,每传输一个字节或一个字符就可能产生一次中断,系统开销很大。缓冲区可以累积一定数据量再触发中断(如 DMA 传输一整块数据)。

实现 CPU I/O 设备并行工作

通过双缓冲或多缓冲,CPU 可以处理一个缓冲区中的数据,同时 I/O 设备填充或清空另一个缓冲区,实现输入-处理-输出的重叠。

缓解数据突发性

某些设备(如网络接口、声卡)的数据流量具有突发性。缓冲区可以吸收突发峰值,防止数据丢失。

简化数据格式转换

例如终端输入的行缓冲:用户输入一行后按回车,缓冲区中的一行数据再传给程序,避免每次按键都引发系统调用。

二、设置缓冲区的原则

缓冲区的大小、数量和位置(内存或设备内置)需要根据系统要求和设备特性来设计,主要遵循以下原则:

匹配速度差异

如果输入设备与输出设备的速度相差很大,通常需要设置较大的缓冲区(或多缓冲)来平滑流量。例如,磁盘到打印机的数据通道需要大缓冲区,因为磁盘快、打印机慢。

减少系统开销

缓冲区太小时,会导致频繁的中断和 I/O 操作,增加系统负担。缓冲区太大时,会浪费内存,且可能增加响应延迟(例如输入缓冲区过大,用户长时间看不到回显)。需要在效率和响应之间平衡。

考虑数据传输单位

块设备(如磁盘)的缓冲区大小通常是块大小的整数倍(如 512B4KB)。字符设备(如终端)的缓冲区可以是字符行大小(如 1KB)。

支持双缓冲或多缓冲

当输入和输出速率接近且要求并行时,常用双缓冲(两个缓冲区交替使用)。

当速率相差很大或数据流具有突发性时,采用环形缓冲(多个缓冲区)或缓冲池

满足实时性要求

对于实时系统,缓冲区不能过大,否则会引入不可接受的延迟。可能采用小缓冲区或零拷贝技术。

内存与设备资源约束

缓冲区通常设置在内存中(系统空间或用户空间),但某些设备有内置硬件缓冲区(如磁盘缓存、网卡 FIFO),设计时应尽量利用硬件缓冲以减少 CPU 干预。

8、处理I/O请求的主要步骤是什么?

处理一个 I/O 请求(例如用户程序调用 read() 读取磁盘文件)在操作系统中通常经历以下主要步骤。这些步骤横跨用户态、内核态,并涉及多个软件层次和硬件交互。

I/O 请求处理的主要步骤

1. 用户进程发起 I/O 请求

用户程序执行系统调用,如 read(fd, buffer, count)

库函数(如 glibc)封装系统调用,陷入内核(通过 int 0x80、syscall 指令等)。

2. 系统调用接口层(系统调用处理)

CPU 切换到内核态,保存用户进程的上下文(寄存器、栈指针等)。

根据系统调用号,跳转到内核中对应的处理函数(如 sys_read)。

3. 文件系统层(针对块设备)

内核根据文件描述符 fd 找到对应的文件对象struct file)和 inode

判断操作是否合法(如权限检查、偏移量计算)。

如果需要从磁盘读取数据,文件系统层确定要读取的逻辑块号(或页号)。

4. 设备独立层(通用块层)

将文件系统的 I/O 请求转换为通用块 I/O 请求struct bio)。

进行 I/O 调度(如合并相邻请求、按电梯算法排序)。

若使用缓冲区高速缓存(Page Cache),检查数据是否已在内存中:

若命中直接拷贝到用户缓冲区,I/O 完成(跳过后续硬件步骤)。

若未命中继续向下传递请求。

5. 设备驱动程序层

根据主设备号找到对应的设备驱动程序

驱动程序将通用 I/O 请求转换为设备控制器能理解的命令(如读写特定寄存器、设置 DMA 地址、发送命令码)。

驱动程序可能将请求放入设备请求队列(如果设备支持排队,如 NCQ)。

6. 中断处理与 I/O 启动

驱动程序启动 I/O 操作(例如向磁盘控制器的命令寄存器写入命令)。

若使用中断驱动方式CPU 继续执行其他进程(非阻塞等待)。

若使用轮询方式CPU 循环检查设备状态(较少用)。

7. 设备控制器执行 I/O

设备控制器独立完成与物理设备的数据传输(可能通过 DMA,直接与内存交换数据)。

传输完成后,设备控制器向 CPU 发送中断信号

8. 中断处理与 I/O 完成

CPU 响应中断,保存当前进程的现场,跳转到对应的中断服务程序(ISR

ISR 读取设备状态,判断 I/O 是否成功,清除中断标志。

I/O 完成,则唤醒等待该 I/O 的进程(将其状态从阻塞变为就绪),并将数据从内核缓冲区拷贝到用户缓冲区(或通知上层数据已准备好)。

9. I/O 完成后的返回

系统调用层层返回,最终将结果(如读取的字节数)返回给用户进程。

CPU 切换回用户态,恢复用户进程的上下文,进程继续执行。

9、Linux系统中对设备怎样管理?

Linux 对设备的管理,可以理解为一套从内核到用户空间的精密协作体系。它最核心的思想就是"一切皆文件",并围绕此构建了层次清晰、高度模块化的管理架构。

这套架构主要由以下三个层面构成:

 第一层:内核驱动模型——组织与抽象

这是设备管理的"骨架",负责在内核中建立统一的设备模型,将硬件信息与驱动逻辑分离。其核心概念是总线(Bus)、设备(Device)和驱动(Driver)

总线(Bus)Linux内核抽象出的连接通道,如PCIUSBI2C等。它负责匹配match)设备和驱动,一旦匹配成功,就会调用驱动的probe函数来初始化硬件。还有一个特殊的platform总线,用于管理SoC上那些不依靠物理总线的"内存映射"设备。

设备(Device):代表具体的硬件。现代Linux通过设备树(Device Tree)来描述硬件信息(如寄存器地址、中断号)。在内核启动或驱动加载时,这些信息会被解析并注册到总线上。

驱动(Driver):控制硬件的软件代码。它只关注"如何操作",而具体的"操作对象"(硬件资源)由设备提供。这种分离设计使得同一个驱动可以轻松适配同一类型的不同设备。

(Class):从功能角度对设备进行分类(如input、sound),方便用户空间按功能查找设备,与它们在总线上如何连接无关。

此外,内核通过sysfs文件系统(挂载在/sys目录),将这套复杂的设备模型树导出到用户空间。你可以在/sys/bus/、/sys/devices/等目录下,直观地看到系统中所有设备的总线归属、驱动绑定关系等。

 第二层:设备文件系统——访问接口

这是用户程序和内核设备驱动之间的桥梁。它在/dev目录下为每个设备创建了一个设备节点(Device Node),这是一个特殊的文件。应用程序可以像操作普通文件一样,使用open(), read(), write()等系统调用,通过这个节点来与硬件设备交互。

设备节点主要分为两种类型:

字符设备(c):以字节流方式传输,无缓冲区,如键盘、串口。

块设备(b):以数据块为单位,支持随机访问,有缓冲区,如硬盘、U盘。

每个设备节点都由主设备号(Major Number)次设备号(Minor Number)唯一标识。主设备号用于定位驱动程序,次设备号则用于区分该驱动管理的不同硬件实例。

 第三层:用户空间管理——动态与智能

这是设备管理的"管家",负责动态、智能地处理设备插拔事件。其核心组件是udev

在没有udev的早期,设备节点是静态创建的(用mknod命令),这无法处理热插拔设备。udev作为现代Linux默认的设备管理器,完美解决了这个问题。

它的工作原理是:

监听事件:作为守护进程(udevd)常驻后台,监听内核通过netlink套接字发出的uevent(设备事件)。

匹配规则:当收到设备添加/移除事件时,udev会根据预先定义的规则文件(位于/etc/udev/rules.d/)进行处理。规则文件非常灵活,可以基于设备的总线位置、厂商ID、序列号等属性进行匹配。

执行动作:根据匹配成功的规则,udev/dev目录下动态创建或删除设备节点,并可以设置其文件权限、所有者,甚至创建有意义的符号链接(如/dev/disk/by-uuid/)或执行自定义脚本。

简单来说,devtmpfs在系统启动时负责创建最基本的设备节点,而udev则在此基础上进行精细化、动态化的管理。

四、应用题

1、假设一个磁盘有200个磁道,编号从0199。当前磁头正在143道上服务,并且刚刚完成了125道的请求。如果寻道请求队列的顺序是:
86, 147, 91, 177, 94, 150, 102, 175, 130
问:为完成上述请求,下列算法各自磁头移动的总量是多少?
1 FCFS 2SSTF 3 电梯法

答:

已知

磁道数:0~199

当前磁头位置:143

刚刚完成了 125 道的请求因此移动方向是从 125 143(向磁道号增加的方向移动)。

请求队列(按到达顺序):86, 147, 91, 177, 94, 150, 102, 175, 130

1FCFS(先来先服务)

按请求顺序依次服务,计算每次寻道距离的绝对值:

服务顺序

当前磁道

下一磁道

移动距离

初始

143

86

57

86

86

147

61

147

147

91

56

91

91

177

86

177

177

94

83

94

94

150

56

150

150

102

48

102

102

175

73

175

175

130

45

总移动量 = 57 + 61 + 56 + 86 + 83 + 56 + 48 + 73 + 45= 565

 FCFS = 565

2SSTF(最短寻道时间优先)

每次都选择离当前磁道最近的请求。
初始 143,队列 {86,147,91,177,94,150,102,175,130}

  1. 最近是 147|147-143|=4
    移动 4 → 当前位置 147,移出 147
    队列:86,91,177,94,150,102,175,130
  2. 最近是 150|150-147|=3
    移动 3 → 当前位置 150,移出 150
    队列:86,91,177,94,102,175,130
  3. 最近是 130|130-150|=20
    移动 20 → 当前位置 130,移出 130
    队列:86,91,177,94,102,175
  4. 最近是 102|102-130|=28),比 8644)近,比 9436)近
    移动 28 → 当前位置 102,移出 102
    队列:86,91,177,94,175
  5. 最近是 94|94-102|=8
    移动 8 → 当前位置 94,移出 94
    队列:86,91,177,175
  6. 最近是 91|91-94|=3
    移动 3 → 当前位置 91,移出 91
    队列:86,177,175
  7. 最近是 86|86-91|=5
    移动 5 → 当前位置 86,移出 86
    队列:177,175
  8. 最近是 175|175-86|=89),17791 175
    移动 89 → 当前位置 175,移出 175
    队列:177
  9. 最后 177|177-175|=2
    移动 2 → 当前位置 177
  10. 总移动量 = 4 + 3 + 20 + 28 + 8 + 3 + 5 + 89 + 2= 162

 SSTF = 162

3)电梯算法(SCAN,沿当前方向服务完再折返)

当前方向(从 125 → 143)是向磁道号增加的方向。

请求队列:86,147,91,177,94,150,102,175,130

大于等于 143 的请求:147,177,150,175 → 排序:147,150,175,177

小于 143 的请求:86,91,94,102,130 → 排序(反向,因为回到 0 方向后从大到小服务):130,102,94,91,86

步骤

1. 143 向上 → 147(4), 150(3), 175(25), 177(2)
移动 4+3+25+2 = 34

2. 到达 177 后,调头向下,先到 130177-130=47
然后依次 130→102(28), 102→94(8), 94→91(3), 91→86(5)
移动 47+28+8+3+5 = 91

总移动 = 34 + 91 = 125

 SCAN = 125

最终答案

FCFS = 565

SSTF = 162

电梯法(SCAN125

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐