《计算机组成原理》第 5 章 - 输入输出系统
📘 目录
- 5.1 概述
- 5.1.1 输入输出系统的发展概况
- 5.2 I/O 设备
- 5.2.1 概述
- 5.2.2 输入设备
- 5.2.3 输出设备
- 5.2.4 其他 I/O 设备
- 5.2.5 多媒体技术
- 5.3 I/O 接口
- 5.3.1 概述
- 5.3.2 接口的功能和组成
- 5.3.3 接口类型
- 5.4 程序查询方式
- 5.4.1 程序查询流程
- 5.4.2 程序查询方式的接口电路
- 5.5 程序中断方式
- 5.5.1 中断的概念
- 5.5.2 I/O 中断的产生
- 5.5.3 程序中断方式的接口电路
- 5.5.4 I/O 中断处理过程
- 5.5.5 中断服务程序的流程
- 5.6 DMA 方式
- 5.6.1 DMA 方式的特点
- 5.6.2 DMA 接口的功能和组成
- 5.6.3 DMA 的工作过程
- 5.6.4 DMA 接口的类型
🔍 5.1 概述
🔵 5.1.1 输入输出系统的发展概况
- 发展阶段:
- 早期阶段(CPU 直接控制)
- 接口模块阶段(程序查询 / 中断方式)
- DMA 阶段(直接内存访问)
- 通道与 I/O 处理机阶段(独立控制)
🖥️ 5.2 I/O 设备
🔵 5.2.1 概述
- 分类:
- 输入设备:键盘、鼠标、扫描仪
- 输出设备:显示器、打印机、绘图仪
- 存储设备:硬盘、U 盘、光盘
🔵 5.2.2 输入设备
📌 键盘模拟案例(Java 实现)
// 键盘输入模拟程序
import java.util.Scanner;public class KeyboardSimulator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in); // 模拟键盘输入接口System.out.println("请输入字符:");while (scanner.hasNextLine()) { // 循环查询输入状态String input = scanner.nextLine(); // 获取输入数据System.out.println("接收到输入:" + input);if ("exit".equals(input)) { // 退出条件break;}}scanner.close(); // 关闭输入通道}
}
🔵 5.2.3 输出设备
📌 显示器输出案例(Java 实现)
// 显示器输出模拟程序
public class MonitorSimulator {public static void displayText(String text) {// 模拟显示器缓冲区写入System.out.println("【显示器输出】:" + text); }public static void main(String[] args) {String[] messages = {"Hello, I/O System!", "计算机组成原理"};for (String msg : messages) {displayText(msg); // 调用输出接口try {Thread.sleep(1000); // 模拟扫描输出延迟} catch (InterruptedException e) {e.printStackTrace();}}}
}
🔵 5.2.4 其他 I/O 设备
- 案例:磁盘 I/O 操作(伪代码示意)
# 伪代码:磁盘读写流程
def disk_io(operation, data=None):if operation == "read":return fetch_data_from_disk() # 从磁盘物理扇区读取elif operation == "write":write_data_to_disk(data) # 写入磁盘缓冲区update_file_table() # 更新文件索引表
🔵 5.2.5 多媒体技术
- 关键设备:
- 声卡:处理音频输入输出
- 显卡:图形渲染与显示控制
- 摄像头:视频采集设备
🚀 5.3 I/O 接口
🔵 5.3.1 概述
- 接口作用:
- 实现主机与外设的速度匹配
- 完成数据格式转换
- 提供设备选择和控制信号
🔵 5.3.2 接口的功能和组成
📌 接口组成示意图
🔵 5.3.3 接口类型
分类方式 | 类型 | 典型应用 |
---|---|---|
数据传输方式 | 并行接口 | 打印机 |
串行接口 | 串口硬盘 | |
总线类型 | PCI 接口 | 显卡 |
USB 接口 | 外设通用连接 |
🕵️ 5.4 程序查询方式
🔵 5.4.1 程序查询流程
📌 流程图
🔵 5.4.2 程序查询方式的接口电路
📌 Java 模拟接口类
// 程序查询方式接口模拟
public class PollingInterface {private boolean deviceReady = false; // 设备状态寄存器// 查询设备状态public boolean checkStatus() {return deviceReady; // 模拟读取状态寄存器}// 数据传输方法public void transferData(String data) {if (checkStatus()) {System.out.println("数据传输成功:" + data);deviceReady = false; // 重置状态} else {System.out.println("设备忙,等待中...");}}// 模拟设备就绪事件public void simulateDeviceReady() {this.deviceReady = true;}
}
🚨 5.5 程序中断方式
🔵 5.5.1 中断的概念
- 核心思想:外设主动向 CPU 发送请求,CPU 暂停当前任务转去处理中断
🔵 5.5.2 I/O 中断的产生
📌 中断请求逻辑(伪代码)
# 中断请求寄存器操作
def generate_interrupt():interrupt_request_flag = True # 设置中断请求标志if interrupt_mask == 0: # 中断屏蔽位允许send_interrupt_signal() # 向CPU发送中断信号
🔵 5.5.3 程序中断方式的接口电路
📌 中断接口组成图
🔵 5.5.4 I/O 中断处理过程
📌 流程图
🔵 5.5.5 中断服务程序的流程
📌 Java 中断处理模拟
// 中断服务程序模拟
public class InterruptService {// 保存现场public static void saveContext() {System.out.println("保存当前程序状态...");}// 中断处理逻辑public static void handleInterrupt() {System.out.println("处理I/O设备请求...");// 具体设备操作代码}// 恢复现场public static void restoreContext() {System.out.println("恢复程序执行环境...");}// 中断响应入口public static void interruptResponse() {saveContext();handleInterrupt();restoreContext();}
}
🚄 5.6 DMA 方式
🔵 5.6.1 DMA 方式的特点
- 核心优势:不经过 CPU 直接在内存与外设间传输数据
- 适用场景:大批量数据传输(如磁盘读写)
🔵 5.6.2 DMA 接口的功能和组成
📌 DMA 接口组成表
组件 | 功能描述 |
---|---|
数据寄存器 | 暂存传输数据 |
地址寄存器 | 存储内存 / 外设地址 |
控制寄存器 | 设置传输模式 / 字数 |
状态寄存器 | 指示传输状态 |
🔵 5.6.3 DMA 的工作过程
📌 流程图
🔵 5.6.4 DMA 接口的类型
- 选择型 DMA 接口:同一时间为一个设备服务
- 多路型 DMA 接口:可交替为多个设备服务
📊 全章思维导图