显示页面讨论过去修订反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== 第十一章 输入输出系统 ====== ===== 11.1 I/O系统概述 ===== ==== 11.1.1 I/O系统的重要性 ==== **基本概念**: 输入输出(I/O)系统是计算机与外部世界进行信息交换的桥梁。外部世界包括用户、其他计算机、各种传感器和执行机构等。 **I/O系统的特点**: **多样性**: I/O设备种类繁多,包括: - 字符设备:键盘、鼠标、打印机 - 块设备:磁盘、SSD、U盘 - 网络设备:网卡、调制解调器 - 多媒体设备:声卡、显卡、摄像头 - 人机交互设备:显示器、触摸屏 **复杂性**: 不同设备的工作原理、数据格式、传输速率差异很大,需要复杂的控制机制。 **异步性**: I/O设备通常独立于CPU运行,需要处理异步事件和中断。 **低速性**: 相对于CPU和内存,I/O设备通常较慢,需要速度匹配机制。 ==== 11.1.2 I/O系统的功能 ==== **主要功能**: **设备控制**: 向设备发送控制命令,控制设备的启动、停止、读写等操作。 **数据传输**: 在CPU/内存与I/O设备之间传输数据,包括输入(设备→内存)和输出(内存→设备)。 **数据缓冲**: 使用缓冲区解决速度不匹配问题,提高系统效率。 **数据格式转换**: 进行串行/并行转换、编码转换、电平转换等。 **错误检测**: 检测传输错误和设备故障,进行错误恢复。 **设备管理**: 管理多个设备,进行设备分配、调度和共享。 ==== 11.1.3 I/O系统的组成 ==== **硬件组成**: **I/O设备**: 完成具体的输入输出功能,如键盘输入字符、显示器输出图像。 **设备控制器**: 控制I/O设备工作的硬件电路,包括: - 控制寄存器:接收CPU命令 - 状态寄存器:反映设备状态 - 数据寄存器:暂存传输数据 - 控制逻辑:产生设备控制信号 **I/O接口**: 连接设备控制器与总线的电路,完成信号转换和协议转换。 **软件组成**: **I/O指令**: CPU直接执行的I/O操作指令,如IN/OUT指令。 **通道程序**: 在通道处理器上执行的专用I/O程序。 **设备驱动程序**: 操作系统内核中的软件模块,负责具体设备的控制。 **设备管理软件**: 操作系统中的通用I/O管理软件,包括设备分配、缓冲管理、虚拟设备等。 ===== 11.2 I/O接口与端口 ===== ==== 11.2.1 I/O接口的功能 ==== **基本功能**: **寻址功能**: 识别I/O端口地址,选择特定的设备进行通信。 **数据缓冲**: 使用缓冲寄存器暂存数据,解决速度差异。 **数据格式转换**: - 串行/并行转换 - 数字/模拟转换 - 电平转换 - 码制转换 **控制功能**: 接收CPU控制命令,产生设备控制信号。 **状态监测**: 检测设备状态,向CPU报告设备是否就绪、是否出错等。 **中断管理**: 管理中断请求,包括中断产生、屏蔽和优先级处理。 ==== 11.2.2 I/O端口的编址方式 ==== **独立编址方式**: **特点**: I/O端口地址与内存地址分开编址,使用独立的地址空间。 **优点**: - I/O指令简短,执行速度快 - I/O程序清晰,易于区分I/O操作和内存操作 - 不影响内存地址空间 **缺点**: - 需要专门的I/O指令(如IN/OUT) - 指令系统复杂 **典型应用**: Intel x86架构采用独立编址,I/O地址空间为64KB(0-65535)。 **统一编址方式(存储器映射I/O)**: **特点**: I/O端口与内存单元统一编址,占用内存地址空间。 **优点**: - 不需要专门的I/O指令,使用访存指令即可 - 指令系统简单 - 可使用丰富的访存指令 - 可直接对I/O设备进行算术逻辑运算 **缺点**: - 占用内存地址空间 - I/O操作速度可能较慢 - 程序可读性稍差 **典型应用**: Motorola 68000系列、ARM架构采用统一编址。 **比较**: | 特性 | 独立编址 | 统一编址 | |-----|---------|---------| | 指令系统 | 需要专门I/O指令 | 使用访存指令 | | 地址空间 | 独立 | 占用内存空间 | | 程序清晰度 | 高 | 较低 | | 指令灵活性 | 低 | 高 | | 典型应用 | x86 | ARM、MIPS | ==== 11.2.3 I/O端口地址译码 ==== **地址译码方法**: **线选法**: 使用地址线直接选择设备,简单但地址空间利用率低。 **全译码法**: 使用全部地址线译码,地址空间利用率高,不会产生地址重叠。 **部分译码法**: 使用部分地址线译码,介于两者之间。 **例题**: 某系统使用独立I/O编址,地址总线A15-A0,现要设计一个译码电路,为8个I/O设备分配地址空间,每个设备256个端口。 **解答**: - 每个设备256个端口,需要低8位地址线(A7-A0) - 8个设备需要3位地址线译码(A10-A8) - 地址范围: - 设备0:0000H-00FFH(A10-A8 = 000) - 设备1:0100H-01FFH(A10-A8 = 001) - ... - 设备7:0700H-07FFH(A10-A8 = 111) ===== 11.3 I/O控制方式 ===== ==== 11.3.1 程序查询方式 ==== **工作原理**: CPU主动查询设备状态,当设备就绪时进行数据传输。 **基本流程**: ``` 1. CPU向设备发送命令 2. CPU循环读取设备状态 3. 如果设备未就绪,继续查询 4. 如果设备就绪,进行数据传输 5. 传输完成后,进行下一步处理 ``` **程序实现**: ``` ; 输出一个字符到打印机 OUTPUT_CHAR: IN AL, STATUS_PORT ; 读状态端口 TEST AL, READY_BIT ; 测试就绪位 JZ OUTPUT_CHAR ; 未就绪,继续查询 MOV AL, CHAR ; 准备数据 OUT DATA_PORT, AL ; 输出到数据端口 RET ``` **优点**: - 硬件简单,成本低 - 软件控制灵活 - 实现简单 **缺点**: - CPU效率极低,需要不断轮询 - 实时性差,可能丢失数据 - 不适合高速设备 **适用场合**: CPU负担不重、数据传输速率低、实时性要求不高的场合。 ==== 11.3.2 程序中断方式 ==== **工作原理**: CPU启动设备后,继续执行原程序。当设备就绪时,主动向CPU发出中断请求,CPU响应后暂停当前程序,转去执行中断服务程序,完成数据传输后再返回原程序。 **工作流程**: ``` 1. CPU启动设备,设置中断允许 2. CPU继续执行主程序 3. 设备就绪,发出中断请求 4. CPU响应中断,保存现场 5. 执行中断服务程序,完成I/O 6. 恢复现场,返回主程序 ``` **中断处理过程**: **中断请求**: 设备通过中断请求线(INTR)向CPU发出请求信号。 **中断判优**: 当多个设备同时请求中断时,需要确定优先级。可以通过软件查询或硬件排队电路实现。 **中断响应**: CPU在满足以下条件时响应中断: - 有中断请求 - 中断允许标志为1(开中断) - 当前指令执行完毕 - 优先级高于当前程序 **中断服务**: CPU响应中断后,执行以下操作: 1. 关中断(防止嵌套混乱) 2. 保存现场(PC、寄存器等) 3. 转入中断服务程序 4. 执行I/O操作 5. 恢复现场 6. 开中断 7. 返回主程序 **中断向量**: 存放中断服务程序入口地址的存储单元。CPU根据中断源获取对应的中断向量,快速定位服务程序。 **优点**: - CPU效率高,不需要轮询 - 实时性好,能及时处理设备请求 - 适合中低速设备 **缺点**: - 中断处理有开销(保存/恢复现场) - 每传输一个数据都要中断一次,不适合高速设备 - 硬件复杂度增加 **适用场合**: 键盘、鼠标、打印机、串口等中低速设备。 ==== 11.3.3 DMA方式 ==== **工作原理**: DMA(Direct Memory Access,直接存储器访问)方式下,I/O设备与内存之间直接传输数据,不需要CPU干预,仅在开始和结束时需要CPU参与。 **DMA工作流程**: ``` 1. CPU设置DMA控制器参数(内存地址、传输长度等) 2. CPU启动DMA传输 3. DMA控制器接管总线 4. 设备与内存直接传输数据 5. 传输完成,DMA发出中断通知CPU ``` **DMA控制器结构**: **地址寄存器**: 存放内存地址,自动递增或递减。 **字计数器**: 存放传输数据字数,每传输一个数据减1,为0时结束传输。 **数据缓冲寄存器**: 暂存传输的数据。 **控制/状态寄存器**: 存放控制命令和设备状态。 **DMA请求触发器**: 接收设备的DMA请求信号。 **控制逻辑**: 产生控制信号,管理DMA操作。 **DMA传送方式**: **CPU停止法(成组传送)**: DMA传输期间,CPU完全放弃总线控制权,直到传输完成。适合高速设备大批量传输。 **周期挪用(周期窃取)**: DMA在CPU不使用总线的周期(如CPU内部操作期间)窃取总线周期进行传输。适合中速设备。 **交替分时访问**: 将CPU周期分为两部分,一部分给CPU,一部分给DMA。不需要总线仲裁,但需要硬件支持。 **DMA与中断的比较**: | 特性 | 中断方式 | DMA方式 | |-----|---------|---------| | 数据通路 | 设备→CPU→内存 | 设备↔内存(直接) | | CPU参与 | 每次传输都参与 | 仅开始和结束参与 | | 响应时间 | 指令执行结束 | 每个总线周期结束 | | 适用设备 | 低速设备 | 高速设备 | | 额外开销 | 保存/恢复现场 | 总线控制切换 | | 数据单位 | 字节/字 | 数据块 | ==== 11.3.4 通道方式 ==== **工作原理**: 通道是具有特殊功能的处理器,专门负责I/O操作。CPU只需发送I/O命令给通道,通道独立执行通道程序,完成整个I/O操作,然后向CPU报告。 **通道类型**: **字节多路通道**: 连接多个低速字符设备,以字节为单位交叉传输。 ``` 设备A:A1 A2 A3 ... 设备B: B1 B2 B3 ... 设备C: C1 C2 C3 ... 时间轴:A1 B1 C1 A2 B2 C2 A3 B3 C3 ... ``` **选择通道**: 连接高速设备,一次只服务一个设备,以成组方式传输。 ``` 设备A:A1 A2 A3 ... An(传输完成)→ 设备B:B1 B2 ... ``` **数组多路通道**: 结合前两者优点,连接多个高速设备,以数据块为单位交叉传输。 **通道程序**: 通道执行的专用程序,由一系列通道指令(通道控制字CCW)组成。 **通道指令格式**: ``` ┌─────────┬─────────┬─────────┬─────────┐ │ 操作码 │ 内存地址 │ 传输计数 │ 标志位 │ └─────────┴─────────┴─────────┴─────────┘ ``` **通道工作流程**: ``` 1. CPU组织通道程序并存入内存 2. CPU发送"启动I/O"命令给通道 3. 通道从内存取通道指令执行 4. 通道控制设备进行I/O操作 5. 传输完成,通道发出中断 6. CPU响应中断,处理完成 ``` **四级I/O系统**: ``` CPU ─── 通道 ─── 设备控制器 ─── I/O设备 (可多个) (可多个) (可多个) ``` ===== 11.4 中断系统 ===== ==== 11.4.1 中断的基本概念 ==== **中断的定义**: 中断是指CPU在执行程序过程中,遇到急需处理的事件时,暂停当前程序,转去执行处理程序,处理完毕后返回原程序继续执行的过程。 **中断源分类**: **外部中断**: 来自CPU外部的中断请求。 - 可屏蔽中断:可以通过软件屏蔽 - 非屏蔽中断:必须立即响应,如电源故障 **内部中断(异常)**: 来自CPU内部的中断。 - 故障(Fault):可纠正的错误,如缺页 - 陷阱(Trap):有意为之,如系统调用 - 中止(Abort):严重错误,无法恢复 **中断的作用**: 1. 实现I/O控制 2. 实现多道程序设计 3. 实现实时处理 4. 实现故障处理 5. 实现人机交互 ==== 11.4.2 中断优先级与嵌套 ==== **中断优先级**: 当多个中断源同时请求时,按照优先级高低决定响应顺序。 **优先级划分原则**: - 高速设备优先于低速设备 - 输入设备优先于输出设备 - 实时设备优先于非实时设备 - 故障中断优先级最高 **优先级实现方法**: **软件查询法**: CPU响应中断后,用软件查询中断源。优先级由查询顺序决定。 **硬件排队法**: 使用硬件电路(如菊花链、优先级编码器)确定优先级。 **中断嵌套**: 高优先级中断可以打断低优先级中断的处理,形成中断嵌套。 **嵌套规则**: - 高优先级可以打断低优先级 - 同优先级一般不嵌套(或根据策略) - 低优先级不能打断高优先级 **嵌套处理**: ``` 主程序 ──→ 中断A(低优先级) ↓ 保存现场A ↓ 执行服务A ──→ 中断B(高优先级) ↓ 保存现场B ↓ 执行服务B ↓ 恢复现场B ↓ 返回 ←───────┘ ↓ 恢复现场A ↓ 返回 ←──────────────────┘ ``` ==== 11.4.3 中断向量与向量中断 ==== **中断向量**: 中断服务程序的入口地址和状态字(PSW)。 **中断向量表**: 存储所有中断向量的表格,通常位于内存起始位置(如00000H-003FFH)。 **向量中断**: CPU根据中断源自动获取对应的中断向量,转入相应服务程序。 **获取方式**: - 中断源提供向量号 - 中断控制器(如8259A)提供向量号 - CPU内部产生向量号 **x86中断向量表**: 256个中断向量,每个4字节(IP:CS)。 - 0-31:CPU保留(异常) - 32-255:用户定义(外部中断) ===== 11.5 设备驱动程序 ===== ==== 11.5.1 设备驱动程序的功能 ==== **基本概念**: 设备驱动程序是操作系统内核中的软件模块,负责控制和管理特定I/O设备。 **主要功能**: 1. 接收上层软件的I/O请求 2. 将抽象请求转换为具体设备操作 3. 初始化设备控制器 4. 控制数据传输 5. 处理设备中断 6. 进行错误处理 **驱动程序层次**: ``` 用户程序 ↓ 系统调用接口 ↓ 设备无关软件(缓冲管理、设备分配) ↓ 设备驱动程序(具体设备控制) ↓ 中断处理程序 ↓ 设备控制器 → I/O设备 ``` ==== 11.5.2 设备驱动程序的结构 ==== **设备控制表(DCT)**: 每个设备一个,记录设备信息: - 设备标识 - 设备状态 - 控制表指针 - 请求队列指针 **设备开关表**: 系统维护的驱动程序入口表,用于调用不同设备的驱动程序。 **驱动程序接口**: 统一的驱动程序接口,包括: - open():打开设备 - close():关闭设备 - read():读数据 - write():写数据 - ioctl():控制操作 ===== 11.6 例题精讲 ===== **例题1**: 某系统有5个中断源,优先级从高到低为A、B、C、D、E。若当前正在处理C中断,各中断源的屏蔽字如下: | 中断源 | A | B | C | D | E | |-------|---|---|---|---|---| | A | 1 | 1 | 1 | 1 | 1 | | B | 0 | 1 | 1 | 1 | 1 | | C | 0 | 0 | 1 | 1 | 1 | | D | 0 | 0 | 0 | 1 | 1 | | E | 0 | 0 | 0 | 0 | 1 | (1) 什么是屏蔽字? (2) 处理C中断时,哪些中断源可以打断它? **解答**: (1) 屏蔽字表示该中断处理时对其他中断的屏蔽情况。1表示屏蔽(不允许中断),0表示不屏蔽(允许中断)。 (2) 处理C中断时,查看C的屏蔽字:A=0, B=0, C=1, D=0, E=0。 屏蔽字为0表示该中断源可以打断当前中断处理。因此A、B、D、E都可以打断C的处理。 **例题2**: 比较程序查询、中断、DMA三种I/O方式的特点,并说明各自的适用场合。 **解答**: | 特性 | 程序查询 | 中断 | DMA | |-----|---------|------|-----| | CPU效率 | 低(轮询等待) | 中(每次传输中断) | 高(批量传输) | | 响应速度 | 慢 | 较快 | 快 | | 硬件复杂度 | 简单 | 中等 | 较复杂 | | 数据传输单位 | 字节/字 | 字节/字 | 数据块 | | 适用设备 | 简单低速 | 中低速 | 高速块设备 | | 典型应用 | LED控制 | 键盘、串口 | 磁盘、显卡 | **例题3**: 某磁盘转速为7200 RPM,平均寻道时间为8ms,每个磁道有64个扇区,每个扇区512字节。计算: (1) 平均旋转延迟 (2) 传输一个扇区的时间 (3) 读取一个扇区的总时间 **解答**: (1) 旋转延迟 = (60秒/7200转) / 2 = 4.17ms(平均为半圈) (2) 传输时间 = (60秒/7200) / 64 = 0.13ms (3) 总时间 = 寻道时间 + 旋转延迟 + 传输时间 = 8ms + 4.17ms + 0.13ms = 12.3ms ===== 11.7 本章小结 ===== **重点内容**: 1. **I/O系统组成**: - 硬件:I/O设备、设备控制器、I/O接口 - 软件:设备驱动程序、I/O管理软件 2. **I/O端口编址**: - 独立编址:x86架构,需要专门I/O指令 - 统一编址:ARM架构,使用访存指令 3. **I/O控制方式**: - 程序查询:CPU轮询,效率最低 - 程序中断:设备就绪中断CPU,适合中低速设备 - DMA:设备直接访问内存,适合高速设备 - 通道:专用处理器管理I/O,适合大型系统 4. **中断系统**: - 中断类型:外部中断、内部中断(异常) - 中断优先级:优先级高的先响应 - 中断嵌套:高优先级可打断低优先级 - 向量中断:自动获取服务程序入口 5. **DMA技术**: - DMA控制器接管总线 - 传送方式:CPU停止法、周期挪用、交替访问 - 适合磁盘等高速块设备 **常见考点**: - 四种I/O方式的比较 - 中断处理过程 - DMA工作原理 - 通道类型与特点 - 端口编址方式比较 - 中断屏蔽与优先级 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 计算机组成与体系结构/输入输出系统.txt 最后更改: 2026/03/01 16:24由 张叶安 登录