一、设备管理概述
1.设备类型和特性
按交互对象分类:
人机交互设备:视频显示设备、键盘、鼠标、打印机
与CPU等交互的设备:磁盘、磁带、传感器、控制器
计算机间的通信设备:网卡、调制解调器
按交互方向分类:
输入设备:键盘、扫描仪
输出设备:显示设备、打印机
双向设备:磁盘、网卡
按外设特性分类:
使用特征: 存储、输入/输出、终端
数据传输率:低速(键盘)、中速(打印机)、高速(网卡、磁盘)
信息组织特征:字符设备(打印机)、块设备(磁盘)、网络设备
2.设备管理主要功能:
设备分配:设备分配程序按照一定的策略,为申请设备的用户进程分配设备,记录设备的使用情况
这是设备管理的基本任务
多道程序系统中的设备不允许用户直接使用,而是由操作系统统一调度和控制的。
设备映射:事实中,在应用软件运行期间,操作系统的设备管理程序必须将该应用软件对逻辑设备的引用转换成对相关物理设备的引用。
设备无关性:应用软件中所引用的、用于现实IO操作的设备与物理IO系统总实际安装的设备没有固定的联系。这是为了提高应用软件对运行平台的适应能力,方便实现软件IO重定向。
逻辑设备:应用软件所引用的用于实现IO操作的设备(抽象)
物理设备:物理IO系统中实际安装的设备(实例)
设备驱动:对物理设备进行控制,以实现真正的IO操作
主要任务:接受上层软件发来的抽象服务请求,如读/写命令,再把它转换成具体要求,通过一系列的IO指令,控制完成请求的操作;同时,设备驱动程序还讲设备发来的信号传送给上层软件,如设备是否已损坏等。
IO缓冲区管理:
为了缓和处理机和外部设备间速度不匹配的矛盾,提高处理机和外部设备的并行性
通常,缓冲区是指内存中若干区域,用于缓存进程和外部设备间的数据传输
IO缓冲区的管理任务:组织IO缓冲区,并为使用者提供获得和释放IO缓冲区的手段
3. 设备管理系统的设计目标
提高设备利用率:合理分配和使用外部设备
提高设备通CPU并行程度(中断/通道/DMA等技术和缓冲技术)
设备的统一管理:隐蔽设备的差别,向用户提供统一的设备时候用接口
(read/write,UNIX把设备当做特殊文件,用文件的方法处理设备)
设备独立性:具体物理设备对用户透明,用户使用统一规范方式使用设备(物理名,ID或字符串)
用户编程时使用逻辑名,由系统实现逻辑设备到物理设备的转换(逻辑名是友好名,应用程序可见的名称)
字符代码的独立性:各种外部设备使用的字符代码可能不同,设备管理系统必须能处理不同的字符代码。
二、缓冲技术
1. 缓冲作用:
连接两种不同数据传输速度的设备的媒介(平滑传输过程,经典如CPU与IO设备速度不匹配)
提升数据的存取效率(CPU数据成批传送给IO设备,IO设备数据成批传送给CPU,解决逻辑记录和物理记录大小不匹配的问题)
2.缓冲的组成:
硬件缓冲器:容量较小,一般放在接口中,不需要处理机的直接管理,不会影响系统性能
软件缓冲区:容量较大,一般放在内存中。
3.提前读:
用户进程从IO缓冲区中取走一个数据以后,立即发出对下一个数据的输入请求;
操作系统在适当的时候响应该请求,以便把用户进程需要的下一个数据从用户进程指定输入设备读入IO缓冲区;
显然,用户进程加工前一个数据的工作和操作系统输入下一个数据的工作可以同时进行
4.延后写:
当用户进程输入数据时,操作系统很快将用户进程请求输出的数据从用户进程的工作区取走并将其暂时存在IO缓冲区中;
直到用户进程指定的输出设备空闲时,操作系统才把暂时存放在IO缓冲区的用户进程的输出数据写到用户进程指定的输出设备上;
显然,用户进程生成下一个输出数据的工作可以和操作系统真正输出前一个输出数据的工作同时进行
5.常用的缓冲技术:
环形缓冲:若干缓冲单元首位链接形成一个环
两个线程:输出线程(读),输入线程(写)
三个指针: 输入指针(in),输出指针(out),开始指针(start)【初始时,in=out=start】
输入时,判断(in==out?)
若相等,系统没有空的缓冲区,需要等待;
若不等,将信息送入in指定的缓冲区,然后用缓冲区的next来更新in(即in移到下一个缓冲区上)
输出时,判断(in==out?)
若相等,系统中没有数据可取,需要等待;
若不等,取出缓冲区中的信息,然后用缓冲区的next更新out
双缓冲 :
为输入或输出分配两个缓冲区。读入时,输入设备首先填充buf1,进程从buf1提取数据时,输入设备填充buf2,当buf1空,buf2满时,进程又可以从buf2提取数据,同时,输入设备又可填充buf1。
*缓冲池
三、设备分配和SPOOL
1.设备分配方法:独占设备的分配、共享设备的分配、虚拟分配
独占型设备包括所有字符型设备,任意时间段内最多只能被一个进程占用;
使用时,进程首先向系统申请,可能进入阻塞状态。当设备可用时,唤醒一个等待进程。使用完毕时,进程必须释放设备。
进程使用独占设备的分配:申请、使用、释放
进程申请设备----系统分配设备----进程发送使用命令----系统将转到设备驱动模块完成一次IO传输-----进程释放设备----系统回收设备
当进程的一此设备申请成功,直到发出释放命令期间一直独占设备
共享型设备包括所有块型设备
IO传输单位:块
宏观上,一个共享型设备可以被多个进程同时使用;微观上,多个进程交替使用一个设备
进程使用这类设备时,无需申请或释放设备,也不存在某个进程占用设备的问题
进程使用共享型设备不需要申请,当然也不存在占用和释放的问题;
但是IO期间只能有一个进程使用设备。因此,进程使用共享型设备之前,有一个隐含的申请命令;使用完以后有一个隐含的释放命令,以实现基本IO传输期间的排他性,保证操作的正常进行;
使用共享型设备的过程中,进程完全有可能进入阻塞等待状态。
虚拟分配
虚拟技术:在一类物理设备上模拟另一类物理设备的技术(通常借助辅存将独占型设备转化成共享型设备)
虚拟设备:用来代替独占设备部分辅存(包括控制接口)称为虚拟设备
虚拟分配:当进程需要与独占设备交换信息时,就采用虚拟技术将与该独占设备所对应的的虚拟设备分配给它。
2. ,SPOOLing系统是虚拟技术和虚拟分配的实现
(外部设备同时联机操作,假脱机输入输出操作)
输入井和输出井:磁盘上开辟的两个存储区域
输入井模拟脱机输入时的磁盘;
输出井模拟脱机输出时的磁盘。
输入缓冲区和输出缓冲区:内存中开辟的存储区域
输入缓冲区:暂存输入数据,以后再传送到输入井;
输出缓冲区:暂存输出数据,以后再传送到输出设备;
输入监控进程和输出监控进程:
输入监控进程模拟脱机输入的卫星机,将用户需要的数据从输入设备通过缓冲区在传入输入井。当用户进程需要数据时,直接从输入井读入所需数据;
输出监控进程模拟脱机输出的卫星机,用户进程将输出数据从内存先传到输出井。当输出设备空闲时,再将输出井的数据传输到输出设备。
优点:提高了IO速度;将独占设备改成“共享”设备(实现了虚拟设备功能)
四、 IO控制
1.查询方式(异步传送)
基本原理:传送数据之前,CPU先对外设状态进行检测,直到外设准备好才开始输入;
输入时,外设数据“准备好”;输出时,外设“准备好”接收。
特点:IO操作由程序发起并等待完成(指令:IN/OUT);每次读写必须通过CPU;
2.无条件传送(同步传送):
工作过程:进行IO操作时无需查询外设状态,直接进行
只要用于外设时钟固定而且已知的场合;
当程序执行IO指令(IN/OUT/MOV)时,外设必定已经为传送数据做好了准备
3.中断方式:
工作原理:外设数据准备好或者准备接受时,产生中断信号;
CPU收到中断信号后,停止当前工作,处理该中断事情(完成数据传送)
CPU处理完之后继续原来的工作。
特点及缺点:CPU与外设并行工作;CPU效率提高;设备较多时,中断频繁,影响CPU有效计算能力;
CPU数据吞吐较小时(几个字节),适于低速设备
4.通道方式:
通道是用来控制外设和内存数据传输的专门部件;有独立的指令系统,既能受控于CPU,又能独立于CPU;IO处理机 。
特点:有很强的IO能力,提高CPU与外设的并行程度;以内存为中心,实现内存与外设直接数据交互;传输过程基本无需CPU参与。
5. DMA(直接内存访问)方式:
外设与内存之间直接进程数据交换,不需CPU干预;
只有数据传送开始(初始化)和结束时(反初始化)需要CPU参与。传输过程不需。
DMA控制器:DMAC
局限:不能完全脱离CPU(传送方向、内存地址、数据长度由CPU控制)
每台设备 需要一个DMAC(设备数大时不经济)
五、设备驱动
1.驱动程序概念:应用程序通过驱动程序来使用硬件设备或者底层软件资源
驱动程序工作在核心层
不同操作系统提供不同机制来实现驱动程序
基本硬件基础:接口(端口)、中断机制、DMA机制、虚拟驱动
2,Linux设备驱动(LDD)
功能完整的Linux设备驱动结构:
设备的打开、释放、读操作、写操作、控制操作、中断和轮询处理;
驱动程序的注册和注销
主设备号和次设备号:
主设备号标识该设备种类、标识驱动程序,范围为1-255,Linux支持动态分配主设备号;
次设备号标识同一设备驱动程序的不同硬件设备,只在驱动设备内部使用