操作系统原理设备管理.ppt_第1页
操作系统原理设备管理.ppt_第2页
操作系统原理设备管理.ppt_第3页
操作系统原理设备管理.ppt_第4页
操作系统原理设备管理.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

unit9 设备管理 操作系统原理 冯耀霖 设备 也称外部设备或i o设备 是指那些由于原理 结构 数据格式等原因不能与系统总线直接连接的装置 它们也是计算机系统不可或缺的重要组成部分 是计算机主机 cpu 内存 与外部环境进行交互和沟通的通道 显然 i o设备的存在才使得计算机的存在有了意义 就像一个人 如果没有与人交际和沟通的能力 则这个人通常被认为是痴呆或白痴 即使他实际上是一个天才 同样 一台没有i o设备的计算机 不管其计算功能多么强大 也是废铁一堆 所以 设备管理也是操作系统的重要组成部分 是操作系统的基本功能之一 而且由于i o设备的种类繁多 各自的特性和使用方式有很大差异 因此 设备管理软件可以说是操作系统中最繁杂的部分 内容 设备 设备管理概述 设备驱动程序 独立于设备的i o软件 用户级i o软件 1设备 设备分类 设备的差异性 设备控制器 i o控制方式 1 1设备分类 可以说 外部设备 简称外设或设备 是计算机系统中最多样 差异最大的组成部分 不同的计算机系统所配置的外设也不同 对外设的分类方法有许多种 主要有以下三种 基本分类法 功能分类法 管理分类法 1 基本分类法它把外设大致分为三类 1 外存 磁盘 光盘 u盘 2 人 机通信设备 输入设备有 键盘 鼠标 话筒 光笔 扫描仪 数码相机等 输出设备有 显示器 打印机 绘图仪 扬声器等 3 机 机通信设备 输入设备有 传感器 仪器仪表等 输出设备有 执行器 仪器仪表等 输入输出设备有 网卡 modem等 2 功能分类法如果从外设的功能上来分 只有两种 存储设备和通信设备 1 存储设备即外存 外存的共同特点是都对存储区进行分块管理 也就是说 这些设备在逻辑上可以看成是有若干存储块组成的存储空间 所以传统上也被称作块设备 另外 为了进行大块数据的传输 通常需要在内存为它们创建比较大的数据缓冲区 2 通信设备除了外存之外的那些外设通常都是通信设备 它们是计算机与外部环境进行交互的主要手段 这些设备的数据量往往不是很大 也不是很集中 因此这类设备在内存中不需要较大的缓冲区 或者就根本没有缓 冲区 例如键盘 鼠标等 这些设备传统上也被称作字符设备 3 管理分类法按设备的管理性质可把外设分为两类 1 系统设备是指操作系统生成时就纳入系统管理范围的各种标准设备 基本配置 操作系统提供有相应的数据结构和设备驱动程序等 如键盘 鼠标 显示器 磁盘驱动器等 2 用户设备是指系统设备之外的非标准设备 在安装操作系统时没有配置 而由用户根据需要自己安装配置 如扫描仪 绘图仪等 1 2设备的差异性 外部设备由于种类不同 制造商不同 技术标准不同 其特性可以有巨大的不同 而这种不同越是明显 对操作系统的设计的挑战就越大 因为屏蔽这些巨大的不同 使得不同的设备相互共存并不是一件容易的事情 其中最为明显的一种差异是数据传输的速度 它涵盖的范围从每秒十个字节到几兆个字节 表9 1给出的是较为常见的一些设备的数据传输率 表9 1外设的数据传输率 1 3设备控制器 从设备的物理结构上来看 外设可能是电器的或机械的 甚至是机 电 光多种技术结合的 但不管其主体是哪种构成 只要它要与电子计算机相连接 那它就必须有电子器件部分 这也就是说 计算机的外设必须由两部分组成 一是外设的执行部分 电气的 机械或机 电 光多种技术结合的 也称设备主体 二是外设与系统的接口部分 而且这部分一定是电子部分 因为计算机系统必须通过这些接口来对外设进行控制和数据传输 设备控制器 也称适配器 是外设与总线之间的一组电子器件 例如 串行口控制器就是一种简单的设备控制器 它是计算机上用来控制串行信号的一块芯片或一个芯片组 再如贴在磁盘侧面的电子线路板也是一种设备控制 器 磁盘控制器 cpu就是通过这个控制器来对磁盘进行各种操作的 为使处理器可以像访问内存那样来访问外设 计算机系统必须提供一些互不冲突 能按地址访问 并能以数字信号进行数据传送的设备寄存器 通常每个设备都有三类设备寄存器 状态寄存器 控制寄存器 数据寄存器 这些寄存器都有自己的专有地址 称做端口 port 这些寄存器的作用分别为 状态寄存器用来由控制器向处理器提供设备的当前工作状态 例如 设备的当前操作是否执行完毕 数据是否可以被读出或写入 以及各种错误提示等 这些信息通常都用字位 bit 来表示 控制寄存器主要用来由处理器向控制器传送操作命令 还用来管理外设工作模式 即在设备初始化时或运行时 处理器可以通过向控制寄存器写入命令来改变设备工作模式或设备状态 例如 在串口寄存器中专有一位信息是用来选择通信方式的 全工或半工 还有一位信息是用来设置数据字长的 以及其他用来设置通信波特率等的各个控制位 数据寄存器 有些设备控制器又进一步设置为输入数据寄存器和输出数据寄存器 则是输入输出数据的暂存寄存器 用来实现设备与处理器之间的数据交换 除了设备寄存器外 有些设备控制器还设有i o数据缓冲区 以提高与cpu交互数据的效率 块设备控制器都 设有i o数据缓冲区 而有些字符设备控制器也设有i o数据缓冲区 如视频控制器 所有设备控制器的寄存器和i o数据缓冲区构成的地址空间称作i o地址空间 i o空间 对于i o地址空间的处理有三种方式 1 独立编址的i o空间在这种方式下 i o空间与内存是完全脱离的 每个设备寄存器被赋予一个i o端口 这个端口就是一个9位或16位的一个整数 它与内存地址没有任何关系 而正是由于端口与内存地址没有任何关系 或者说端口不是内存地址 操作系统必须使用专门的输入输出特殊指令来进行数据的读写 例如 许多指令集使用inreg port 指令用来从设备读数据 而指令outport reg则用来将数据写入设备 这种方式的优点是i o空间与内存分离 输入输出操作不会影响或干扰内存操作 尤其是输入输出软件的可靠性通常不如内存管理软件 这种分离就显得更有价值 但俗话说 成也萧何 败也萧何 这个优点恰恰也是其缺点 由于i o空间与内存分离 输入输出指令与内存访问指令自然也不相同 输入输出所使用的in out等指令都是低级的汇编指令 由于高级编程语言不支持这种低级指令 从而形成高级语言屏蔽的一个漏洞 程序员如果想要进行i o 则必须使用低级语言 这将增大程序设计的难度和可靠性 2 内存映射i o空间顾名思义 就是将i o空间映射到内存里面 与内存统一编址 具体来说 就是系统在内存空间中划出一部分来作为i o空间 即所有设备寄存器的端口和i o数据缓冲区都是正规的内存地址空间的一部分 cpu对这些空间的读写与对普通内存的读写使用同样的指令 但引起的是与外部设备间的数据传送 risc 精简指令集 类cpu计算机都使用这种方式 这种方式虽然具有i o与内存访问统一的优点 但是也存在一些问题 例如总线竞争 在单总线系统里 内存和外设都需要对总线上的数据进行监听 以确认命令是否针对自己 这样将产生总线竞争而降低系统效率 3 混合i o空间这是上述两种方式的组合 i o数据缓冲区为内存映射 而设备寄存器则独立于内存 例如采用intel奔腾处理器的计算机系统 将640k到1m的主存地址留给i o数据缓冲区 而0到64k的地址留给i o端口 设备控制器与cpu通过总线来连接 总线是一种严格定义的描述了线上传输数据的协议 凡是符合总线协议的各种设备都可以共同使用总线与cpu进行数据通信 cpu 内存 字符设备控制器 字符设备控制器 dma控制器 总线 图9 1单总线型i o系统结构 1 4i o控制方式 i o控制方式 即为实现数据的输入输出 cpu与外设之间的交互方式 有三种基本的i o控制方式 轮询 polling 方式 中断驱动方式 dma方式采用何种i o控制方式将直接影响设备管理的实施方法及效率 1 轮询方式也称程序控制方式 它要求在程序中的i o指令后紧接着安排循环查询指令 即在cpu启动了设备控制器进 行数据的输入输出后便以循环查询设备状态的方式来等待i o的完成 这种方式的特点是 cpu处于主动地位 涉入i o过程的程度很深 而外设则处于被动地位 是一种同步工作方式 2 中断驱动方式使用轮询方式时 cpu需要读取设备状态寄存器以检测设备的当前状态 如果设备还未完成此次的i o 则需要cpu不断地查询 由于cpu与外设的速度差距巨大 因此在i o过程中 cpu绝大部分时间都处于繁忙等待状 态 cpu的效率十分低下 一种更为有效的方式是让设备处于某种主动地位 而将cpu从忙等待中解脱出来 在启动了某个外设后 立即阻塞现行进程 cpu就可被调度转去执行其他进程而不是在原地踏步等待 当某个数据i o任务完成后 由设备控制器向cpu发出一个i o中断 驱动cpu中止现行进程的执行而转去执行相应的中断处理程序 并唤醒等待该i o的进程 显然 这种i o控制方式可以大大提高cpu的效率 因此是设备与cpu进行交互的基本手段 3 dma方式 虽然中断驱动方式避免了轮询方式的忙等待现象 从而大大提高了cpu的效率 但这主要是对慢速的字符设备而言的 而对于一次需要传输大量数据的高速块设备来说 仍然不能令人满意 因为设备的数据寄存器的容量是有限的 故一个i o任务中待传输的数据需要多次送往数据寄存器 而每当设备传送完一次数据寄存器中的数据时 就会触发一次i o中断 因此在块设备的一次i o任务的完成过程中 cpu需要响应和处理许多次i o中断 而每一次i o中断的响应和处理都需要付出不小的额外cpu开销 cpu的效率并未获得太多改善 人们发现 在设备与主机交换大量数据时 cpu只是数据传输的一个中介 用功能强大的cpu长时间去充当 一个传输数据的中介角色显然得不偿失 于是就设计出一种专门负责执行数据i o事务的处理器 i o处理器 它比cpu要简单得多 但也便宜很多 它只能执行少量的指令 主要是数据i o指令 i o处理器既可以构建在设备控制器里面 这样的控制器称为dma控制器 也可以作为独立的实体挂在计算机主板上 最简单的i o处理器在一个时间只能处理一个i o 即不能并发 而复杂的i o处理器可以同时处理多个i o 即它能够提供多个i o通道 每个通道可以对应一个i o设备 有了i o处理器 就可以将cpu从繁杂的i o事务中解脱出来 dma directmemoryaccess 直接内存访问 方式就是使用i o处理器的i o控制方式 主要是针对块 设备的 dma方式的目的当然是降低cpu响应中断的频率 使得一个传输大量数据的i o任务中需要响应许多次中断变为只响应一次中断 dma方式在设备和内存之间建立了直接数据通路 即设备和内存之间可直接读写数据 且数据传输的基本单位是数据块 一个i o任务中的所有数据是在一个dma控制器的控制下完成传输的 且在整个传输过程中无需cpu的直接干预 直到该任务中的所有数据都传输完后 dma控制器才向cpu发出一个i o中断 dma控制器在普通设备控制器的基础上又增设了两个寄存器 内存地址寄存器和数据计数寄存器 dma方式的i o过程如下 cpu对dma控制器进行设置 告诉其存放i o数据的主存区地址和传输长度 分别送入内存地址寄存器和数据计数寄存器 启动dma过程 将系统总线的使用权暂时移交给dma控制器 dma控制器进行数据传输 即接管对系统总线的使用权 总线周期窃用 启动设备进行数据的i o 并进行数据传送个数的计数以及内存区地址的增量 当数据传送完毕 dma控制器向cpu发出一个i o中断 同时向cpu移交总线使用权 cpu响应中断 处理善后事宜 dma方式的优点是显著减少了中断次数和cpu的i o操作次数 从而大大减轻了cpu的i o负担 加快了i o的速度 不仅有利于cpu效率的发挥 而且能满足高速i o设备对成组数据的高速传送要求 缺点自然是增加了成本和复杂性 而且由于dma控制器需要与cpu竞争系统总线 其效率的提高不如理论上的期望 2设备管理概述 设备管理的目标和功能 设备控制块 i o软件的分层结构 2 1设备管理的目标和功能 1 设备管理的目标设备管理是操作系统的重要组成部分 现代操作系统的设备管理的基本目标除了公平和有效之外 另一目标是把所有外设都抽象成文件 使得对物理特征各异的各种设备都可以以统一的文件方式进行操作 具体地说 它必须满足下述设计要求 为用户提供方便 统一的设备使用界面 将复杂的具体设备操作控制过程隐藏起来 通过统一的文件操作界面进行i o操作 既方便了用户对设备的使用和满足用户使用外设的各种要求 又有利于将不同类型的设备配置在系统中 提高外设的利用率 尽量提高并行程度 一方面 用户使用外设常有很大的随机性 设备管理应能根据当时设备的忙闲状况进行分配 实现资源共享 另一方面 充分发挥设备和主机的效率 有效地解决cpu与外设之间传输速率不协调的问题 另外 将独享设备尽量虚拟成共享设备 以增大资源利用率和降低死锁发生的概率 例如 将一台打印机虚拟成多台可共享的逻辑打印机 用户程序独立于设备 即实现程序与设备的无关性 程序中可使用逻辑设备名或设备文件名来使用设备 它们与实际使用的物理设备无关 当物理设备发生故障或有更换时 用户程序不必修改 就可使用系统分配的其他相关设备 2 设备管理的功能为了达到设备管理的目标 设备管理系统通常需要实现如下基本功能 设备驱动和错误处理 主要是按照i o控制方式 对不同的设备完成相应的i o中断 设备控制器操作 读写操作等物理i o过程 针对不同的设备请求 通过设备驱动程序完成对设备的直接控制 错误处理指的是对输入输出过程中产生的错误进行侦测与纠正 而且纠错应该在最靠近硬件的层面上进行 系统与设备间的协调 主要是速度上的协调 要解决快速的cpu与慢速的i o设备之间的操作不匹配的问题 通常采用i o缓冲区的方式来解决这个矛盾 设备管 理要实现i o缓冲区的建立 分配及回收 设备调度与分配 即对等待共享设备i o操作的进程进行调度 而对多个进程争用独占设备进行分配 2 2设备控制块与设备文件 就如用进程控制块 pcb 来表示一个进程 用文件控制块 fcb 来表示一个文件一样 操作系统用设备控制块 dcb 来抽象表示一个外部设备 操作系统在内核空间中为每个设备建立一个设备控制块 用于描述本设备的各种抽象属性及控制信息 dcb包含的内容如 设备名 即设备文件名 设备id 设备工作状态 控制器端口 i o缓冲区端口 i o请求队列指针 设备驱动程序指针 设备中断处理程序指针 设备id由主设备号和次设备号构成 主设备号用于标识设备类型 如ide硬盘 scsi硬盘 显示器 打印机等 同一类设备使用的是同一个设备驱动程序 次设备号用于标识同类设备中的某个具体设备及其控制器 即同类设备的序号 这里的设备驱动程序指针实际上是一个指针组 其中的每个指针指向一个设备操作函数 设备驱动程序容易被人误认为是一个完整的 能够独立运行的程序 其实不然 它只是一组进程可调用的 能对设备实施i o操作及控制操作的内核功能函数 如open 打开close 关闭 read 读数据write 写数据llseek 移动读写指针readdir 读目录ioclt 输入输出控制release 释放缓存当然 对于块设备和字符设备以及不同的块设备和不同的字符设备 各自所含的功能函数的个数有所不同 同名函数具体执行的算法也是不同的 从而构成了不同设备的驱动程序 设备驱动程序就是操作系统对设备的物理抽象 最底层抽象 至于如何管理dcb则可以有不同的方法 自unix后 现代操作系统普遍将dcb抽象成特殊文件 即设备文件 与数据文件一样 系统为每个设备文件建立一个fcb 但设备文件的特殊之处在于 它并没有数据文件意义上的文件体 即它并不在磁盘空间中占有一席之地 换言之 操作系统并不给设备文件分配磁盘空间单元 那么 设备文件的文件体是什么呢 就是dcb 例如 linux是按如下方式处理的 linux支持三种类型的硬件设备 字符设备 块设备及网络设备 字符设备能够存储或传输不定长数据 某些字符设备可以每次传送一个字节 可以不经过缓冲区直接进行读 写 如系统中的串行口 dev dnao和 dev cnal 传送完一个字节后产生一个i o中断 另一些字符设备可以在设备内缓存数据 因此可以一次传送完多个字节后产生一个i o中断 块设备以块为单位传输数据 每个块设备都可建有一个i o数据缓冲区队列 缓冲区的大小与块相等 因此 块设备一次可传输一块或多块数据 网络设备也称包设备 如以太网卡 是通过bsdsocket和网络子系统访问 它负责数据包的发送和接收 网络协议 如tcp ip 就建立在网络设备驱动程序之上 与字符设备和块设备不同的是 网络设备传输的不是无结构的流式数据 而是有结构的数据包 针对这三类设备 linux在内核空间中建立了三个设备注册表 也称设备开关表 分别是 块设备注册表 字符设备注册表 以及网络设备注册表 它们均为线性表 数组 每个已配置在系统中的外设都在相应的设备注册表中占有一个表项 表项中包含了dcb中的核心内容 主要有 设备名 即设备文件名 主设备号 驱动程序指针 dcb中的其他内容则被记录在i节点中 i节点中也设置有主设备号 通过它与相应的注册表表项连接了起来 从而在设备文件名与设备驱动程序之间建立起了一条通路 见图9 2 i节点号 外设 主设备号 fops read write write read 驱动程序 中处程序 设备文件名 设备目录 i节点 设备注册表 图9 2设备文件名到设备驱动程序的通路 intrrpt 2 3i o软件的分层结构 设备管理软件 也称作i o控制系统 iocs 或i o软件 是操作系统中非常繁杂的部分 通常按照i o功能进行分层 每一层提供独特的功能 并与相邻的层面间设计有标准界面 当然 不同的操作系统这种分层是不同的 但一般都会有如下几层 从高到低 用户级i o软件 独立于设备的i o软件 设备驱动程序 设备中断处理程序 i o请求 用户进程 i o应答 用户级i o软件 独立于设备的i o软件 设备驱动程序 硬件 图9 3i o软件的分层结构 设备中断处理程序 3设备中断处理程序 由于大多数i o均为中断驱动 设备中断处理程序就成为i o软件的不可分割的组成部分 由于设备中断处理程序直接与硬件相关 针对不同的外部设备 中断响应的处理也不尽相同 因此 设备中断处理程序处于i o软件分层结构里面的最底层 而为了降低操作系统的复杂性 设备中断处理程序的暴露窗口应该越小越好 与其打交道的os部分也是越少越好 而降低暴露窗口的最好办法是让设备驱动程序负责i o中断响应 即设备驱动程序启动i o操作后阻塞 通过执行信号量的p操作或等待信号 然后等待i o中断 当响应i o中断时 先执行设备中断处理程序 在设备中断处理程序完成相关的处理后唤醒设备驱动程序 通过执 行信号量的v操作或发送信号 i o中断处理过程大致有以下几个步骤 1 关中断 cpu中的中断响应部件响应中断请求后立即关中断 2 保存现行进程 被中断的进程 的执行现场 上下文 3 分析中断源 中断类型和发出中断的设备id 切换到相应的设备中断处理程序 4 执行设备中断处理程序 设备中断处理程序首先从设备控制器中读出设备状态 根据设备的当前状态作相应处理 最后唤醒相应的设备驱动程序 5 恢复被中断进程的执行现场 6 开中断 4设备驱动程序 什么是设备驱动程序 设备驱动程序的算法框架 4 1什么是设备驱动程序 设备驱动程序 顾名思义 就是直接驱动外部设备进行i o操作的软件 其作用就是实现对外部设备的软件封装 隐藏外部设备的所有硬件细节 向用户提供一个统一的操作界面 是操作系统对外部设备的物理抽象 它属于与设备控制器直接联系的iocs部分 与具体的外设直接相关 并针对每个特定的外设进行过优化 设备驱动程序通常由设备制造商提供 但归属于操作系统内核 正因为这一属性 设备驱动程序是操作系统安全的一大隐患 由于需要直接驱动设备的运行 设备驱动程序必须清楚设备的所有物理细节 例如 磁盘驱动程序必须清楚磁盘控制器设置有多少寄存器及其端口 了解磁盘拥有的柱面数 磁道数 磁头数 盘面数 扇区数及扇区的容 量 臂的移动 交叉访问系数 电机驱动器 磁头稳定时间以及所有保证磁盘正常工作的硬件机制 鼠标驱动程序自然需要具备辨认是哪个按键被按下的能力 每种设备配置有一个设备驱动程序 但一个设备驱动程序并不是一个完整独立的程序 而是由一组相对独立的设备操作函数 内核函数 所构成 其中的每个函数都可被进程单独调用 实现相关的物理i o 在unix中 设备驱动程序与整个os内核编在一个二进制文件里 如果要增加新的设备驱动程序或者修改现有的设备驱动程序 则需要重新编译整个操作系统内核 unix的这种做法主要是考虑到安全因素 由于用户无法动态地装卸设备驱动程序 操作系统的安全性较高 不 过 这种不能动态装卸的限制让人感觉十分不便 因此在最新的unix以及linux版本里 建立了较复杂的可安装内核模块机制 它可支持设备驱动程序的动态装卸 windows操作系统从一开始 nt开始 就支持设备驱动程序的动态装卸 这也是windows不如unix安全的一个原因 4 2设备驱动程序的算法框架 1 在收到一个i o请求后 设备驱动程序做的第一件事是检查输入参数是否合法 如果不合法 则错误返回 否则 将i o请求的抽象表示转换为设备控制器能够认识的具体表示 例如 将线性的盘块号映射为磁道 磁头 扇区等 2 然后 设备驱动程序需要检查设备状态以确认设备是否处于闲置状态 如果设备正忙着 则将i o请求送入该设备的等待队列以待处理 并阻塞调用者 否则 若设备空闲 就驱动设备运行并启动电机 3 接着开始驱动真正的i o操作 设备驱动程序通过向设备寄存器里送入一系列的i o控制命令来进行物理的数据传输工作 如果需要 设备驱动程序通过自行阻塞 来等待i o中断 4 在被中断处理程序唤醒后 读取设备状态寄存器中的信息以检查此i o操作是否正确完成 如果正确完成的话 进行i o操作的善后处理 例如 对于读操作 需要将i o缓冲区中的数据传送到调用者指定的内存数据区中 继续 5 如果未正确完成的话 检查错误状态 对可修复性错误进行必要的出错处理 否则错误返回 5 如果该设备的等待队列非空 则唤醒等待的进程 6 正常返回此i o请求的调用者 5独立于设备的i o软件 统一界面 i o缓冲 设备的安全保护 设备的分配与调度 错误处理 假脱机 一般来说 设备驱动程序并不直接从用户程序处接收i o请求 而是通过另外一层中介获得用户请求 这层介于设备驱动程序与用户程序之间的中介就是独立于设备的i o软件 操作系统在设计时之所以有这层软件是因为i o软件的一部分与设备的具体特性有关 一部分则与设备的具体特性无关 而如果与设备无关 就可以将这部分抽象出来共用 并放置在设备驱动程序之上 为用户提供一个统一的i o界面 这种对于所有设备都一样的功能包括统一界面 i o缓冲 错误处理与报告 设备的分配与调度 假脱机等 有些操作系统把这层软件独立出来 并以系统进程方式运行 称之为设备服务器 server 如磁盘服务器 打印机服务器 终端服务器 网络服务器等 5 1统一界面 独立于设备的i o软件的一个重要目标是提供一个统一的i o界面 即让所有的i o设备看上去一样或相似 使用的办法则是将设备驱动界面标准化 unix操作系统开创的将i o设备抽象成特殊文件 设备文件 从而把所有的设备都纳入了文件体系的做法是当今最流行的i o统一界面模式 在这种模式下 对物理特征各异的各种设备都以统一的文件方式进行管理和使用 与数据文件一样 系统也为每个设备文件建立一个i节点 用于实现对设备的管理 不同的是 数据文件及其fcb是对外存空间的抽象 设备文件及其dcb则是对设备驱动程序的抽象 而设备驱动程序又是对物理设备 设 备控制器 的抽象 这种模式为设备的使用提供了统一的界面 即设备可以以文件的形式进行操作 对所有的设备都可以使用一组同名的文件操作函数 例如 系统调用open 打开设备文件 即建立起用户进程与目标设备驱动程序的连接 其返回的文件描述符就是目标设备对应的设备注册表表项的序号 系统调用write 写设备文件 即在目标设备上输出数据 系统调用read 读设备文件 即从目标设备上输入数据 系统调用close 关闭设备文件 即断开用户进程与目标设备的连接 对设备进行上述文件操作 其实就是在调用设备的驱动程序 5 2i o缓冲 缓冲是几乎所有i o设备都需要的一种功能 主要出于以下原因 字符设备的数据传输速度与cpu的处理速度严重不匹配 引入缓冲 可缓解它们之间的速度矛盾 一可提高数据传输速率 因为快速的cpu不必等待慢速的字符设备 二可防止溢出 因为字符设备来不及处理的数据可以存放在缓冲区内而不会丢失 对于块设备而言 数据是以整块进行读写的 而用户进程实际上可能只需要读取某块中的一部分数据或向块中写入部分数据 利用缓冲区便可以进行正确处理 另外 还便于多进程共享缓冲区中的数据 减少块设备的启动次数 与某设备有关的若干内存缓冲区形成一个设备 缓冲队列 当一进程对某设备提出i o请求时 首先在该设备的设备缓冲队列中查寻所需传输的数据是否已在缓冲区了 若已在缓冲区中 则可以立即共享 否则为它分配一个空闲缓冲区 再启动块设备读写 当然 缓冲也有缺点 就是降低了数据传输的时效性 因为数据层层缓冲处理是需要时间的 如果一个系统的时效性非常重要 则最好不要使用缓冲 而是在通信双方之间创建一个没有缓冲的直接通道 这样 数据从一方发出后 另一方将马上收到 例如 mach操作系统的x kernel就提供此种无缓冲的直接数据通道 自然 这种做法是可能比较危险的 必须非常小心来避免数据溢出和丢失 5 3设备的安全保护 设备的安全保护是指核查用户对所请求设备的访问权限 以实现对设备的保护 在unix linux中对设备提供的安全保护机制同普通文件和目录文件一致 采用rwx权限机制 由系统管理员 超级用户 为每台i o设备设置合理的访问权限 5 4设备的分配与调度 设备的分配针对独占设备而言 独占设备在某一时刻只能由一个进程使用 这就要求设备服务器根据对设备的使用要求和忙闲状态来决定是接受还是拒绝请求 设备分配的基本原则是 既要充分发挥设备的使用效率 又应避免由于不合理的分配导致进程死锁 还要实现设备的独立性 即用户程序提供的是逻辑设备名 设备文件名 而设备分配时需将逻辑设备名转换成设备id 主设备号 次设备号 后 再根据设备id进行分配 对独占设备的分配回收实际上属于对临界资源的管理 设备的调度则是针对共享设备 当服务器同时接收到多个用户进程的请求时 通过某种算法决定对这些请求如何排队 以何种次序响应它们 磁盘调度是典型的设备调度问题 1 磁盘驱动器的访问速度磁盘在读写数据时的访问速度称为磁盘的动态属性 磁盘是一种高速旋转设备 一旦加电 盘片就绕同心轴不停地旋转 对于移动头磁盘 访问一个盘块时一般要经过三个操作 移动磁头臂定位磁道 盘面旋转定位扇区 读 写一次访盘的时间由这三个操作的时间组成 分别称作 寻道时间 旋转延迟时间 传输时间 1 寻道时间指的是通过移动磁头臂把磁头从当前磁道移动到目标磁道所需要花费的平均时间 记为ts 寻道时间通常在8 20ms范围内 并且在近年来没有多少变化 2 旋转延迟时间指的是目标扇区旋转到磁头位置所花费的平均时间 对于当前的硬盘 旋转速度在每分钟3500到10000转 r m 因此旋转延迟时间的范围在3 8 57ms 3 数据传输时间这是把数据写入盘块或从盘块中读出数据所需花费的时间 它主要取决于磁盘的转速 有tt b rn 其中 tt是传输时间 b是要传输的字节数 n是一个磁道所含的字节数 r是转速 转 秒 当前的磁盘传输速率已达20mb s以上 传输1mb不大于50ms 传输1kb不大于0 05ms 因此 一个盘块的平均访问时间ta可表示成 ta ts 1 2r b rn 其中 传输时间只占了很小的比例 花费的时间主要是寻道时间和旋转延迟时间 尤其是寻道时间占的比例最大 因而它对磁盘i o性能的影响也最大 2 磁盘调度算法正如前面所述 影响磁盘读写时间的因素有三个 寻道时间 旋转延迟时间及数据传输时间 在这三者中 前二者为机械运动 数据传输主要是电子运动 显然机械运动的速度要远低于电子运动的速度 而在两个机械运动部分 寻道时间又较大 因此在上述三个因素中 寻道时间居于支配地位 为了提高磁盘的读写效率 需要优化寻道时间 实现的手段则是磁盘调度 磁盘调度的算法主要有以下几种 先来先服务 fcfs firstcomefirstserve 最短任务优先 stf shortesttaskfirst 最短寻道时间优先 sstf shortestseektimefirst 电梯调度 es elevatorscheduling 先来先服务算法fcfs是一种自然公平的调度策略 先来后到 谁也没有特权 即该算法不考虑寻道优化问题 按磁盘访问请求的先后次序启动磁盘驱动器 而不考虑它们要访问的物理位置 例如 有一个磁盘访问请求队列 请求的盘块号顺序为 98 183 37 122 14 124 65 67 如果磁头的当前位置位于53 那么fcfs算法将从53移到98 接着再到183 37 122 14 124 65 最后到67 总的寻道道数 磁头移动距离 为 48 85 146 85 108 110 59 2 640平均寻道长度 640 8 80 0143753656798122124183199 图9 4fcfs算法示例 45 85 146 85 108 110 59 2 最短任务优先算法最短任务优先就是谁的磁盘读写数据量最少 谁就优先 由于磁盘的访问时间主要取决于寻道时间和旋转延迟时间 读写的数据量对整个磁盘读写的影响并不大 因此 此种策略意义不大 最短寻道时间优先算法sstf算法以寻道优化为出发点 它优先选择所访问的磁道距离磁头位置最近的那个请求 避免了磁头臂作大幅度的来回摆动 从而改善了对磁盘访问请求的总的平均均响应时间 但其缺点是对磁盘访问请求的服务机会不是均等的 一般来说 对中间磁道的请求能及时响应 而对内外两侧磁道的请求随偏离中间磁道的距离越远而响应越慢 因而可能使一些请求在较长的时间内得不到响应 以上例的请求队列为例 采用sstf算法 总的寻道道数 236 平均寻道长度 236 8 29 5 显然 比fcfs要高效得多 0143753656798122124183199 图9 5sstf算法示例 电梯算法这也是寻求寻道优化的算法 其目的是为了克服sstf算法的缺点 sstf只考虑访问磁道与磁头当前位置的距离 而不考虑磁头臂的移动方向 es算法则既考虑距离 也考虑方向 且以方向为先 因其类似于罐式电梯的运行模式 故被形象地称为 电梯算法 es首先考虑与磁头臂当前移动方向一致的访问请求 然后优先选择访问磁道与磁头当前位置距离最近者 也就是说 如果磁头臂目前向内移动 那么下一个服务对象应该是在磁头当前位置以内的磁道上的各访问请求中之最近者 这样依次地进行服务 直到没有更内侧的访问请求 磁头臂才改变移动方向转而向外侧移动 并依次服务于此 方向上的请求 如此由内向外 由外向内 反复扫描并依次服务 从而基本克服了sstf算法的服务集中于中间磁道而怠慢两侧磁道的情况 进一步改善了平均响应时间 注意 0号磁道是最外磁道 仍以上例的请求队列为例 采用es算法 这里假定磁头的当前方向是外向的 则有 总的寻道道数 208平均寻道长度 208 8 26 0143753656798122124183199 图9 6es算法示例 5 5错误的处理与报告 在i o操作中 错误是难免的 进行错误处理是件十分重要的事情 如何进行错误处理取决于错误的类型 一般来说 i o过程中的错误可以分为程序性错误和真正的i o错误 程序性错误就是用户要求设备做一件该设备无法做到的事情 例如从输出设备上读数据 真正的i o错误当然是指数据传输过程中发生的错误 例如数据读错了 或者磁盘的盘片损坏了等 对于程序性错误来说 i o软件除了将错误报告给用户外 似乎不能做任何别的事情了 但如果是i o错误 那i o软件则需要进行适当的纠错操作 看能否消除错误 如果不能消除错误 可以询问调用者如何处理 或者干脆返回一个错误代码给用户 5 6假脱机 虚拟性是操作系统的基本特性之一 如果说 可以通过多道程序技术将一台物理cpu虚拟为多台逻辑cpu 从而允许多个用户共享一台物理cpu 那么 通过虚拟设备技术便可以将一台物理的独占设备虚拟为多台逻辑的独占设备 同样允许多个用户共享一台物理的独占设备 对于动态分配的独占设备存在着这样一个问题 当一个进程正在使用某台这类设备进行一次数据量较大的传输时 此

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论