OS-设备管理
IO设备
概念与分类
- 即输入输出设备(Input/Output)
- 将数据输入到计算机,或者接受计算机输出的设备。
- UNIX将外部设备抽象成文件,用户使用与文件操作相同的方式处理对外部设备操作。
- 分类:
- 人机交互类设备:数据传输速度慢
- 存储设备:数据传输速度快
- 网络通信设备:数据传输速度介于两者之间
- 块设备:以块为基本单位进行数据传输,速度快,可寻址
- 字符设备:以字符/字节为基本单位进行数据传输,速度慢,不可寻址,常使用中断驱动
I/O控制器
- IO设备由机械部件和电子部件构成。
- 机械部件用于具体的IO操作。
- 电子部件为IO控制器(设备控制器),为CPU控制机械部件提供桥梁。CPU控制IO控制器,IO控制器控制设备机械部件。
- IO控制器的功能:
- 接受和识别CPU的命令:控制寄存器存储CPU发来的命令和参数
- 向CPU反映设备的状态:状态寄存器存储设备状态
- 数据交换:数据寄存器,用于暂存CPU和设备之间的交换数据
- 地址识别:为各个寄存器设置不同的地址
- IO控制器的组成
- CPU与控制器的接口:实现CPU与控制器之间的通信。CPU通过控制线发出命令,通过地址线决定对哪个设备进行操作,数据线用于与数据寄存器进行数据交换。
- 控制器与设备的接口:实现控制器与设备之间的通信。
- IO逻辑:接受识别CPU发来的命令,对设备发出命令。
- 当控制器连接多个设备时,会有多个不同寄存器对应不同的设备。
- 如果控制器中的寄存器与内存地址统一编址,就是内存映像IO;
- 可以通过对内存的操作实现对寄存器的操作
- 如果采用IO专用地址,控制器中的寄存器单独编址,与内存地址不一样,则为寄存器独立编址
- 需要设置专门的命令来操作控制器
IO控制方式
程序直接驱动

- 完成一次读写操作的流程:CPU向控制器发送读取指令,控制器启动设备设置状态为未就绪(忙碌),控制器准备读取的数据放入缓冲区。控制器的速度比CPU慢很多,所以CPU不断循环询问控制器的状态是否就绪,若已就绪就读取缓冲区,放入CPU中的寄存器,再转入内存。
- 数据流向:
- 读(输入)操作:IO设备-CPU-内存
- 写(输出)操作:内存-CPU-IO设备
- CPU干预频率很高:CPU要不断轮询检查。
- 数据传输单位:字
- 优点:实现简单
- 缺点:CPU利用率低,长期处于忙等状态
中断驱动

- 因为IO设备速度很慢,可以在CPU发出指令之后,阻塞等待IO的进程,切换到别的进程运行。但IO完成后向CPU发出中断信号,CPU检测到中断后会保存当前进程的运行环境,进入中断处理程序处理中断,然后进行IO操作,完成后,再恢复运行环境,接着运行。
- CPU会在每个指令周期的末尾检查中断。
- 中断的上下文切换有一定开销,频繁切换上下文会降低系统性能。
- CPU干预:只需要开始IO前发送指令,完成后进行读写操作即可。等待IO的过程可以切换其他进程执行。
- 数据流向:
- 读(输入)操作:IO设备-CPU-内存
- 写(输出)操作:内存-CPU-IO设备
- 数据传输单位:字
- 优点:CPU与IO设备并行工作,CPU利用率得到提升。
- 缺点:频繁的上下文切换,导致CPU时间开销大
DMA

- DMA:直接存储器存取,主要用于块设备控制
- 数据传输的基本单位是块(连续的多个块)。
- 数据的流向是:设备直接到内存或者内存直接到设备,不需要CPU作为中介。
- 读操作:设备-内存
- 写操作:内存-设备
- CPU发出指令和参数,阻塞等待IO的进程,然后DMA完成指令后发出中断,CPU处理中断。
- DMA组成:主机-控制器接口,IO逻辑,控制器-设备接口。
- DR:数据寄存器,暂存数据
- MAR:内存地址寄存器,记录要操作的数据的地址。
- DC:数据计数器,表示剩余要处理的字节数
- CR:状态寄存器:存放CPU发来的指令,设备的状态。
- 系统总线将DMA和内存直接连接在一起,因此读写过程不需要CPU干预。
- DMA读写数据时,一个字一个字操作,读/写完一个块后在整体操作一个块。
- 优点:数据的传输不需要经过CPU,增加了数据传输效率,CPU和IO设备的并行性。
- 缺点:一次只能读写一个块或连续的多个块,无法处理多个离散的块。
通道控制
- 通道是一种硬件。可以识别一系列通道控制指令。
- IO流程:
- CPU向通道发出IO指令。指明通道程序在内存的位置和要操作哪个IO设备,之后阻塞等待IO完成的进程,切换到其他进程。
- 通道去执行通道程序,完成一系列IO操作。
- 通道执行完后,向CPU发出中断信号,
- CPU干预频率进一步降低:只有完成一组数据块的IO后才需要中断请求CPU干预。
- 数据传输单位:一组数据块
- 数据流向:
- 读操作:设备-内存
- 写操作:内存-设备
- 缺点:实现复杂,需要专门硬件支持。
- 优点:CPU,IO,通道并行工作,资源利用率很高。
IO软件层次

- 每一层都会利用下一层提供的接口,实现某些功能,封装后向上层提供接口
- 用户层软件:实现与用户交互的接口,用户使用该层提供的库函数。并将用户请求转化成格式化的IO请求,调用相关的系统调用请求内核相关服务
- 设备独立性软件(设备无关性软件):属于内核,向上层提供统一的系统调用接口,实现设备的保护(访问权限管理),差错处理(对设备的错误处理),设备的分配与回收,数据缓冲区管理。建立逻辑设备名和物理设备名的映射关系(逻辑设备表,LUT),并根据设备类型调用对应的驱动程序。
- 设备驱动程序:属于内核,负责对硬件设备的具体控制,将上层的指令转化成设备能懂的命令。不同的IO设备硬件特性不同,驱动程序也不同。驱动程序一般以独立进程存在。
- 中断处理程序:属于内核,根据中断信号的类型,找到对应的中断处理程序执行。
- 硬件: 完成具体与机械设备之间的IO操作
IO应用程序接口
- 字符设备接口:
get,put,读写一个字符 - 块设备接口:
read,write,读写连续的内存块空间 - 网络设备接口(
socket):创建一个网络套接字,指明网络协议,将套接字绑定到某个本地端口上,连接到远程地址connect,从套接字中读写数据。
(非)阻塞IO
- 阻塞IO:发出系统调用后,进程需转为阻塞态等待,必须等待操作完成才能继续执行(字符设备接口)
- 非阻塞IO:发出系统调用后,进程无需阻塞等待,立即返回,无需等待操作完成。(块设备接口)
设备驱动程序接口
- 操作系统规定了设备驱动程序的接口标准,不同设备硬件必须按照标准开发驱动程序,以便上层调用。
IO核心子系统
- IO核心子系统属于内核部分,包括:设备独立性软件,设备驱动程序,中断处理程序
- 假脱机技术在用户层软件实现。但也属于IO核心子系统需要实现的。
- 设备独立性软件层:IO调度,设备保护,设备分配/回收,缓冲区管理
- IO调度算法:确定一个好的顺序处理各个IO请求。
- 设备保护:设备被看作特殊的文件,操作系统的文件保护功能确定了文件的访问权限。
假脱机技术(SPOOLing)
脱机输入输出技术
- 指输入输出操作与主计算机的CPU处理完全分离,使用专门的外围机来管理I/O设备。
- 外围机专门管理I/O设备,可以多任务并行:
- 外围输入机:持续读取新作业
- 外围输出机:持续打印已完成的作业
- 主机:持续处理磁带上的作业
- 数据流:输入设备 → 外围机 → 磁带 → 主机 → 磁带 → 外围机 → 输出设备
假脱机技术

- 假脱机技术(Simultaneous Peripheral Operations On-Line)使用软件的方式模拟脱机技术,实现外围设备与CPU的并行工作。用磁盘替代磁带,软件模拟外围机。
- 在磁盘中开辟两个空间
- 输入井:模拟输入磁带,用于存储IO设备输入的数据。
- 输出井:模拟输出磁带,用于存储进程输出的数据。
- 建立两个进程
- 输入进程:模拟输入外围机
- 输出进程:模拟输出外围机
- 输入进程和输出进程并发运行,要有多道程序技术的支持。
- 建立两个缓冲区(内存中,作为IO设备和磁盘输入输出井之间的中转站)
- 输入缓冲区:在输入进程的控制下,输入缓冲区暂存从输入设备输入的数据,一起转入输入井
- 输出缓冲区:在输出进程的控制下,输出缓冲区暂存从输出井送来的数据,一起转入输出设备
- 数据流动:输入设备 → (输入缓冲区) → 输入进程 → 输入井 → 处理进程(CPU) → 输出井 → 输出进程 → (输出缓冲区) → 输出设备
- 用SPOOLing技术能实现虚拟设备,即将需要互斥访问的临界资源虚拟成可以同时访问的共享资源,提高了资源的利用率,大幅提高CPU利用率,改善了用户体验。
设备分配与回收
- 设备分配考虑的因素:设备的固有属性,分配算法,安全性。
- 设备的固有属性:
- 独占设备:一个时段只能分配给一个进程
- 共享设备:可同时分配给多个进程使用
- 虚拟设备:采用SPOOLing技术将独占设备虚拟成的虚拟共享设备。
- 分配算法:先来先服务,最短优先...
- 安全性:
- 安全分配方式:为进程分配一个设备后将进程阻塞,本次IO完成后再唤醒。
- 优点:破外等待保持条件,不产生死锁。
- 缺点:对进程而言,IO和CPU只能串行工作。
- 不安全分配方式:进程发出IO请求后,系统分配IO设备,进程可以继续执行发出新的IO请求。只有IO得不到满足再阻塞。
- 静态分配:进程运行前为其分配全部所需资源。(不发生死锁)
- 动态分配:进程运行时动态分配资源。
电源管理
降低能耗的方法
- 第一种方法是当计算机的某些部件(主要是I/O设备)不用的时候由操作系统关闭它们,因为关闭的设备使用的能量很少或者不使用能量。
- 第二种方法是应用程序使用较少的能量以低能耗方式运行,这样为了延长电池时间可能会降低用户体验的质量。
硬件上的支持
多级能耗状态
- 对CPU、内存和 I/O设备设置多级能耗状态
- 工作状态(On):系统处于完全运行状态。
- 睡眠状态(Sleeping):系统暂停,但保留现场在内存中,以便快速唤醒。
- CPU: 停止工作/低功耗模式。除极少量电路用于侦测唤醒信号外,基本断电。
- 内存: 保持供电。内存进入“自刷新 (Self-refresh)”模式,因为内存是易失性存储器,断电数据就没了。
- I/O 设备: 大部分断电(显示器黑屏、硬盘停转),但网卡或键盘可能保持微弱供电以支持“网络唤醒”或“按键唤醒”。
- 能耗低(只维持内存和唤醒电路)。恢复速度快(几秒钟)。
- 休眠状态(Hibernating):将内存中的所有数据“镜像”写入硬盘,然后完全关机。
- CPU完全断电。
- 内存完全断电。在断电前,OS 会把内存里的数据写入硬盘的一个专门文件(如 Windows 的
hiberfil.sys)。 - I/O 设备完全断电。
- 能耗零(或接近零,同关机)。
- 恢复速度较慢。启动时,BIOS 自检后,OS 不会重新引导,而是从硬盘把之前的内存镜像读取回内存,恢复现场。
- 关闭状态(Off):正常的关机。操作系统会关闭所有程序,丢弃所有未保存的进程状态,只保留系统配置。下次启动是“全新启动”
能耗状态的切换
- 能耗状态的切换由操作系统进行管理。
- 空闲一个设定时间后切换到低一级的能耗状态,一旦使用即被唤醒。
- 要使用设备,它必须处于工作状态。
- 当设备在短时间内暂时不使用时,可以将其置于睡眠状态,这样可以减少能量消耗。
- 当设备在一个较长的时间间隔内不使用时,可以将其置于休眠状态,这样可以进一步减少能量消耗。
- 这里的权衡是,使一个设备脱离休眠状态常常比使一个设备脱离睡眠状态花费更多的时间和能量。
- 最后,当一个设备关闭时,它什么事情也不做并且也不消耗电能。
- 并非所有的设备都具有这些状态,但是当它们具有这些状态时,应该由操作系统在正确的时机管理状态的变迁。
显示器电源管理
- 显示器是计算机中的最大电源能耗部件。原因,为了获得明亮而清晰的图像,屏幕必须是背光照明的
- 解决方案:
- 一段时间没有操作后,关闭显示器。
- 分区域加背光。把屏幕分成若干个区域,只“点亮”程序窗口所在的区域。

硬盘电源管理
- 硬盘要消耗相当一部分电能,因为要保持高速旋转,即使没有存取操作。
- 解决方案:
- 一段时间没有存取操作后,降低磁盘的旋转速度。一旦需要,再“加速”。但是重新加速磁盘也有一定的开销,需要消耗相当多额外的能量。
- 在RAM中拥有一个大容量的磁盘高速缓存。如果需要的盘块在缓存,则“空闲”的磁盘不需要再次启动。
- 另一种可能是告知各应用程序当前磁盘的状态,这样程序就可以选择是否在当前存取磁盘。
- 例如,一个字处理程序可能被设置成每隔几分钟将正在编辑的文件写入磁盘。如果字处理程序知道当它在正常情况下应该将文件写到磁盘的时刻磁盘是关闭的,它就可以将本次写操作推迟直到下一次磁盘开启。
CPU
- 笔记本电脑可以切换到休眠状态,此时能耗几乎为零。在这一状态下CPU唯一能做的事情是当中断发生时醒来,通过中断唤醒CPU。
- CPU能耗和时钟频率与CPU的电压有关
- CPU能耗与电压的平方成正比
- 时钟频率与电压成正比
- 可通过降低电压的方法降低CPU能耗,而且对CPU速度的影响相对较小。
内存
- 对内存来说,有以下两个选择节省能耗
- 睡眠:刷新高速缓存,并关闭。高速缓存总是能够从内存重新加载而不损失信息。重新加载可以动态并且快速地完成,所以关闭高速缓存是进入睡眠状态。
- 休眠:把主存的内容写入磁盘,关闭主存。
- 休眠时,到内存的电能都被切断了,其代价是相当长的重新加载时间,尤其是如果磁盘也被关闭了的话。当内存被切断时,CPU或者也被关闭,或者必须自ROM执行。
- 如果CPU被关闭,将其唤醒的中断必须促使它跳转到ROM中的代码,从而能够重新加载内存并且使用内存。
- 尽管存在所有这些开销,将内存关闭较长的时间周期(例如几个小时)也许是值得的。与常常要花费一分钟或者更长时间从磁盘重新启动操作系统相比,在几秒钟之内重新启动内存想来更加受欢迎。
无线通信
- 如果无线接收器一直侦听是否有消息到达,这样耗能会很大。
- 解决方案:
- 空闲一段时间后关闭接收器。可能会错过到来的消息,这显然是不受欢迎的。
- 当移动计算机将要关闭无线电设备时,让移动计算机发送一条消息到基站(那时起,基站在其磁盘上缓冲到来的消息。当移动计算机再次打开无线电设备时,它会通知基站。此刻,所有积累的消息可以发送给移动计算机。
- 当无线电设备关闭时,生成的外发的消息可以在移动计算机上缓冲。如果缓冲区有填满的危险,可以将无线电设备打开并且将排队的消息发送到基站。
- 何时关闭:
- 空闲一段时间以后
- 由用户决定
- 由应用程序决定
- 由系统决定
- 何时再次打开:
- 由用户决定
- 定期地打开
- 当输出缓存区即将满的时候
- 由应用程序决定
- 由系统决定
热量管理
- CPU和一些设备由于高速运行而发热,所以需要进行散热。
- 散热方案:启动风扇降温,关闭相应设备
- OS需要监测机器的温度(OS决定开启或者关闭风扇,OS执行热量管理)
- 如果系统已接近允许的最高温度,操作系统可以选择打开风扇,这样会发出噪音并且消耗电能,也可以通过降低屏幕背光、降低CPU运行速度、降低磁盘旋转速度等方法了降低能耗,从而达到降温的作用,避免了开启风扇。
电池管理
- 智能电池可以与OS通信,报告最大电压、当前电压、最大负荷、当前负荷、最大消耗速率、当前消耗速率以及其他参数。
- 笔记本电脑可以查询以及显示这些参数。
- 可拥有多块电池,OS可“优雅地”从一块电池切换到另一块电池
驱动程序接口
- Windows的ACPI(Advanced Configuration and Power Interface,高级配置与电源接口 )
- OS可以通过此接口查询相关设备的性能以及状态。

浙公网安备 33010602011771号