
第5章设备管理2.ppt
101页第五章第五章 设备管理设备管理MANAGING I/O DEVICES5.1 I/O系统的组成系统的组成 5.1.1 I/O 设备分类设备分类•按传输速率按传输速率: 低速低速(
• 从物理上看从物理上看, 控制器是一块接口卡或主板上控制器是一块接口卡或主板上的一个功能模块的一个功能模块 1. 设备控制器的组成设备控制器的组成数据线数据线控制器与设备接口控制器与设备接口CPU与控制器接口与控制器接口控制器控制器与设备与设备接口接口1地址线地址线控制线控制线I/OI/O控控制逻辑制逻辑控制器控制器与设备与设备接口接口i数据数据控制控制控制控制/状态状态R数据寄存器数据寄存器状态状态数据数据控制控制状态状态......2. 设备控制器的功能设备控制器的功能• 地址识别地址识别: 识别识别I/O端口地址端口地址, 使使I/O操作与设备对应操作与设备对应• 接收和识别命令指挥设备执行接收和识别命令指挥设备执行 接收接收CPU通过通过I/O总线发来的命令和参数总线发来的命令和参数, 存储存储在在控制器中相应的控制寄存器中控制器中相应的控制寄存器中, 并对它进行译码识别并对它进行译码识别, 转换转换成适当的电信号成适当的电信号, 通过控制器与设备的接口向设通过控制器与设备的接口向设备发送备发送, 指挥设备执行指挥设备执行特定的操作特定的操作• 接收和记录设备的状态接收和记录设备的状态 接收接收从设备发来的电信号从设备发来的电信号, 进行进行转换转换和解释和解释, 变为变为设备的状态信息设备的状态信息, 将此结果将此结果记录记录在控制器的状态寄存在控制器的状态寄存器上器上, 供供CPU了解。
了解• 数据交换、数据缓冲、差错控制数据交换、数据缓冲、差错控制 实现实现CPU↔控制器控制器↔设备设备的的数据交换数据交换, 从而实现从而实现了了CPU到设备的数据传递和设备到到设备的数据传递和设备到CPU的数据传递的数据传递举例举例: 典型的设备控制器是磁盘控制器典型的设备控制器是磁盘控制器, 它从它从I/O总线上总线上接收发来的诸如接收发来的诸如“写这个数据块写这个数据块”之类的高级命令之类的高级命令, 并对它进行译码识别并对它进行译码识别, 转换成诸如转换成诸如“把磁头定位在正把磁头定位在正确的磁道上确的磁道上”和和“把数据写入这个磁道把数据写入这个磁道”之类的低级之类的低级磁盘操作的电信号磁盘操作的电信号, 指挥磁盘驱动器执行这些操作指挥磁盘驱动器执行这些操作, 每执行一步都要将磁盘驱动器的发来的电信号进行转每执行一步都要将磁盘驱动器的发来的电信号进行转换和解释换和解释, 变为设备的数据状态信息变为设备的数据状态信息, 将此结果记录将此结果记录在控制器的状态寄存器上在控制器的状态寄存器上, 供供CPU了解CPU根据此根据此状态信息确定下一步如何操作。
状态信息确定下一步如何操作设备文件设备文件•设备文件是用来表示操作系统(设备文件是用来表示操作系统(Unix类)类)所支持的大部分所支持的大部分I/O设备•设备文件的主要属性:设备文件的主要属性: 文件名、类型、主设备号、次设备号文件名、类型、主设备号、次设备号•举例举例设备文件举例设备文件举例设备名设备名类型类型 主号主号次号次号 说明说明/dev/fd0块设备块设备20软盘软盘/dev/hda块设备块设备30第一个第一个IDE磁盘磁盘/dev/hda2块设备块设备32第一个第一个IDE磁盘上磁盘上的第二个主分区的第二个主分区/dev/hdb块设备块设备364第二个第二个IDE磁盘磁盘/dev/ttyp0字符设备字符设备30终端终端/dev/console字符设备字符设备51控制台控制台/dev/lp1字符设备字符设备61并口打印机并口打印机/dev/ttyS0字符设备字符设备464第一个串口第一个串口/dev/rtc字符设备字符设备10135实时时钟实时时钟/dev/null字符设备字符设备13空设备(黑洞)空设备(黑洞)5.1.3 I/O通道通道 1.通道设备的引入通道设备的引入• 为了建立独立的为了建立独立的I/O操作操作 I/O传送独立、传送独立、I/O组织管理独立组织管理独立• 把把CPU从繁杂的从繁杂的I/O任务中解脱出来任务中解脱出来 CPU只需向通道发出一条只需向通道发出一条I/O指令。
指令• 减轻单总线的负担减轻单总线的负担, 增加增加I/O通道通道I/O通道的特点通道的特点• I/O通道是一种特殊的处理机通道是一种特殊的处理机• 具有执行具有执行I/O指令的能力指令的能力• 通过执行通道程序来控制通过执行通道程序来控制I/O操作操作• 指令类型单一指令类型单一, 没有自己的内存没有自己的内存2. 通道类型通道类型• 字节多路通道字节多路通道(p149图图5-3) 含有许多非分配型子通道含有许多非分配型子通道(几十到几百几十到几百), 每个每个子通道连结一台低速或中速字节设备子通道连结一台低速或中速字节设备, 子通道按子通道按时间片轮转方式共享主通道时间片轮转方式共享主通道, 只要扫描一轮的速只要扫描一轮的速率足够块率足够块, 便不会丢失信息便不会丢失信息• 数组选择通道数组选择通道 可连结多台高速块设备可连结多台高速块设备, 但由于只含有一个分但由于只含有一个分配型子通道配型子通道, 当某台设备占用了该通道当某台设备占用了该通道, 便由它便由它独占独占, 直到用完释放为止直到用完释放为止, 显然它的利用率低显然它的利用率低• 数组多路通道数组多路通道 将以上两种结合将以上两种结合, 它含有多个非分配型子通道它含有多个非分配型子通道, 极有很高的传输速率极有很高的传输速率, 又有满意的通道利用率。
又有满意的通道利用率3. 解决瓶颈问题解决瓶颈问题通道往往成为通道往往成为I/O的瓶颈如图的瓶颈如图:(p149图图5-4)存储器存储器通道通道1 1通道通道2 2控制器控制器1 1控制器控制器2 2控制器控制器3 3控制器控制器4 4设备设备1 1设备设备2 2设备设备3 3设备设备4 4设备设备5 5设备设备6 6设备设备7 7存储器存储器通道通道1 1通道通道2 2控制器控制器1 1控制器控制器2 2设备设备1 1设备设备2 2设备设备3 3设备设备4 4改单通路为多通路解决瓶颈问题改单通路为多通路解决瓶颈问题(p150图图5-5)5.1.4 总线型总线型I/O系统系统 1. 微机微机I/O系统系统控制器与控制器与设备接口设备接口磁盘控制器磁盘控制器打印机控制器打印机控制器磁盘磁盘驱动器驱动器打印机打印机内存内存CPUPC的的I/O体系结构体系结构CPUI/O 总线总线 I/O 端口端口 I/O 控制器控制器 I/O 端口端口I/O设备设备控制器与控制器与设备接口设备接口I/O端口端口(I/Oport)• 每个连接到每个连接到I/O总线上的设备控制器都有自己的总线上的设备控制器都有自己的I/O地址集地址集, 即一组即一组I/O端口端口, 所以每个设备对应一组端口所以每个设备对应一组端口; 在在IBM PC体系结构中体系结构中, I/O地址空间共提供了地址空间共提供了65,536 个个8位位I/O端口。
端口 ( I/O总线总线)• 有四条专用汇编指令允许有四条专用汇编指令允许CPU对对I/O端口进行读写端口进行读写即:即:in、、ins、、out和和outs• 在执行指令时在执行指令时, CPU用地址总线选择所请求的用地址总线选择所请求的I/O端端口口, 用数据总线在用数据总线在CPU和设备控制器之间传送数据和设备控制器之间传送数据系统总线(系统总线(BUS))•数据总线数据总线(data bus)并行传送数据的一组线并行传送数据的一组线 64位位•地址总线地址总线(address bus)并行传送地址的一组线并行传送地址的一组线 32位位•控制总线控制总线(control bus)传送控制信息中的一组并行线传送控制信息中的一组并行线I/O总线(总线(BUS))•当总线连接的是当总线连接的是CPU和和I/O设备时设备时, 就称它为就称它为I/O总线总线Intel 80x86微处理器只使用了微处理器只使用了32位地址总线中的位地址总线中的16 位对位对I/O设备进行寻址设备进行寻址, 使用使用64位数据总线中的位数据总线中的8位、位、 16位或位或32位传送数据位传送数据•每个每个I/O设备都通过设备控制器连接到设备都通过设备控制器连接到I/O总线上。
总线上 CPU通过通过I/O总线的各总线的各I/O端口与不同的控制器交换端口与不同的控制器交换信息信息, 从而访问对应的设备从而访问对应的设备5.1.4 总线技术总线技术1.总线的基本概念:总线的基本概念: 在计算机系统内各种子系统在计算机系统内各种子系统 如如CPUCPU、、内存、内存、I/OI/O设备等之间设备等之间 构建公用的信号或数据传输通道构建公用的信号或数据传输通道 这种可共享连接的传输通道称为总线这种可共享连接的传输通道称为总线总线的分类总线的分类CPU-内存总线内存总线I/O总线总线数据总线数据总线地址总线地址总线控制总线控制总线(非本课程范围)(非本课程范围)2. 总线的分类总线的分类微型计算机微型计算机总线的种类和发展总线的种类和发展PC//XT总线总线ISA总线总线EISA总线总线VESA总线总线 PCI总线总线USB总线总线…...1394总线总线SCSI总线总线3. USB技术技术• USB ( Universal Serial Bus ) 通用串行总线通用串行总线, 是一种连是一种连接接I/O串行设备的技术标准串行设备的技术标准• 冲破了计算机技术发展的两个历史局限性:冲破了计算机技术发展的两个历史局限性: ((1)由于)由于I/O设备的接口标准的不一致和有限的接设备的接口标准的不一致和有限的接口数量已无法满足各种应用迫切需要口数量已无法满足各种应用迫切需要 ((2)传统的)传统的I/O设备的接口无法满足实时数据传输设备的接口无法满足实时数据传输与多媒体应用的需求与多媒体应用的需求• USB 以以WDM ( Windows Driver Model ) 模型为基础,模型为基础,WDM 含通用的含通用的I/O服务和二进制兼容的设备驱动程序服务和二进制兼容的设备驱动程序• USB支持同步数据传输方式和异步数据传输方式支持同步数据传输方式和异步数据传输方式, 其其数据传输率有低速数据传输率有低速1.5Mbps 和全速和全速12Mbps 两种两种, 比标比标准串口快准串口快100倍,比标准并口快倍,比标准并口快10倍倍• USB 可以主动为外部设备提供电源可以主动为外部设备提供电源, 允许外部设备快允许外部设备快速连接速连接, 具有即插即用的功能具有即插即用的功能• USB 允许外部设备的热插拔允许外部设备的热插拔4. SCSI接口技术接口技术小型计算机系统接口小型计算机系统接口((Small Computer System Interface))一个一个SCSI I/O设备控制器设备控制器 可将高速可将高速I/O设备增加到计算机系统中设备增加到计算机系统中SCSI 设备控制器的智能化设备控制器的智能化I/O控制控制 降低了计算机系统的负担降低了计算机系统的负担 使计算机系统具有更高的使计算机系统具有更高的I/O能力能力5. 即插即用技术即插即用技术(Plug and Play)) 插入就可用,插入就可用,不需要不需要进行任何进行任何设置设置操作操作PnP技术的产生技术的产生 由于一个系统可以配置多种外部设备由于一个系统可以配置多种外部设备, 设备也经设备也经常变动和更换常变动和更换, 它们都要占有一定的系统资源,彼此它们都要占有一定的系统资源,彼此间在硬件和软件上可能会产生冲突。
间在硬件和软件上可能会产生冲突 因此在系统中要因此在系统中要正确地对它们进行配置和资源匹配正确地对它们进行配置和资源匹配; 当设备撤除、添当设备撤除、添置和进行系统升级时置和进行系统升级时, 配置过程往往是一个困难的过配置过程往往是一个困难的过程PnP技术的特点:技术的特点: ((1)支持)支持I/O设备及部件的自动配置,使用户能够简设备及部件的自动配置,使用户能够简单方便地使用系统扩充设备单方便地使用系统扩充设备 ((2)减少由制造商装入的种种用户支持和限制,简化)减少由制造商装入的种种用户支持和限制,简化部件的硬件跳接设置,使部件的硬件跳接设置,使I/O附加卡和部件不再具有人附加卡和部件不再具有人工跳接线设置电路工跳接线设置电路 ((3)在主机板和附加卡上保存系统资源的配置参数和)在主机板和附加卡上保存系统资源的配置参数和分配状态,有利于系统对整个分配状态,有利于系统对整个I/O资源的分配和控制资源的分配和控制 ((4)支持和兼容各种操作系统平台,具有很强的扩展)支持和兼容各种操作系统平台,具有很强的扩展性和可移植性性和可移植性 ((5)在一定程度上具有)在一定程度上具有"热插入热插入"、、"热拼接热拼接"技术技术5.2 I/O 控制方式控制方式• 程序程序I/O方式方式• 中断驱动中断驱动I/O控制方式控制方式• DMA控制方式控制方式• I/O通道控制方式通道控制方式5.2.1 程序程序I/O方式方式CPUI/OI/O CPUCPU忙等忙等循环检测循环检测I/O CPUCPU 内存内存向向I/O控制器发读命令控制器发读命令启动输入机启动输入机, 置置busy=1读读I/O控制器状态控制器状态busy检查状态检查状态就绪就绪 busy=0未就绪未就绪busy=1出错出错从从I/O控制器中读入字控制器中读入字向存储器中写字向存储器中写字P152 图图5-7(a)完成?完成?NY下条指令下条指令从从输入机读输入机读字到字到控制器控制器数据寄存器数据寄存器5.2.2 中断驱动中断驱动I/O 控制方式控制方式 当某进程要启动某个当某进程要启动某个I/O设备工作时设备工作时, 便由便由CPU向向相应的相应的设备控制器设备控制器发出一条发出一条I/O指令指令, 然后立即返回继然后立即返回继续继续执行原来的任务续继续执行原来的任务。
设备控制器设备控制器便按该指令的要便按该指令的要求去控制指定的求去控制指定的I/O设备此时设备此时, CPU可以去做其它事可以去做其它事情与情与I/O设备并行工作设备并行工作 例如例如, 在输入时在输入时, 当当设备控制器设备控制器收到收到CPU 发来发来的读命令后的读命令后, 便去控制相应的输入设备读数据数据便去控制相应的输入设备读数据数据进入数据寄存器后进入数据寄存器后, 设备控制器设备控制器通过通过中断控制器中断控制器和和控控制总线向制总线向CPU发出中断信号发出中断信号, CPU响应中断响应中断, 读读设备设备控制器状态检查是否出错控制器状态检查是否出错, 若无错若无错, 则通过数据总线则通过数据总线从从设备设备控制器中读出控制器中读出数据数据, 写入存储器写入存储器P152 图图5-7(b)CPUI/OI/O CPUI/O CPUCPU 内存内存向向I/O控制器发读命令启动输入机控制器发读命令启动输入机读读I/O控制器状态控制器状态检查状态检查状态就绪就绪出错出错从从I/O控制器中读字控制器中读字向存储器中写字向存储器中写字P152 图图5-7(b)完成?完成?NY下条指令下条指令从从输入机读输入机读字到字到控制器控制器数据寄存器数据寄存器CPU作其它事作其它事响应中断响应中断中断请求中断请求中断控制器执行的操作中断控制器执行的操作1. 监视监视IRQ线线, 检查出现的中断信号。
检查出现的中断信号2. 如果在如果在IRQ线上出现了一个中断信号:线上出现了一个中断信号: a. 把接受到的信号转换成一个对应的中断向量把接受到的信号转换成一个对应的中断向量 b. 将中断向量存入中断控制器的一个将中断向量存入中断控制器的一个I/O端口端口, 允许允许CPU读中断向量读中断向量 c. 控制器向处理器的控制器向处理器的INTR引脚发出一个中断引脚发出一个中断 d. 等待等待, 收到收到CPU发出中断应答信号发出中断应答信号, 将中断向量放到数据线上,清将中断向量放到数据线上,清INTR线 3. 返回到第一步返回到第一步 CPU 根据中断向量去执行根据中断向量去执行中断服务子程序中断服务子程序中断硬件机构采用级连的中断硬件机构采用级连的8259A实现实现Linux的中断机制的中断机制• 中断控制器包含的寄存器:中断控制器包含的寄存器: 一个状态寄存器一个状态寄存器(I/O地址地址0x20、、0xa0): 实时记录设备的中断请求情况初始时全为实时记录设备的中断请求情况初始时全为0 一个屏蔽寄存器一个屏蔽寄存器(I/O地址地址0x21、、0xa1): 每位对应一个设备,每位对应一个设备,0-允许,允许, 1-屏蔽屏蔽• 通过读取状态寄存器的值了解设备的中断情况通过读取状态寄存器的值了解设备的中断情况• 设备驱动程序建立联系设备驱动程序建立联系 Linux 为了将来自硬件设备的中断传递到相应的为了将来自硬件设备的中断传递到相应的设备驱动程序设备驱动程序, 在驱动程序初始化的时在驱动程序初始化的时, 就将其对应就将其对应的中断程序进行了登记。
的中断程序进行了登记 通过调用函数通过调用函数 request_irq( )将其中断信息添加到将其中断信息添加到结构为结构为 irqaction 的数组中的数组中, 从而使中断号和中断服从而使中断号和中断服务子程序联系起来务子程序联系起来request_irq ( )函数原形函数原形int request_irq( unsigned int irq, /* 中断请求号中断请求号 */ void (*handler)(int, void *, struct pt_regs *), /* 指向中断服务子程序指向中断服务子程序 */ unsigned long irqflags, /* 中断类型中断类型 */ const char * devname, /* 设备的名字设备的名字 */ void *dev_id /*设备标识符设备标识符*/ );;中断描述符表中断描述符表(IDT)• 中断服务程序中断服务程序(及异常处理程序及异常处理程序)的入口地址依照中断的入口地址依照中断 源位置组成源位置组成IDT表表, 入口地址就是中断门入口地址就是中断门(中断向量中断向量)。
• Linux IDT表共有表共有 256个中断向量个中断向量, 即即0至至255, 其中其中0到到 31由由Intel公司留给异常事件处理程序公司留给异常事件处理程序• CPU根据根据IDT表和中断源表和中断源,可转入相应的中断服务程序可转入相应的中断服务程序中断处理程序执行的四个基本操作中断处理程序执行的四个基本操作• 在内核栈中保存在内核栈中保存IRQ的值和寄存器的内容的值和寄存器的内容• 为正在给为正在给 IRQ 线服务的线服务的 PIC 发送一个应答发送一个应答, 这将允许这将允许 PIC 进一步发出中断进一步发出中断• 执行共享这个执行共享这个IRQ的所有设备的中断服务例程的所有设备的中断服务例程(ISR)• 跳到跳到ret_from_intr( )的地址后中断结束的地址后中断结束把把IRQIRQ分配给分配给I/OI/O设备的一个例子设备的一个例子IRQIRQ 中断向量中断向量 硬件设备硬件设备 0 03232时钟时钟 1 13333键盘键盘 2 23434PICPIC级连级连 3 33535第二个串口第二个串口 4 43636第一个串口第一个串口 6 63838软盘软盘 8 84040系统时钟系统时钟 11 114343网络接口网络接口 12 124444PS/2 PS/2 鼠标鼠标 13 134545数学协处理器数学协处理器 14 144646EIDE EIDE 磁盘控制器的一级链磁盘控制器的一级链 15 154747EIDE EIDE 磁盘控制器的二级链磁盘控制器的二级链5.2.3 DMA(direct memory access)控制方式控制方式DMA控制方式的引入控制方式的引入 中断方式是以字节中断方式是以字节(字字)为单位进行为单位进行I/O的的, 每完每完成一个字节成一个字节(字字) CPU要处理一次中断要处理一次中断, 这种方法用这种方法用于块设备效率极低于块设备效率极低, 为了进一步减少为了进一步减少CPU对对I/O的干的干预预, 提高提高CPU与与I/O设备的并行读引入设备的并行读引入DMA控制方式。
控制方式 DMA方式的特点为:方式的特点为:• 数据传送的基本单位是数据块数据传送的基本单位是数据块• 数据是直接在设备数据是直接在设备──内存之间传送的内存之间传送的• 仅在传送一个或多个数据块的开始和结束时才仅在传送一个或多个数据块的开始和结束时才需要需要CPU对对I/O的干预的干预, 传送工作本身是由传送工作本身是由DMA控制器完成的控制器完成的DMA控制器的组成控制器的组成1)主机与主机与DMA控制器的接口控制器的接口数据寄存器数据寄存器(DR) 内存地址寄存器内存地址寄存器(MAR)数据计数器数据计数器(DC) 命令命令/状态寄存器状态寄存器(CR) 2)DMA控制器与块设备的接口控制器与块设备的接口3)I/O控制逻辑控制逻辑DRMARDCCRI/OI/O控控制制逻逻辑辑 块块设设备备接接口口控控制制器器与与内存内存CPUcoutDMA方式从磁盘读入数据块的工作流程方式从磁盘读入数据块的工作流程:P154 图图5-9 CPU将读命令发送到控制器的寄存器将读命令发送到控制器的寄存器CR将目标地址和数据计数送到将目标地址和数据计数送到MAR和和DC中中将磁盘的源地址送至它的将磁盘的源地址送至它的I/O控制逻辑上控制逻辑上启动启动DMA传送命令传送命令 先从磁盘读入数据字先从磁盘读入数据字送到送到DR再挪用存储器再挪用存储器周期将数据送到内存周期将数据送到内存存储器地址增加存储器地址增加1字计数器字计数器DC减减1DC=0请求中断请求中断CPU做其他工作做其他工作CPU读读DMA的状态的状态CR继继续下条指令续下条指令响应响应中断中断NY DMA工作原理工作原理——窃取总线控制权窃取总线控制权• 存放输入数据的内存起始地址存放输入数据的内存起始地址、、要传送的字节数送入要传送的字节数送入 DMA控制器的内存地址寄存器和传送字节计数器控制器的内存地址寄存器和传送字节计数器; 中断允许位和启动位置成中断允许位和启动位置成1, 启动设备。
启动设备• 发出传输要求进程进入等待状态发出传输要求进程进入等待状态,其他进程占据其他进程占据CPU• DMA控制器不断窃取总线控制权控制器不断窃取总线控制权, 数据不断写入内存数据不断写入内存• 传送完毕传送完毕, 发出中断信号发出中断信号• CPU接到中断信号转入中断处理程序处理接到中断信号转入中断处理程序处理• 中断处理结束中断处理结束, CPU返回原进程或切换到新的进程返回原进程或切换到新的进程DMA方式与中断的主要区别方式与中断的主要区别• 中断方式的数据传送到存储器是由中断方式的数据传送到存储器是由CPU控制完成的控制完成的 而而DMA方式的数据传送到存储器则不经过方式的数据传送到存储器则不经过CPU , 由由DMA控制器直接完成控制器直接完成• 中断方式在设备控制器的数据缓冲寄存区满后中断方式在设备控制器的数据缓冲寄存区满后, 发中发中断请求断请求, CPU进行中断处理将缓冲区数据传送到内存进行中断处理将缓冲区数据传送到内存 而而DMA方式则是在所要求传送的数据块全部传送到方式则是在所要求传送的数据块全部传送到内存结束时内存结束时, 发中断请求发中断请求, CPU进行中断处理。
进行中断处理 大大减少了大大减少了CPU进行中断处理的次数和时间进行中断处理的次数和时间• DMA控制器按目标存储地址控制器按目标存储地址, 从第一字从第一字 (节节)开始开始, 反反复进行数据传送复进行数据传送(窃取总线控制权窃取总线控制权), 每传一字节每传一字节, 计数计数器值减器值减1;直到值为直到值为0时时, 发出中断请求发出中断请求, 通知通知CPU操作完操作完成• CPU提供提供命令命令被读块磁盘地址被读块磁盘地址目标存储地址目标存储地址待读取字节数待读取字节数DMA工作示例工作示例(以硬盘为例以硬盘为例)• CPU发出发出命令后去处理其它任务命令后去处理其它任务MARDCCR内存内存CPUcout磁盘磁盘接口接口 DR 内存地址内存地址计数器计数器命令命令/ /状态状态I/OI/O控控制制逻逻辑辑5.2.4 I/O通道控制方式通道控制方式1. 通道控制方式的引入通道控制方式的引入• DMA方式传送的是连续的数据块当需要一次读方式传送的是连续的数据块当需要一次读多个离散的数据块并将它们传送到不同的内存区域多个离散的数据块并将它们传送到不同的内存区域时怎么办?时。
怎么办?• 为了进一步减少为了进一步减少CPU对对I/O的干预引入通道控制方的干预引入通道控制方式式, 它是它是DMA方式的发展方式的发展• DMA方式由控制器的方式由控制器的I/O控制逻辑来执行读、写控制逻辑来执行读、写等等I/O操作操作, 只能传送一个连续的数据块而通道只能传送一个连续的数据块而通道方式则由通道内的通道程序来指挥控制器并由控制方式则由通道内的通道程序来指挥控制器并由控制器执行器执行I/O操作操作, 比较灵活比较灵活, 能传送多个连续数据块能传送多个连续数据块2. 通道程序通道程序 通过执行通道程序通过执行通道程序, 并与设备控制器共同完成对并与设备控制器共同完成对I/O设备的控制设备的控制, 通道程序的每条指令含如下信息通道程序的每条指令含如下信息: 操作码操作码, 内存地址内存地址, 计数计数, 结束位结束位P, 记录结束记录结束R 通道可实现通道可实现CPU、、通道和通道和I/O设备三者并行工作设备三者并行工作例:例: 操作操作 P R 计数计数 内存起始地址内存起始地址 Write 0 0 80 810 Write 0 0 140 1340 Write 0 1 60 5810 Write 0 1 300 2000 Write 0 0 250 1650 Write 1 1 250 2820课后题课后题P 181 2,4,6,8•以一个具体的实例全面描述中断处理过程以一个具体的实例全面描述中断处理过程(如时钟中断、键盘中断等等)。
如时钟中断、键盘中断等等)•以以ISA((或或PCI))总线的总线的DMA为例,说明为例,说明DMA的工作过程的工作过程 (以上说明可以结合具体的操作系统)(以上说明可以结合具体的操作系统)5.3 缓冲管理缓冲管理•为什么要使用缓冲?为什么要使用缓冲?•由哪几种缓冲方式?由哪几种缓冲方式?•缓冲区处在何处?缓冲区处在何处?•缓冲区由谁管理?怎样管理?缓冲区由谁管理?怎样管理?5.3.1 为什么引入缓冲为什么引入缓冲• 缓和缓和CPU与与 I/O设备速度不匹配的矛盾设备速度不匹配的矛盾• 减少对减少对CPU的中断频率,放宽对中断响的中断频率,放宽对中断响应时间的限制应时间的限制• 提高提高CPU和设备之间的并行性和设备之间的并行性5.3.2 I/O缓冲方式缓冲方式1.单缓冲单缓冲(Single Buffer) 块设备输入时块设备输入时, 输入到缓冲区的时间为输入到缓冲区的时间为T, OS将数据从缓冲区传到用户区的时间为将数据从缓冲区传到用户区的时间为M, CPU处理处理这块数据的时间为这块数据的时间为C; 显然显然T和和C是可以并行的是可以并行的T1M1C1T2M2C2T3M3C3T4工作区工作区缓冲区缓冲区输入输入(T)传送传送(M)I/O设备设备处理处理(C)用户进程用户进程 字符设备输入输出时字符设备输入输出时, 缓冲区用于暂存一行数据。
缓冲区用于暂存一行数据2.双缓冲双缓冲(Doubel Buffer) 为了加快为了加快I/O速度提高设备利用率速度提高设备利用率,又引入了双又引入了双缓冲机制缓冲机制(缓冲对换缓冲对换 Buffer Swapping); 如果如果C 以输入可将多个缓冲组成循环形式以输入为例为例, 空缓冲区为空缓冲区为R, 已装满数据的缓冲区为已装满数据的缓冲区为G, 正在使正在使用的工作缓冲区为用的工作缓冲区为C, 使用时要考虑进程的同步使用时要考虑进程的同步:RRGGGGNextiNextgRRCGGGNextiCurrentNextg 当计算进程要用缓冲区的数据时调用当计算进程要用缓冲区的数据时调用Getbuf(Nextg)过程过程, 将将Nextg指示的缓冲区提供给计算进程使用指示的缓冲区提供给计算进程使用, 并并令令Current 指针指向它的第一单元指针指向它的第一单元, Nextg 移向下一个移向下一个G 当输入进程要空缓冲区输入数据时调当输入进程要空缓冲区输入数据时调Getbuf(Nexti)过程过程,将将Nexti指示的缓冲区供给输入进程指示的缓冲区供给输入进程, Nexti下移 当计算进程把当前缓冲区当计算进程把当前缓冲区C中的数据提取完时中的数据提取完时, 调调用用Releasebuf()过程过程, 将该空缓冲区释放将该空缓冲区释放, 将其状态该将其状态该为为R 当输入进程把缓冲区装满时当输入进程把缓冲区装满时, 也应调用也应调用Releasebuf()过程过程, 将该空缓冲区释放将该空缓冲区释放, 将其状态该为将其状态该为G。 注意注意: 计算进程和输入进程的同步计算进程和输入进程的同步, Nexti 和和 Nextg 追赶5.3.3 缓冲池缓冲池(Buffer Pool)1.缓冲池的组成缓冲池的组成• 空缓冲链队列空缓冲链队列emp:由空缓冲区组成由空缓冲区组成• 输入缓冲链队列输入缓冲链队列inq:由装满输入数据的缓冲区组成由装满输入数据的缓冲区组成• 输出缓冲链队列输出缓冲链队列out:由装满输出数据的缓冲区组成由装满输出数据的缓冲区组成• 4种工作缓冲区种工作缓冲区 收容输入、提取输入、收容输出、提取输出收容输入、提取输入、收容输出、提取输出 从某队列上取下来操作完后再挂到另一队列上从某队列上取下来操作完后再挂到另一队列上2.对缓冲池队列操作的两个过程对缓冲池队列操作的两个过程 缓冲池中的队列是临界资源要考虑互斥与同步缓冲池中的队列是临界资源要考虑互斥与同步3.缓冲区工作方式缓冲区工作方式提取输出提取输出收容输入收容输入提取输入提取输入收容输出收容输出缓冲池缓冲池hinsinsouthout用用户户程程序序empinqout收容输入的工作方式收容输入的工作方式:当输入进程需要输入数据时当输入进程需要输入数据时(1)调用调用Getbuf(emp,hin)过程过程, 从从emp队列首摘下空缓队列首摘下空缓 冲区作为收容输入工作缓冲区冲区作为收容输入工作缓冲区hin(2) 把数据输入到工作缓冲区把数据输入到工作缓冲区hin(3) 调用调用Putbuf(inq,hin),将将hin挂到挂到inq队列尾队列尾提取输入工作方式:提取输入工作方式:当计算进程需要提取输入数据时当计算进程需要提取输入数据时(1) 调用调用Getbuf(inq, sin)过程过程,从从inq队列头摘下缓冲队列头摘下缓冲区区 作为提取输入工作缓冲区作为提取输入工作缓冲区sin(2) 计算进程从工作缓冲区计算进程从工作缓冲区sin中提取数据中提取数据(3) 调用调用Putbuf(emp,sin), 将将sin挂在挂在emp队列尾队列尾Procedure Getbuf(q,buf); 从从q队列头摘下缓冲区队列头摘下缓冲区buf begin Wait(RS(q)); 信号量信号量RS(q)是队列是队列q的长度的长度 Wait(MS(q)); MS(q)是对是对q操作的互斥信号量操作的互斥信号量 buf:=Takbuf(q); Signal(MS(q)); endProcedure Putbuf(q,buf); buf加到加到q队列的队尾队列的队尾 begin Wait(MS(q)); Addbuf(q,buf); Signal(MS(q)) Signal(RS(q)); end5.4 设备分配设备分配多道程序环境下多道程序环境下 用户进程提出用户进程提出I/O请求,设备分配程序按一定策请求,设备分配程序按一定策略把用户所需的设备分配给用户进程略把用户所需的设备分配给用户进程。 OS是怎样对设备进行分配的?是怎样对设备进行分配的?采用了哪些数据结构?采用了哪些数据结构?5.4.1 设备分配中的数据结构设备分配中的数据结构具有通道的具有通道的I/O系统结构系统结构存储器存储器通道通道1 1通道通道2 2控制器控制器1 1控制器控制器2 2设备设备1 1设备设备2 2设备设备3 3设备设备4 41. 系统设备表(系统设备表(SDT))表目表目1...表目表目i...设备类型设备类型设备标识符设备标识符设备状态设备状态:忙忙/闲闲等待控制器通道标志等待控制器通道标志指向控制器表的指针指向控制器表的指针重复执行次数或时间重复执行次数或时间驱动程序入口驱动程序入口设设备备控控制制表表DCT 系统设一张系统设备表系统设一张系统设备表,纪录系统中全部设备的纪录系统中全部设备的情况情况, 每个每个设备设备占一个表目占一个表目2.控制器控制表、通道控制表控制器控制表、通道控制表COCTCHCT每个控制器设一张每个控制器设一张COCT, 每个通道设一张每个通道设一张CHCT控制器标识符控制器标识符控制器状态控制器状态:忙忙/闲闲指向相连通道表的指针指向相连通道表的指针控制器队列的首指针控制器队列的首指针控制器队列的尾指针控制器队列的尾指针通道标识符通道标识符通道状态通道状态:忙忙/闲闲相连控制器表的指针相连控制器表的指针通道队列的首指针通道队列的首指针通道队列的尾指针通道队列的尾指针5.4.2设备分配时涉及的问题设备分配时涉及的问题1.设备的固有属性设备的固有属性 独占、共享、虚拟独占、共享、虚拟2.设备分配算法设备分配算法 先来先服务、优先级高者优先先来先服务、优先级高者优先3. 设备分配的安全性设备分配的安全性安全分配方式安全分配方式: 进程发出进程发出I/O请求便被阻塞直到请求便被阻塞直到I/O完成完成不安全分配方式不安全分配方式: 进程发出进程发出I/O请求后继续执行请求后继续执行, 需要时需要时 又发出第二个第三个又发出第二个第三个I/O请求请求, 满足请求保持条满足请求保持条 件可能引起死锁。 进程推进速度块件可能引起死锁进程推进速度块4.设备的独立性设备的独立性5.4.3设备独立性设备独立性1.设备独立性设备独立性(Device Independence) 为了提高为了提高OS的可适应性和可扩展性的可适应性和可扩展性, 现代现代OS都都实现了设备独立性实现了设备独立性(设备无关性设备无关性), 引入了逻辑设备引入了逻辑设备和物理设备两个概念和物理设备两个概念,使应用程序用逻辑设备名来使应用程序用逻辑设备名来请求某类设备请求某类设备, 独立于具体的物理设备独立于具体的物理设备OS将逻辑将逻辑设备名转换为具体的物理设备带来的好处是设备名转换为具体的物理设备带来的好处是: (1) 设备分配的灵活性设备分配的灵活性 (2) 易于实现易于实现I/O的重定向的重定向2. 设备独立性软件设备独立性软件(1) 执行所有设备的公有操作执行所有设备的公有操作• 对独立设备的分配和回收对独立设备的分配和回收• 将逻辑设备名映射为物理设备名找到驱动程序将逻辑设备名映射为物理设备名找到驱动程序• 对设备进行保护对设备进行保护• 缓冲管理缓冲管理• 差错控制差错控制(2) 向用户层软件提供统一接口向用户层软件提供统一接口 I/O软件组织成一种软件组织成一种层次结构层次结构,低层软件用来屏蔽低层软件用来屏蔽具体设备细节具体设备细节,高层软件则为用户提供一个简洁规范高层软件则为用户提供一个简洁规范的界面的界面。 它体现了它体现了I/O 设计的关键的概念设计的关键的概念:设备无关设备无关性性, 其含义就是使程序员写的软件无须修改其含义就是使程序员写的软件无须修改,就能进就能进行不同设备上的行不同设备上的I/O操作如对各种设备的读操作都如对各种设备的读操作都使用使用read;对各种设备的写操作都使用对各种设备的写操作都使用writeI/O软件的层次结构及功能软件的层次结构及功能进行进行I/O;格式化格式化I/O命名命名;保护保护;缓冲缓冲;分配分配;阻塞阻塞建立设备寄存器建立设备寄存器;检测状态检测状态I/O结束时唤醒服务子程序结束时唤醒服务子程序执行执行I/O操作操作中断处理程序中断处理程序设备驱动程序设备驱动程序设备无关软件设备无关软件I/O应答应答I/O请求请求用户进程用户进程硬件硬件 3.逻辑设备名到物理设备名映射逻辑设备名到物理设备名映射(1) 逻辑设备表逻辑设备表(LUT)逻辑设备名逻辑设备名 物理设备名物理设备名驱动程序入口地址驱动程序入口地址 /dev/tty 3 1024 /dev/print 5 2048(2) 逻辑设备表的设置逻辑设备表的设置• 整个系统只设一张整个系统只设一张LUT不允许有相同的逻辑不允许有相同的逻辑设备名设备名, 用在单用户系统中。 用在单用户系统中• 每个用户设一张每个用户设一张LUT, 用户登录建立进程时用户登录建立进程时,建立一张建立一张LUT并将该表放入该进程的并将该表放入该进程的PBC中中,用在多用户系统中用在多用户系统中 (1) 分配设备分配设备: 根据根据物理设备名物理设备名, 查找系统设备表查找系统设备表SDT, 找出该设备的设备控制表找出该设备的设备控制表DCT, 再根据再根据DCT中的中的设备状态字忙否执行设备状态字忙否执行,若忙将请求若忙将请求I/O的进程挂在设备的进程挂在设备等待队列上等待队列上, 否则检查安全性否则检查安全性, 安全则分配安全则分配2) 分配控制器分配控制器: 分到设备后分到设备后,再到再到DCT中找出与之连中找出与之连结的结的控制器控制表控制器控制表COCT,再根据再根据COCT中的状态字忙中的状态字忙否执行等待或分配否执行等待或分配控制器控制器3) 分配通道分配通道: 在在COCT中找到中找到与之连结的与之连结的通道控制通道控制表表CHCT, 再根据再根据CHCT中的状态字忙否执行等待或中的状态字忙否执行等待或分配分配通道5.4.4 独占设备的分配程序独占设备的分配程序5.4.5 SPOOLing 技术技术Simultaneous Peripheral Operations On-Line• 脱机输入输出是利用外围机脱机进行脱机输入输出是利用外围机脱机进行I/O操作。 操作• SPOOLing是是联机情况的同时外围操作联机情况的同时外围操作(假脱机操作假脱机操作) 用输入进程用输入进程 SPI 模拟脱机输入时外围机的功能模拟脱机输入时外围机的功能, 把低速输入设备的数据送到高速磁盘上把低速输入设备的数据送到高速磁盘上 用输出进程用输出进程 SPO模拟脱机输出时外围机的功能模拟脱机输出时外围机的功能,把高速磁盘的数据送到低速输出设备上把高速磁盘的数据送到低速输出设备上SPOOLing系统特点系统特点• 提高了提高了I/O速度速度, 缓和缓和CPU高速与高速与I/O慢速的矛盾慢速的矛盾• 将独占设备改造为共享设备将独占设备改造为共享设备• 实现虚拟设备实现虚拟设备, 一台物理设备变为多台逻辑设备一台物理设备变为多台逻辑设备SPOOLing 系统的组成系统的组成(1) 输入井、输出井输入井、输出井:收容输入收容输入/出的数据出的数据(2) 输入输入/出缓冲区出缓冲区Bi/Bo:内存缓冲区内存缓冲区,暂存输入暂存输入/出数出数据据(3) 输入输入/出进程出进程SPi/SPo:模拟脱机输入模拟脱机输入/出时的外围机出时的外围机输入缓冲区输入缓冲区Bi输出缓冲区输出缓冲区Bo高速磁盘高速磁盘输入进程输入进程SPi输出进程输出进程SPo输入井输入井输出井输出井输入设备输入设备输出设备输出设备实例实例: 共享打印机共享打印机把一台打印机改造为多个用户可共享把一台打印机改造为多个用户可共享 (1) 由输出进程由输出进程 SPo 将打印的数据从内存送到将打印的数据从内存送到输出井输出井 (2) 由由SPo将用户要求填入请求打印表中将用户要求填入请求打印表中, 并将并将请求打印表挂到请求打印队列上请求打印表挂到请求打印队列上 (4) 若打印机空闲若打印机空闲, SPo将将从请求打印队列的队从请求打印队列的队首取一张请求打印表首取一张请求打印表, 根据打印要求将打印数根据打印要求将打印数据从输出井送到据从输出井送到Bo, 再由打印机打印。 再由打印机打印课后题课后题:P181 10,12,14,185.5 设备驱动设备驱动5.5.1 设备驱动程序的功能和特点设备驱动程序的功能和特点1.设备驱动程序的功能设备驱动程序的功能(1) 将接受到的抽象将接受到的抽象(逻辑逻辑)要求转化为具体要求转化为具体(物理物理)要要求2) 检查用户检查用户I/O请求的合法性请求的合法性, 读出和检查读出和检查I/O设备的设备的状态状态, 传递有关参数传递有关参数, 设置设备的工作方式设置设备的工作方式3) 发出发出I/O命令命令,若设备空闲则启动的若设备空闲则启动的I/O设备设备, 否则否则将请求进程挂到设备等待队列上将请求进程挂到设备等待队列上4) 及时响应由控制器或通道发来的中断请求及时响应由控制器或通道发来的中断请求, 并根据并根据中断类型调用相应的中断处理程序进行处理中断类型调用相应的中断处理程序进行处理5) 对于设置通道的计算机系统对于设置通道的计算机系统, 驱动程序还应能够根驱动程序还应能够根据用户的据用户的I/O请求请求, 自动地构造通道程序自动地构造通道程序2. 设备处理方式设备处理方式 (1) 为每类设备设置一个为每类设备设置一个I/O进程。 进程 (2) 整个系统设置一个整个系统设置一个I/O进程 (3) 只为各类设备设置相应的设备处理程序供调用只为各类设备设置相应的设备处理程序供调用3. 设备驱动程序的特点设备驱动程序的特点(1) 驱动程序主要是在请求驱动程序主要是在请求I/O的进程与设备控制的进程与设备控制器之间的一个通信程序器之间的一个通信程序2) 驱动程序与驱动程序与I/O设备的特性密切相关设备的特性密切相关3) 驱动程序与驱动程序与I/O控制方式相关控制方式相关4) 有些驱动程序固化在有些驱动程序固化在ROM上1.将抽象的要求转化为具体的要求将抽象的要求转化为具体的要求1.如如:将逻辑盘块号转换为具体的盘面、磁道和扇将逻辑盘块号转换为具体的盘面、磁道和扇区区2. 检查检查I/O请求的合法性请求的合法性如如:打印机请求读打印机请求读, 以读方式打开磁盘后请求写以读方式打开磁盘后请求写3. 读出并检查设备的状态读出并检查设备的状态如如:读并查状态是否为就绪读并查状态是否为就绪, 确定启动控制器或等待确定启动控制器或等待4. 传送必要的参数传送必要的参数如如:启动磁盘启动磁盘, 先将字节数和内存起始地址送控制器先将字节数和内存起始地址送控制器5. 工作方式的设置工作方式的设置如如:异步通信异步通信, 先设置波特率、校验方式、停止位等先设置波特率、校验方式、停止位等6. 启动启动I/O设备设备:向控制器发送控制命令向控制器发送控制命令, 将自己将自己阻塞阻塞进进入睡眠状态。 入睡眠状态由控制器由控制器控制下进行控制下进行指定的指定的I/O操作7. 完成完成I/O后后,设备控制器向设备控制器向CPU发出中断请求发出中断请求;CPU响响应转向应转向中断处理程序唤醒中断处理程序唤醒相应的设备驱动进程相应的设备驱动进程5.5.2设备驱动程序的处理过程设备驱动程序的处理过程 在设备控制器的控制下在设备控制器的控制下, 设备设备完成完成I/O操作后操作后, 设设备控制器便向备控制器便向CPU发出一个发出一个中断请求中断请求; CPU响应后响应后, 转向转向中断处理程序中断处理程序,中断处理含以下几个步骤:中断处理含以下几个步骤:(1) 唤醒唤醒被阻塞的驱动被阻塞的驱动(程序程序)进程进程(2) 保护被中断进程的保护被中断进程的CPU环境环境(3) 分析中断原因转入相应的设备分析中断原因转入相应的设备处理程序处理程序(4) 进行中断处理进行中断处理(5) 恢复恢复被中断进程的现场被中断进程的现场5.5.3 I/O完成完成中断处理程序的处理过程中断处理程序的处理过程恢复恢复被中断进程的现场被中断进程的现场继续执行被中断进程继续执行被中断进程唤醒唤醒被阻塞的驱动被阻塞的驱动程序程序进程进程保护被中断进程的保护被中断进程的CPU环境环境分析中断原因分析中断原因转入相应的转入相应的设备设备处理程序处理程序打印机中断打印机中断处理程序处理程序键盘中断键盘中断处理程序处理程序…5.5.4 Linux设备管理设备管理• 提供一个统一而简单的提供一个统一而简单的I/O系统调用接口。 系统调用接口• I/O子系统可分为上下两部分:子系统可分为上下两部分: 下层下层: 与设备有关的称为设备驱动程序与设备有关的称为设备驱动程序 上层上层: 与设备无关的与设备无关的, 根据根据I/O请求请求, 通过通过特定设备驱动程序接口特定设备驱动程序接口, 与设备进行通信与设备进行通信一、设备驱动程序基础一、设备驱动程序基础•总线总线•I/O空间空间•I/O数据传送数据传送•字符设备与块设备字符设备与块设备•主设备号与次设备号主设备号与次设备号•设备文件设备文件•设备驱动程序接口设备驱动程序接口1. 总线总线• CPU和和I/O设备是通过总线连接起来的设备是通过总线连接起来的• 总线定义了设备之间进行通讯的协议;总线定义了设备之间进行通讯的协议;• 遵循同一种协议的硬件可在同一条遵循同一种协议的硬件可在同一条 总线上协调工作总线上协调工作• 常用常用PC总线:总线:ISA、、VESA、、EISA、、PCI等2. I/O空间空间• 计算机的计算机的I/O空间由所有设备的寄存器组成空间由所有设备的寄存器组成• I/O空间的配置分为两种情况:空间的配置分为两种情况: I/O空间与内存空间相互独立:如空间与内存空间相互独立:如intel386 I/O寄存器作为内存的一部分:如寄存器作为内存的一部分:如Motorla680x0• 对于对于要使用专门的要使用专门的I/O语句:语句:inb和和outb• Linux系统所使用的系统所使用的I/O空间空间, 可以查看文件:可以查看文件: /proc/ioports:3. I/O数据传送数据传送 查询、中断、查询、中断、DMA4. 字符设备与块设备字符设备与块设备•字符设备字符设备: 按顺序访问按顺序访问, 不使用缓冲技术。 不使用缓冲技术•块设备块设备: 随机访问随机访问, 使用缓冲技术使用缓冲技术•Linux所使用的设备查看文件所使用的设备查看文件: /proc/devices5. 主设备号和次设备号主设备号和次设备号•主设备号相同设备用相同驱动程序主设备号相同设备用相同驱动程序•次设备号用来区分具体设备实例次设备号用来区分具体设备实例•主设备号和次设备号共同来标识一个具体设备主设备号和次设备号共同来标识一个具体设备6. 设备驱动程序接口设备驱动程序接口 I/O子系统向内核其它部分提供了统一标准的设备子系统向内核其它部分提供了统一标准的设备接口接口, 通过通过结构结构 file_operations实现struct file_operations{ lseek();; /*重新定位读写位置重新定位读写位置*/ read(); /*从设备中读数据从设备中读数据*/ write();; /*向设备写数据向设备写数据*/ readdir();;/*无用无用,只用于文件系统只用于文件系统,而非设备而非设备*/ ioctl();; /*控制字符设备控制字符设备*/ mmap();; /* 将设备内存映射到进程地址空间将设备内存映射到进程地址空间*/ open();; /*打开并初始化设备打开并初始化设备;可以为可以为NULL,这样这样 每次打开设备总会成功每次打开设备总会成功,而且不通知设备驱动程序而且不通知设备驱动程序*/ release();; /*关闭设备关闭设备,并释放资源并释放资源*/ fsync();; /*实现内存与设备实现内存与设备(如硬盘如硬盘)间的同步间的同步 */ fasync();; /*实现内存与设备实现内存与设备(如鼠标如鼠标)间的异步通信间的异步通信*/ check_media_change(); /*用来检查设备介质用来检查设备介质(如软盘如软盘) 是否自上次操作后发生了变化是否自上次操作后发生了变化,仅用于块设备仅用于块设备*/ revalidate(); /*仅用于块设备仅用于块设备,该函数与缓冲区有关该函数与缓冲区有关*/}; Linux 内核为了将来自硬件设备的中断传递到相应内核为了将来自硬件设备的中断传递到相应的设备驱动程序的设备驱动程序, 在驱动程序初始化的时候就将其对应在驱动程序初始化的时候就将其对应的中断程序进行了登记的中断程序进行了登记, 即通过调用函数即通过调用函数 request_irq( ) 使中断号和中断服务子程序联系起来。 函数原形为:使中断号和中断服务子程序联系起来函数原形为:int request_irq(unsigned int irq, /* 中断请求号中断请求号 */void (*handler)(int, void *, struct pt_regs *), /* 指向中断服务子程序指向中断服务子程序 */unsigned long irqflags, /* 中断类型中断类型 */const char * devname, /* 设备的名字设备的名字 */void *dev_id );; /*设备标识符设备标识符*/request_irq ( )函数函数中断在驱动程序工作的过程中的作用中断在驱动程序工作的过程中的作用•用户发出某种输入用户发出某种输入/输出请求输出请求;•用驱动程序的用驱动程序的 read() 函数或函数或 request() 函数,将完成函数,将完成输入输入/输出的指令送给设备控制器,现在设备驱动程输出的指令送给设备控制器,现在设备驱动程序等待操作的发生。 序等待操作的发生•一小段时间以后,硬设备准备好完成指令的操作,一小段时间以后,硬设备准备好完成指令的操作,并产生中断信号标志事件的发生并产生中断信号标志事件的发生•中中断断信信号号导导致致调调用用驱驱动动程程序序的的中中断断服服务务子子程程序序,,它它将将所所要要的的数数据据从从硬硬设设备备复复制制到到设设备备驱驱动动程程序序的的缓缓冲冲区区中中,,并并通通知知正正在在等等待待的的read() 函函数数或或request()函函数数,,现在数据可供使用现在数据可供使用• 在在数数据据可可供供使使用用时时,,read()或或request()函函数数现现在在可可将将数据提供给用户进程数据提供给用户进程二、设备驱动程序的框架二、设备驱动程序的框架1. 驱动程序的注册与注销驱动程序的注册与注销• 系统引导时系统引导时, 通过通过sys_setup()进行系统初始化进行系统初始化 而而sys_setup()又调用又调用device_setup()进行设备初始化进行设备初始化• 设备初始化分为块设备初始化设备初始化分为块设备初始化blk_dev_init() 与字符设备初始化与字符设备初始化chr_dev_init()• 字符设备初始化通过字符设备初始化通过register_chrdev()函数向内核注册函数向内核注册 extern int register_chrdev(unsigned int Major, const char *name,struct file_operation *fops) • 若注册成功若注册成功,内核就可向请求的进程提供操作的入口地内核就可向请求的进程提供操作的入口地址进而启动驱动程序进行工作址进而启动驱动程序进行工作,完成进程的请求操作。 完成进程的请求操作•注销函数注销函数unregister_chrdev(unsigned int major const char *name)2. 设备的打开与释放设备的打开与释放•打开设备用打开设备用open()完成完成; 如打印机用如打印机用lp_open()打开•打开设备过程需要执行如下操作:打开设备过程需要执行如下操作:–检查与设备相关的错误检查与设备相关的错误–如果是首次打开,则初始化设备如果是首次打开,则初始化设备–如果需要,分配且设置设备文件的私有数据如果需要,分配且设置设备文件的私有数据–递增设备使用的计数器递增设备使用的计数器•释放设备是由释放设备是由release()完成的完成的–递减设备使用的计数器递减设备使用的计数器–释放文件中的私有数据所占的内存空间释放文件中的私有数据所占的内存空间–如果属于最后一个释放,则关闭设备如果属于最后一个释放,则关闭设备3. 举例:一个简单的字符设备举例:一个简单的字符设备mouse• 假设有一个进程打开假设有一个进程打开/dev/logibm文件文件(主设备号为主设备号为10)• VFS调用主设备号为调用主设备号为10的通用的通用open( )函数。 函数• 因为这类设备包括很多不同种类的设备因为这类设备包括很多不同种类的设备, 因此有一个因此有一个名为名为misc_open( )的函数• 这个函数根据次设备号装载一组更专用的文件操作这个函数根据次设备号装载一组更专用的文件操作• 最终结果是最终结果是, 该文件的该文件的f_op域指向域指向bus_mouse_fops表,表, 并调用并调用open_mouse( )函数函数•检查总线鼠标是否被连接检查总线鼠标是否被连接•请求总线鼠标所使用的请求总线鼠标所使用的IRQ线线, 也就是也就是IRQ5, 并注册并注册mouse_interrupt( )中断服务例程中断服务例程•初始化一个类型为初始化一个类型为mouse_status的的mouse数据结构数据结构,该结构存放总线鼠标的有关状态信息这些状态信该结构存放总线鼠标的有关状态信息这些状态信息包括哪个键被按下息包括哪个键被按下,以及最后一次读取设备文件之以及最后一次读取设备文件之后鼠标指针的水平、垂直位移后鼠标指针的水平、垂直位移•向向0x23e控制寄存器中写入控制寄存器中写入0,从而启用总线鼠标中,从而启用总线鼠标中断断(总线鼠标使用从总线鼠标使用从0x23c到到0x23f的的I/O端口端口)。 open_mouse( )函数函数 mouse数据结构的填充是异步进行的数据结构的填充是异步进行的: 每次用户移每次用户移动鼠标或者按下一个鼠标键时动鼠标或者按下一个鼠标键时, 鼠标控制器都会产生鼠标控制器都会产生一个中断一个中断, 从而激活从而激活mouse_interrupt( )函数函数; 该函数该函数执行以下操作:执行以下操作:• 通过向通过向0x23e控制寄存器写入适当的命令控制寄存器写入适当的命令, 并从并从0x23c 输入寄存器中读取相应的值来查询鼠标设备输入寄存器中读取相应的值来查询鼠标设备的状态•更新更新mouse数据结构数据结构• 向向0x23e控制寄存器中写入控制寄存器中写入0来重新启用鼠标中断来重新启用鼠标中断(鼠标中鼠标中 断每次发生时断每次发生时,鼠标设备都会自动将其禁用鼠标设备都会自动将其禁用)mouse_interrupt( )函数函数 进程要读取进程要读取/dev/logibm 文件的内容才能获得鼠标文件的内容才能获得鼠标的状态的状态;每个每个read( )系统调用最终都会调用系统调用最终都会调用read_mouse( )函数函数, 也就是文件操作的也就是文件操作的read函数函数; 该函数执行以下操作该函数执行以下操作:1. 查进程是否最少请求了查进程是否最少请求了3个字节个字节, 否则返回否则返回 -EINVAL 2. 检查对检查对/dev/logibm 的的最后一次读操作之后鼠标状态最后一次读操作之后鼠标状态是否有已发生变化是否有已发生变化; 如果没有如果没有, 就返回就返回-EAGAIN。 3. 调用调用disable_irq()来禁止来禁止IRQ5的中断处理的中断处理, 读取读取mouse数据结构中所存放的值数据结构中所存放的值; 然后通过调用然后通过调用enable_irq( )来重来重新启用新启用IRQ5的中断处理的中断处理4. 最后一次读操作之后把代表鼠标状态最后一次读操作之后把代表鼠标状态 (键状态键状态, 水平位水平位置置,垂直位置垂直位置) 的的3个字节写入用户态缓冲区个字节写入用户态缓冲区; 如果进程所如果进程所请求的内容超过请求的内容超过3个字节个字节, 就用就用0填充用户态缓冲区填充用户态缓冲区5. 返回所写字节的数量返回所写字节的数量read_mouse( )函数函数5.6 磁盘存取设备管理磁盘存取设备管理5.6.1 磁盘性能简述磁盘性能简述1. 磁盘的特点和结构磁盘的特点和结构: 容量大容量大, 断电后仍可保存信息断电后仍可保存信息, 存取速度较块存取速度较块, 成成本较低本较低,可实现直接可实现直接(随机随机)存取存取, 存取磁盘上任一物理存取磁盘上任一物理块的时间不依赖于该物理块所处的位置块的时间不依赖于该物理块所处的位置 盘设备由两部分组成盘设备由两部分组成: 驱动部分驱动部分+存储介质存储介质(磁盘磁盘) 磁盘以恒定转速旋转磁盘以恒定转速旋转, 磁臂沿径向驱动磁头移动到磁臂沿径向驱动磁头移动到所要求的磁道上所要求的磁道上, 并等待所要求的扇区开始位置旋转到并等待所要求的扇区开始位置旋转到磁头下磁头下, 开始读写数据开始读写数据, 在磁头和缓冲区间传输数据。 在磁头和缓冲区间传输数据柱面柱面扇区扇区磁臂磁臂磁头磁头磁道磁道2. 磁盘数据组织和格式磁盘数据组织和格式 信息记录在磁道上信息记录在磁道上, 多个盘片多个盘片, 正反两面都用来记正反两面都用来记录信息录信息, 每面一个磁头每面一个磁头, 所有盘面中处于同一磁道号上所有盘面中处于同一磁道号上的所有磁道组成一个柱面的所有磁道组成一个柱面物理地址形式物理地址形式: 磁头号磁头号(盘面号盘面号)、磁道号、磁道号(柱面号柱面号)、扇区号、扇区号 磁盘格式化的一种形式:磁盘格式化的一种形式: p172图图5-22每个物理扇区每个物理扇区600个字节包含:个字节包含: 标识符字段标识符字段 数据字段数据字段 Track#: 磁道号磁道号Gap: 为间隙为间隙Head#: 磁头号磁头号 Synch: 为定界符为定界符Sector#: 扇区号扇区号CRC: 用于校验用于校验 Gap ID Field Gap Data Field Gap 17 7 41 515 20Synch Track# Head# Sector# CRC 1 2 1 1 2Synch Data CRC 1 512 23. 磁盘类型:磁盘类型: 磁盘分为硬盘和软盘磁盘分为硬盘和软盘, 单片盘和多片盘单片盘和多片盘, 固定头磁盘固定头磁盘和移动头磁盘等。 和移动头磁盘等•固定头磁盘固定头磁盘: 每个磁道设置一个磁头每个磁道设置一个磁头, 所有磁头都所有磁头都被安装在一个刚性磁臂中被安装在一个刚性磁臂中, 各磁头并行读写各磁头并行读写, 磁头磁头不需要机械移动不需要机械移动, 速度快但成本高速度快但成本高, 用于大容量硬盘用于大容量硬盘上•移动头磁盘移动头磁盘: 一个盘面只有一个磁头一个盘面只有一个磁头, 变换磁道时变换磁道时需要移动磁头需要移动磁头, 速度慢但成本低速度慢但成本低, 微机上配置的软微机上配置的软盘和硬盘盘和硬盘(温盘温盘)都采用这种结构都采用这种结构•活动硬盘活动硬盘: 增加灵活性和便携性增加灵活性和便携性4. 磁盘访问时间(磁盘访问时间(Ta)•寻道时间寻道时间Ts: 把把磁头移动定位到指定磁道磁头移动定位到指定磁道所经历的所经历的时间时间, 启动时间启动时间s与移动与移动n条磁道时间之和条磁道时间之和 Ts=m n+s 一般为一般为5~30ms•旋转时间旋转时间Tr 等待指定等待指定扇区扇区旋转旋转移动到磁头下面所经历的时间移动到磁头下面所经历的时间 5400r/min=90r/sec的硬盘的硬盘:平均平均Tr=1/2r=5.55ms•传输时间传输时间Tt 从磁盘到内存读写数据实际经历的从磁盘到内存读写数据实际经历的时间时间: Tt=b/rN 其中其中b为为读写字节数读写字节数N为一条磁道总字节数为一条磁道总字节数 访问时间访问时间:Ta= Ts+1/2r+b/rN 主要与主要与Ts有关有关 5.6.2 磁盘调度磁盘调度 当多个进程都需要访问磁盘时当多个进程都需要访问磁盘时, 访盘请求在等待访盘请求在等待, 应采用一定的策略应采用一定的策略, 对这些请求的服务顺序调整安排对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间旨在降低平均磁盘服务时间, 达到公平、高效。 达到公平、高效公平:一个公平:一个I/O请求在有限时间内满足请求在有限时间内满足高效:减少设备机械运动所带来的时间浪费高效:减少设备机械运动所带来的时间浪费 磁盘调度考虑的问题磁盘调度考虑的问题::一次访盘时间一次访盘时间 = 寻道时间寻道时间+旋转延迟时间旋转延迟时间+存取时间存取时间 (1) 减少寻道时间减少寻道时间(活动头磁盘活动头磁盘) (2) 减少延迟时间减少延迟时间(固定头磁盘固定头磁盘) 磁盘调度算法磁盘调度算法:1. 先来先服务先来先服务FCFS(First-Come First Served) 按访问请求到达的先后次序服务按访问请求到达的先后次序服务优点:简单优点:简单, 公平;公平;缺点:效率低缺点:效率低, 相临两次请求可能会造成最内到最外的相临两次请求可能会造成最内到最外的柱面寻道柱面寻道, 使磁头反复移动使磁头反复移动, 增加了平均寻道时间增加了平均寻道时间设磁盘访问序列设磁盘访问序列: 80, 55, 58, 39, 18, 90,160,150, 38,18418 38 39 55 58 80 90 150 160 184 2. 最短寻道时间优先最短寻道时间优先SSTF(Shortest Seek Time First)优先选择距当前磁头最近的访问请求进行服务,主要优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先考虑寻道优先 优点:磁盘的平均寻道时间最小优点:磁盘的平均寻道时间最小 缺点:进程缺点:进程"饥饿饥饿"现象现象, 有时会造成与当前磁道距离有时会造成与当前磁道距离远的访问请求长期等待得不到服务远的访问请求长期等待得不到服务(不公平不公平) 磁盘访问序列磁盘访问序列: 80, 55, 58, 39, 18, 90,160,150, 38,18418 38 39 55 58 80 90 150 160 184 3. 扫描算法扫描算法SCAN电梯调度算法电梯调度算法 克服最短寻道优先的缺点克服最短寻道优先的缺点,既考虑距离既考虑距离,又考虑方向又考虑方向 具体做法具体做法: 当设备无访问请求时当设备无访问请求时, 磁头不动磁头不动;当有访当有访问请求时问请求时, 磁头按一个方向移动磁头按一个方向移动, 在移动过程中对遇到在移动过程中对遇到的访问请求进行服务的访问请求进行服务, 然后然后, 判断该方向上是否还有访判断该方向上是否还有访问请求问请求,如果有则继续扫描如果有则继续扫描; 否则改变移动方向否则改变移动方向,并为经并为经过的访问请求服务过的访问请求服务, 如此反复。 如此反复18 38 39 55 58 80 90 150 160 184 4. 循环扫描循环扫描(CSCAN)算法算法 SCAN算法算法对两端磁道请求不利对两端磁道请求不利, 可改进为循环扫可改进为循环扫描算法描算法CSCAN 本算法规定磁头单向移动本算法规定磁头单向移动(如向外如向外), 移动到最外磁移动到最外磁道后立即返回最里面要访问的磁道道后立即返回最里面要访问的磁道, 构成循环扫描构成循环扫描18 38 39 55 58 80 90 150 160 184 5. N-Step-SCAN 和和FSCAN算法算法 (1) 磁臂粘着现象磁臂粘着现象:进程对某一磁道反复访问进程对某一磁道反复访问, 从而垄从而垄断了整个磁盘断了整个磁盘, 引起磁臂粘着引起磁臂粘着 (2) N-Step-SCAN 和和FSCAN算法算法: 将磁盘请求队列按将磁盘请求队列按请求顺序分为多个请求顺序分为多个(或或2个个)长度为长度为N的子队列的子队列, 每个子每个子队列用队列用SCAN算法算法; 当当N很大时接近于很大时接近于SCAN算法算法, 当当 N=1时蜕化为时蜕化为FCFS算法。 算法 FSCAN算法是算法是2个子队列的个子队列的N-Step-SCAN算法算法, 一一 个是由当前所有磁盘请求形成的队列个是由当前所有磁盘请求形成的队列, 按按SCAN算法进算法进行处理行处理; 扫描期间新的磁盘请求放入另一个等待队列扫描期间新的磁盘请求放入另一个等待队列, 前一个队列处理完后前一个队列处理完后, 再处理新队列如此反复再处理新队列如此反复, 公平公平合理5.6.3 磁盘高速缓存磁盘高速缓存(Disk Cache)1. 磁盘高速缓存的形式磁盘高速缓存的形式 (1) 专用专用: 在内存中单独开辟一块固定的区域专用在内存中单独开辟一块固定的区域专用 (2) 共享共享: 所有空闲内存为缓冲池与请求分页系统共享所有空闲内存为缓冲池与请求分页系统共享2. 数据交付方式数据交付方式 (1) 数据交付数据交付 (2) 指针交付指针交付3. 置换算法置换算法 常用的算法有常用的算法有:最近最久未使用算法最近最久未使用算法LRU, 最近未使用最近未使用算法算法NRU和最少使用算法和最少使用算法LFU 许多系统除了考虑最近最久未使用这一原则外还要考许多系统除了考虑最近最久未使用这一原则外还要考虑:访问频率、可预见性、数据的一致性。 虑:访问频率、可预见性、数据的一致性4. 周期性地写回磁盘周期性地写回磁盘 根据根据LRU算法算法,经常访问的盘块可能长期不被回写经常访问的盘块可能长期不被回写,可可能导致丢失数据能导致丢失数据, 可采用周期性可采用周期性(几十秒几十秒)地写回磁盘地写回磁盘5.6.4 提高磁盘提高磁盘I/O速度的其他方法速度的其他方法1. 提前读提前读 预先将下一盘块数据一次读入减少读盘次数预先将下一盘块数据一次读入减少读盘次数2. 延迟写延迟写 考虑缓冲区的数据不久之后可能还会访问故暂时不考虑缓冲区的数据不久之后可能还会访问故暂时不写入磁盘写入磁盘, 将它挂在空闲队列的末尾将它挂在空闲队列的末尾, 当它最久未被访问当它最久未被访问到了队列之首要被淘汰时在写入磁盘到了队列之首要被淘汰时在写入磁盘3. 优化物理块的分布优化物理块的分布 分配物理块时分配物理块时, 把有可能顺序存取的块放在一起把有可能顺序存取的块放在一起, 尽尽量分布在同一柱面或相邻柱面上量分布在同一柱面或相邻柱面上, 从而减少磁盘臂的移从而减少磁盘臂的移动次数但采用线性链表来组织空闲块时比较困难动次数。 但采用线性链表来组织空闲块时比较困难, 此此时时, 将同一磁道的若干个盘块组织成一簇将同一磁道的若干个盘块组织成一簇, 以簇为单位进以簇为单位进行分配行分配, 可减少磁头的平均移动距离可减少磁头的平均移动距离4. 虚拟盘虚拟盘 利用内存空间区仿真磁盘利用内存空间区仿真磁盘,又称又称RAM盘盘; 断电或关机断电或关机后虚拟盘的数据将丢失后虚拟盘的数据将丢失, 因此虚拟盘仅放临时数据因此虚拟盘仅放临时数据5.6.5 磁盘冗余阵列磁盘冗余阵列1. 并行交叉存取并行交叉存取 为提高对磁盘的访问速度为提高对磁盘的访问速度, 用用N台磁盘驱动器组成台磁盘驱动器组成磁盘阵列磁盘阵列, 系统将数据分为若干个子盘块数据分别存储系统将数据分为若干个子盘块数据分别存储到各个磁盘的相同位置上到各个磁盘的相同位置上,并行传输到内存并行传输到内存,由于采用由于采用了并行存取方式加快了访问速度了并行存取方式加快了访问速度N-1倍2. 廉价磁盘冗余阵列廉价磁盘冗余阵列(Redundant Array of Inexpensive Disk) 为提高磁盘存储数据的可靠性为提高磁盘存储数据的可靠性,采用冗余存储采用冗余存储; 如如: N=7, 6个盘做数据盘个盘做数据盘,1个盘做奇偶校验盘个盘做奇偶校验盘, 校验盘存储校验盘存储6个数据盘的奇偶校验值个数据盘的奇偶校验值; 当某个盘损坏时可以用其它当某个盘损坏时可以用其它6个盘的数据盘恢复数据个盘的数据盘恢复数据; RAID 有有 0-7级级, 其中其中 0 级无级无冗余冗余, 1 级是镜像存储冗余级是镜像存储冗余50%, 3 级使用专用校验盘级使用专用校验盘, 5 级将校验值螺旋分布在阵列的所有磁盘上。 级将校验值螺旋分布在阵列的所有磁盘上3. RAID的优点的优点 可靠性高、磁盘的访问速度高、性能可靠性高、磁盘的访问速度高、性能/价格比高价格比高…校验值螺旋分布在阵列的所有磁盘上校验值螺旋分布在阵列的所有磁盘上1.I/O 设备分类设备分类按传输速率按传输速率: 低速低速( 要求2) 检查用户检查用户I/O请求的合法性请求的合法性, 设置设备的工作方式设置设备的工作方式3) 发出发出I/O命令命令 (4) 及时响应由控制器或通道发来的中断请求及时响应由控制器或通道发来的中断请求(5) 对有通道系统对有通道系统, 能根据能根据I/O请求请求, 自动地构造通道程自动地构造通道程序序15. 设备驱动程序的处理过程设备驱动程序的处理过程(1) 将抽象的要求转化为具体的要求将抽象的要求转化为具体的要求(2) 检查检查I/O请求的合法性、请求的合法性、 读出并检查设备的状态读出并检查设备的状态(3) 传送必要的参数、设置工作方式传送必要的参数、设置工作方式(4) 向控制器发送控制命令启动向控制器发送控制命令启动I/O设备设备, 将自己将自己阻塞阻塞(5) 完成完成I/O后后, CPU响应响应中断唤醒中断唤醒相应的设备驱动进程相应的设备驱动进程16. 磁盘存取时间磁盘存取时间 寻道时间寻道时间Ts、、旋转时间旋转时间Tr、、传输时间传输时间Tt17. 磁盘调度算法磁盘调度算法 先来先服务先来先服务FCFS、、最短寻道时间优先最短寻道时间优先SSTF 扫描算法扫描算法SCAN电梯调度算法电梯调度算法、、循环扫描循环扫描(CSCAN) N-Step-SCAN: 分为多个长度为分为多个长度为N的子队列的子队列 FSCAN算法算法: 分分2个子队列个子队列(当前和另一队列长度不定当前和另一队列长度不定)18. 磁盘高速缓存磁盘高速缓存 形式形式:专用专用-开辟固定专用区开辟固定专用区, 共享共享-与请求分页系统共与请求分页系统共享享 数据交付方式数据交付方式: 数据交付、指针交付数据交付、指针交付 置换算法置换算法: 最近最久未用最近最久未用LRU算法算法(多用多用) 最近未用最近未用NRU算法和最少使用算法和最少使用LFU算法算法。 周期性地写回磁盘周期性地写回磁盘: 保证不保证不丢失数据周期性地写回丢失数据周期性地写回19. 提高磁盘提高磁盘I/O速度的其他方法速度的其他方法 提前读提前读, 延迟写延迟写, 优化物理块的分布优化物理块的分布, 虚拟盘虚拟盘, 磁盘阵磁盘阵列列20. 廉价磁盘冗余阵列廉价磁盘冗余阵列RAID(冗余存储冗余存储, 提高可靠性提高可靠性) 优点优点: 可靠性高、磁盘的访问速度高、性能可靠性高、磁盘的访问速度高、性能/价格比高价格比高课后题课后题:P181 21,25,26,29。
