当前位置: 首页 > news >正文

《计算机组成原理》第 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 输入输出系统的发展概况

  • 发展阶段
    1. 早期阶段(CPU 直接控制)
    2. 接口模块阶段(程序查询 / 中断方式)
    3. DMA 阶段(直接内存访问)
    4. 通道与 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 接口:可交替为多个设备服务

📊 全章思维导图

 

http://www.xdnf.cn/news/678727.html

相关文章:

  • 冒泡排序:像煮汤一样让数字「冒泡」
  • centos7安装MySQL(保姆级教学)
  • Linux信号量(32)
  • 鸿蒙OSUniApp 开发的滑动图片墙组件#三方框架 #Uniapp
  • 方正字库助力华为,赋能鸿蒙电脑打造全场景字体解决方案
  • 如何验证 AXI5 原子操作
  • leetcode刷题日记——完全二叉树的节点个数
  • Java怎么实现父子线程的值传递?InheritableThreadLocal类和transmittable-thread-local类?
  • Unity3D仿星露谷物语开发53之库存管理页面
  • Introduction to SQL
  • 【键盘说明书备份】ENERGYFORT
  • 编程日志5.27
  • MySQL :MySQL基本概念
  • 高性能计算 | 硅光芯片代工厂揭秘——技术特点与未来演进
  • SpringBoot集成jwt,实现token验证
  • 鸿蒙OSUniApp 实现自定义的侧边栏菜单组件#三方框架 #Uniapp
  • SQLord: 基于反向数据生成和任务拆解的 Text-to-SQL 企业落地方案
  • CMake 在尝试下载 Boost 时失败:SHA256 校验和与预期值不匹配
  • 【第1章 基础知识】1.8 在 Canvas 中使用 HTML 元素
  • 力扣HOT100之回溯:131. 分割回文串
  • 基于Matlab实现各种光谱数据预处理
  • Turf.js:前端地理空间分析的瑞士军刀
  • 2025山东CCPC补题
  • 基于Python的简易聊天机器人实现:从原理到实践
  • 组合API-provide和inject函数
  • 多模态机器学习
  • Android 开发:从 View Activity 向 Compose Activity 传递数据的多种实现方式
  • [yolov11改进系列]基于yolov11引入可改变核卷积AKConv的python源码+训练源码
  • QCustomPlot设置曲线图中文字缩放大小
  • 微信小程序一次性订阅封装