📖
R‘Notes
  • 关于本仓库/网站
  • Note
    • Golang的知识碎片
      • 关于Golang的一些碎片知识
    • LeetCode
      • LCP 47. 入场安检
      • LCR 121. 寻找目标值 - 二维数组
      • LCR 125. 图书整理 II
      • LCR 127. 跳跃训练
      • LCR 143. 子结构判断
      • LCR 159. 库存管理 III
      • LCR 161. 连续天数的最高销售额
      • LCR 170. 交易逆序对的总数
      • LCR 174. 寻找二叉搜索树中的目标节点
      • LeetCode--1. 两数之和
      • LeetCode--10. 正则表达式匹配
      • LeetCode--1004. 最大连续1的个数 III
      • LeetCode--101. 对称二叉树
      • LeetCode--1016. 子串能表示从 1 到 N 数字的二进制串
      • LeetCode--102. 二叉树的层序遍历
      • LeetCode--1027. 最长等差数列
      • LeetCode--103. 二叉树的锯齿形层序遍历
      • LeetCode--1035. 不相交的线
      • LeetCode--104. 二叉树的最大深度
      • LeetCode--1044. 最长重复子串
      • LeetCode--1049. 最后一块石头的重量 II
      • LeetCode--105. 从前序与中序遍历序列构造二叉树
      • LeetCode--1052. 爱生气的书店老板
      • LeetCode--106. 从中序与后序遍历序列构造二叉树
      • LeetCode--1092. 最短公共超序列
      • LeetCode--11. 盛最多水的容器
      • LeetCode--110. 平衡二叉树
      • LeetCode--1100. 长度为 K 的无重复字符子串
      • LeetCode--111. 二叉树的最小深度
      • LeetCode--112. 路径总和
      • LeetCode--113. 路径总和 II
      • LeetCode--1137. 第 N 个泰波那契数
      • LeetCode--114. 二叉树展开为链表
      • LeetCode--1143. 最长公共子序列
      • LeetCode--115. 不同的子序列
      • LeetCode--1151. 最少交换次数来组合所有的 1
      • LeetCode--1155. 掷骰子等于目标和的方法数
      • LeetCode--1176. 健身计划评估
      • LeetCode--1191. K 次串联后最大子数组之和
      • LeetCode--120. 三角形最小路径和
      • LeetCode--1208. 尽可能使字符串相等
      • LeetCode--121. 买卖股票的最佳时机
      • LeetCode--1218. 最长定差子序列
      • LeetCode--122. 买卖股票的最佳时机 II
      • LeetCode--1220. 统计元音字母序列的数目
      • LeetCode--123. 买卖股票的最佳时机 III
      • LeetCode--124. 二叉树中的最大路径和
      • LeetCode--125. 验证回文串
      • LeetCode--128. 最长连续序列
      • LeetCode--1289. 下降路径最小和 II
      • LeetCode--129. 求根节点到叶节点数字之和
      • LeetCode--1297. 子串的最大出现次数
      • LeetCode--1301. 最大得分的路径数目
      • LeetCode--1312. 让字符串成为回文串的最少插入次数
      • LeetCode--132. 分割回文串 II
      • LeetCode--134. 加油站
      • LeetCode--1343. 大小为 K 且平均值大于等于阈值的子数组数目
      • LeetCode--135. 分发糖果
      • LeetCode--136. 只出现一次的数字
      • LeetCode--138. 随机链表的复制
      • LeetCode--139. 单词拆分
      • LeetCode--14. 最长公共前缀
      • LeetCode--141. 环形链表
      • LeetCode--142. 环形链表 II
      • LeetCode--1423. 可获得的最大点数
      • LeetCode--143. 重排链表
      • LeetCode--144. 二叉树的前序遍历
      • LeetCode--1449. 数位成本和为目标值的最大数字
      • LeetCode--145. 二叉树的后序遍历
      • LeetCode--1456. 定长子串中元音的最大数目
      • LeetCode--1458. 两个子序列的最大点积
      • LeetCode--146. LRU 缓存
      • LeetCode--1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
      • LeetCode--148. 排序链表
      • LeetCode--1493. 删掉一个元素以后全为 1 的最长子数组
      • LeetCode--15. 三数之和
      • LeetCode--151. 反转字符串中的单词
      • LeetCode--152. 最大乘积子数组【DP】
      • LeetCode--153. 寻找旋转排序数组中的最小值
      • LeetCode--155. 最小栈
      • LeetCode--1584. 连接所有点的最小费用,最小生成树模板题
      • LeetCode--1594. 矩阵的最大非负积
      • LeetCode--16. 最接近的三数之和
      • LeetCode--160. 相交链表
      • LeetCode--162. 寻找峰值
      • LeetCode--1626. 无矛盾的最佳球队
      • LeetCode--1639. 通过给定词典构造目标字符串的方案数
      • LeetCode--165. 比较版本号
      • LeetCode--1652. 拆炸弹
      • LeetCode--1658. 将 x 减到 0 的最小操作数
      • LeetCode--1671. 得到山形数组的最少删除次数
      • LeetCode--169. 多数元素
      • LeetCode--1691. 堆叠长方体的最大高度
      • LeetCode--1695. 删除子数组的最大得分
      • LeetCode--174. 地下城游戏
      • LeetCode--1749. 任意子数组和的绝对值的最大值
      • LeetCode--1774. 最接近目标价格的甜点成本
      • LeetCode--179. 最大数
      • LeetCode--1824. 最少侧跳次数
      • LeetCode--1838. 最高频元素的频数
      • LeetCode--1852. 每个子数组的数字种类数
      • LeetCode--188. 买卖股票的最佳时机 IV
      • LeetCode--1888. 使二进制字符串字符交替的最少反转次数
      • LeetCode--189. 轮转数组
      • LeetCode--19. 删除链表的倒数第 N 个结点,关于删除链表会遇见的指针问题
      • LeetCode--1937. 扣分后的最大得分
      • LeetCode--1964. 找出到每个位置为止最长的有效障碍赛跑路线
      • LeetCode--198. 打家劫舍
      • LeetCode--1981. 最小化目标值与所选元素的差
      • LeetCode--1984. 学生分数的最小差值
      • LeetCode--199. 二叉树的右视图
      • LeetCode--2. 两数相加
      • LeetCode--20. 有效的括号
      • LeetCode--200. 岛屿数量
      • LeetCode--2024. 考试的最大困扰度
      • LeetCode--206. 反转链表
      • LeetCode--2067. 等计数子串的数量
      • LeetCode--207. 课程表
      • LeetCode--208. 实现 Trie (前缀树)
      • LeetCode--209. 长度最小的子数组
      • LeetCode--2090. 半径为 k 的子数组平均值
      • LeetCode--21. 合并两个有序链表,关于链表的复习
      • LeetCode--210. 课程表 II
      • LeetCode--2107. 分享 K 个糖果后独特口味的数量
      • LeetCode--213. 打家劫舍 II
      • LeetCode--2134. 最少交换次数来组合所有的 1 II
      • LeetCode--2140. 解决智力问题
      • LeetCode--215. 数组中的第K个最大元素
      • LeetCode--2156. 查找给定哈希值的子串
      • LeetCode--22. 括号生成
      • LeetCode--220. 存在重复元素 III
      • LeetCode--221. 最大正方形
      • LeetCode--2218. 从栈中取出 K 个硬币的最大面值和
      • LeetCode--224. 基本计算器
      • LeetCode--225. 用队列实现栈
      • LeetCode--226. 翻转二叉树
      • LeetCode--2266. 统计打字方案数
      • LeetCode--2267. 检查是否有合法括号字符串路径
      • LeetCode--2269. 找到一个数字的 K 美丽值
      • LeetCode--227. 基本计算器 II
      • LeetCode--2291. 最大股票收益
      • LeetCode--23. 合并 K 个升序链表【堆和分治】
      • LeetCode--230. 二叉搜索树中第 K 小的元素
      • LeetCode--2304. 网格中的最小路径代价
      • LeetCode--232. 用栈实现队列
      • LeetCode--2320. 统计放置房子的方式数
      • LeetCode--2321. 拼接数组的最大分数
      • LeetCode--2328. 网格图中递增路径的数目
      • LeetCode--233. 数字 1 的个数
      • LeetCode--234. 回文链表
      • LeetCode--236. 二叉树的最近公共祖先
      • LeetCode--2369. 检查数组是否存在有效划分
      • LeetCode--2379. 得到 K 个黑块的最少涂色次数
      • LeetCode--239. 滑动窗口最大值,关于单调队列的复习
      • LeetCode--24. 两两交换链表中的节点
      • LeetCode--240. 搜索二维矩阵 II
      • LeetCode--2431. 最大限度地提高购买水果的口味
      • LeetCode--2435. 矩阵中和能被 K 整除的路径
      • LeetCode--2466. 统计构造好字符串的方案数
      • LeetCode--25. K 个一组翻转链表
      • LeetCode--2510. 检查是否有路径经过相同数量的 0 和 1
      • LeetCode--2516. 每种字符至少取 K 个
      • LeetCode--2533. 好二进制字符串的数量
      • LeetCode--256. 粉刷房子
      • LeetCode--2585. 获得分数的方法数
      • LeetCode--26. 删除有序数组中的重复项
      • LeetCode--2606. 找到最大开销的子字符串
      • LeetCode--265. 粉刷房子 II
      • LeetCode--2684. 矩阵中移动的最大次数
      • LeetCode--2730. 找到最长的半重复子字符串
      • LeetCode--2779. 数组的最大美丽值
      • LeetCode--2787. 将一个数字表示成幂的和的方案数
      • LeetCode--279. 完全平方数【动态规划】
      • LeetCode--283. 移动零
      • LeetCode--2831. 找出最长等值子数组
      • LeetCode--2841. 几乎唯一子数组的最大和
      • LeetCode--287. 寻找重复数
      • LeetCode--2915. 和为目标值的最长子序列的长度
      • LeetCode--295. 数据流的中位数
      • LeetCode--2953. 统计完全子字符串
      • LeetCode--2958. 最多 K 个重复元素的最长子数组
      • LeetCode--297. 二叉树的序列化与反序列化
      • LeetCode--3. 无重复字符的最长子串
      • LeetCode--30. 串联所有单词的子串
      • LeetCode--300. 最长递增子序列【DP+二分】
      • LeetCode--3082. 求出所有子序列的能量和
      • LeetCode--309. 买卖股票的最佳时机含冷冻期
      • LeetCode--3090. 每个字符最多出现两次的最长子字符串
      • LeetCode--31. 下一个排列
      • LeetCode--3180. 执行操作可获得的最大总奖励 I
      • LeetCode--3183. 达到总和的方法数量
      • LeetCode--3186. 施咒的最大总伤害
      • LeetCode--32. 最长有效括号【栈和dp】
      • LeetCode--322. 零钱兑换
      • LeetCode--328. 奇偶链表
      • LeetCode--329. 矩阵中的最长递增路径
      • LeetCode--3290. 最高乘法得分
      • LeetCode--33. 搜索旋转排序数组【直接二分】
      • LeetCode--3316. 从原字符串里进行删除操作的最多次数
      • LeetCode--3363. 最多可收集的水果数目
      • LeetCode--337. 打家劫舍 III
      • LeetCode--3393. 统计异或值为给定值的路径数目
      • LeetCode--34. 在排序数组中查找元素的第一个和最后一个位置
      • LeetCode--3418. 机器人可以获得的最大金币数
      • LeetCode--343. 整数拆分
      • LeetCode--3439. 重新安排会议得到最多空余时间 I
      • LeetCode--347. 前 K 个高频元素
      • LeetCode--347. 前 K 个高频元素Golang中的堆(containerheap)
      • LeetCode--3489. 零数组变换 IV
      • LeetCode--354. 俄罗斯套娃信封问题
      • LeetCode--3561. 移除相邻字符
      • LeetCode--3566. 等积子集的划分方案
      • LeetCode--3567. 子矩阵的最小绝对差
      • LeetCode--3576. 数组元素相等转换
      • LeetCode--3577. 统计计算机解锁顺序排列数
      • LeetCode--377. 组合总和 Ⅳ
      • LeetCode--39. 组合总和
      • LeetCode--394. 字符串解码【栈】
      • LeetCode--395. 至少有 K 个重复字符的最长子串
      • LeetCode--4. 寻找两个正序数组的中位数
      • LeetCode--40. 组合总和 II
      • LeetCode--402. 移掉 K 位数字
      • LeetCode--41. 缺失的第一个正数
      • LeetCode--415. 字符串相加
      • LeetCode--416. 分割等和子集_494. 目标和【01背包】
      • LeetCode--42. 接雨水(单调栈和双指针)
      • LeetCode--426. 将二叉搜索树转化为排序的双向链表
      • LeetCode--43. 字符串相乘
      • LeetCode--437. 路径总和 III【前缀和】
      • LeetCode--438. 找到字符串中所有字母异位词
      • LeetCode--44. 通配符匹配
      • LeetCode--440. 字典序的第K小数字
      • LeetCode--442. 数组中重复的数据
      • LeetCode--445. 两数相加 II
      • LeetCode--45. 跳跃游戏 II
      • LeetCode--450. 删除二叉搜索树中的节点
      • LeetCode--46. 全排列
      • LeetCode--460. LFU 缓存
      • LeetCode--468. 验证IP地址
      • LeetCode--47. 全排列 II
      • LeetCode--470. 用 Rand7() 实现 Rand10()
      • LeetCode--474. 一和零
      • LeetCode--48. 旋转图像
      • LeetCode--498. 对角线遍历
      • LeetCode--5. 最长回文子串
      • LeetCode--50. Pow(x, n)
      • LeetCode--509. 斐波那契数
      • LeetCode--516. 最长回文子序列
      • LeetCode--518. 零钱兑换 II
      • LeetCode--529. 扫雷游戏题解C++广搜
      • LeetCode--53. 最大子数组和
      • LeetCode--54. 螺旋矩阵
      • LeetCode--540. 有序数组中的单一元素
      • LeetCode--543. 二叉树的直径
      • LeetCode--55. 跳跃游戏
      • LeetCode--556. 下一个更大元素 III
      • LeetCode--56. 合并区间
      • LeetCode--560. 和为 K 的子数组
      • LeetCode--567. 字符串的排列
      • LeetCode--572. 另一棵树的子树
      • 583. 两个字符串的删除操作
      • LeetCode--59. 螺旋矩阵 II
      • LeetCode--61. 旋转链表
      • LeetCode--62. 不同路径
      • LeetCode--622. 设计循环队列
      • LeetCode--63. 不同路径 II
      • LeetCode--64. 最小路径和
      • LeetCode--643. 子数组最大平均数
      • LeetCode--646. 最长数对链
      • LeetCode--662. 二叉树最大宽度
      • LeetCode--673. 最长递增子序列的个数
      • LeetCode--678. 有效的括号字符串
      • LeetCode--679. 24 点游戏
      • LeetCode--683. K 个关闭的灯泡
      • LeetCode--69. x 的平方根
      • LeetCode--695. 岛屿的最大面积
      • LeetCode--7. 整数反转
      • LeetCode--70. 爬楼梯
      • LeetCode--704. 二分查找
      • LeetCode--712. 两个字符串的最小ASCII删除和
      • LeetCode--714. 买卖股票的最佳时机含手续费
      • LeetCode--718. 最长重复子数组
      • LeetCode--72. 编辑距离
      • LeetCode--739. 每日温度
      • LeetCode--74. 搜索二维矩阵
      • LeetCode--740. 删除并获得点数
      • LeetCode--746. 使用最小花费爬楼梯
      • LeetCode--75. 颜色分类
      • LeetCode--76. 最小覆盖子串
      • LeetCode--77. 组合
      • LeetCode--78. 子集
      • LeetCode--79. 单词搜索
      • LeetCode--790. 多米诺和托米诺平铺
      • LeetCode--8. 字符串转换整数 (atoi)
      • LeetCode--82. 删除排序链表中的重复元素 II
      • LeetCode--83. 删除排序链表中的重复元素
      • LeetCode--84. 柱状图中最大的矩形【单调栈】
      • LeetCode--85. 最大矩形
      • LeetCode--87. 扰乱字符串
      • LeetCode--879. 盈利计划
      • LeetCode--88. 合并两个有序数组
      • LeetCode--887. 鸡蛋掉落
      • LeetCode--904. 水果成篮
      • LeetCode--91. 解码方法
      • LeetCode--912. 排序数组
      • LeetCode--918. 环形子数组的最大和
      • LeetCode--92. 反转链表 II
      • LeetCode--93. 复原 IP 地址
      • LeetCode--931. 下降路径最小和
      • LeetCode--94. 二叉树的中序遍历
      • LeetCode--958. 二叉树的完全性检验
      • LeetCode--960. 删列造序 III
      • LeetCode--97. 交错字符串
      • LeetCode--98. 验证二叉搜索树
      • LeetCode--983. 最低票价
      • LeetCode--LCR 140. 训练计划 II
      • NC--311.圆环回原点
      • NC--36进制加法
      • 补充题1. 排序奇升偶降链表
    • Redis
      • Redis基础部分
      • 在用Docker配置Redis哨兵节点的时候出现的错误及其解决
    • SQL学习记录
      • SQL碎片知识
      • 系统
        • MySQL学习笔记1【DQL和DCL】
        • MySQL学习笔记2【函数/约束/多表查询】
        • MySQL学习笔记3【事务】
        • MySQL学习笔记4【存储引擎和索引】
        • MySQL学习笔记5【SQL优化/视图/存储过程/触发器】
        • MySQL学习笔记6【锁】
        • MySQL学习笔记7【InnoDB】
    • x86汇编
      • 学习汇编随手记
    • 微服务相关
      • Nacos与gRPC
      • 【Golangnacos】nacos配置的增删查改,以及服务注册的golang实例及分析
    • 手搓
      • Whalebox(仿Docker)的爆诞
    • 操作系统
      • 操作系统碎片知识
      • MIT6.S081
        • MIT6.S081-lab1
        • MIT6.S081-lab2
        • MIT6.S081-lab3
        • MIT6.S081-lab3前置
        • MIT6.S081-lab4
        • MIT6.S081-lab4前置
        • MIT6.S081-lab5
        • MIT6.S081-lab5前置
        • MIT6.S081-lab7
        • MIT6.S081-lab7前置
        • MIT6.S081-lab8
        • MIT6.S081-lab8前置
        • MIT6.S081-lab9
        • MIT6.S081-环境搭建
    • 消息队列MQ
      • Kafka
    • 算法杂谈
      • 关于二分查找时的边界分类问题
    • 计组笔记
      • 计算机组成原理的学习笔记(1)--概述
      • 计算机组成原理的学习笔记(10)--CPU·其二 组合逻辑控制器和微程序
      • 计算机组成原理的学习笔记(11)--CPU·其三 中断和异常多处理器相关概念
      • 计算机组成原理的学习笔记(12)--总线和IO系统
      • 计算机组成原理的学习笔记(2)--数据的表示和运算·其一
      • 计算机组成原理的学习笔记(3)--数据表示与运算·其二 逻辑门和加减乘
      • 计算机组成原理的学习笔记(4)--数据的表示与运算·其三 补码的乘法以及原码补码的除法
      • 计算机组成原理的学习笔记(4)--数据的表示与运算·其三 补码的乘法以及原码补码的除法
      • 计算机组成原理的学习笔记(6)--存储器·其一 SRAMDRAMROM主存储器的初步认识
      • 计算机组成原理的学习笔记(7)--存储器·其二 容量扩展多模块存储系统外存Cache虚拟存储器
      • 计算机组成原理的学习笔记(8)--指令系统·其一 指令的组成以及数据寻址方式RISK和CISK
      • 计算机组成原理的学习笔记(9)--CPU·其一 CPU的基本概念流水线技术数据通路
    • 计算机网络
      • CS144
        • CS144 - Lab 0
        • CS144 - Lab 1
        • CS144 - Lab 2
        • CS144 - Lecture 1
        • CS144 - Lecture 2
        • CS144 - Lecture 3
由 GitBook 提供支持
在本页
  • 总线
  • 1. 组成
  • 2. 结构
  • 3. 性能指标
  • 4. 总线标准
  • 5. 总线仲裁
  • 6.总线通信控制
  • I/O系统
  • 1. 组成
  • 2. I/O接口
  • 3. I/O方式
  1. Note
  2. 计组笔记

计算机组成原理的学习笔记(12)--总线和IO系统

总线


1. 组成

总线主要由三种信号线组成:

  • 数据线:用于传输实际的数据,宽度决定了数据传输的并行性。

  • 地址线:传输内存或I/O设备的地址,决定了系统可以寻址的最大内存空间。

  • 控制线:传输控制信息,协调设备间的操作,确保数据正确传输。


2. 结构

总线可以按功能和设计架构分为不同的结构,主要包括以下几种:

2.1 单总线结构

单总线结构指计算机系统内所有部件(如CPU、内存、I/O设备等)共享一条总线。这种结构简单,硬件开销低,但随着设备增多,竞争激烈,容易出现瓶颈。

2.2 双总线结构

双总线结构通常将内存总线和I/O总线分开,这样可以有效地分担总线带宽,提高整体性能。常见于需要高性能内存访问的系统。

2.3 三总线结构

三总线结构进一步将高速I/O设备与其他设备分开,专门为I/O设备提供单独的高速总线。这样可以避免I/O设备与CPU或内存的争用,提高数据传输效率。


3. 性能指标

总线的性能指标主要涉及以下几个方面:

  • 数据传输速率:指单位时间内通过总线传输的数据量,通常用MBps或Gbps表示。

  • 宽度:8位/32位等,表示总线一次可以传输的数据位数。

  • 带宽:总线的数据传输宽度和传输速率的乘积,表示总线一次可以传输的数据量。

  • 延迟:数据从一个设备到达另一个设备所需的时间,低延迟意味着更高效的数据传输。

  • 总线复用:通过在同一条总线上传输多种信号(如地址、数据、控制信号),减少了硬件资源的需求,提高了总线的利用率。

  • 总线周期:总线进行一次完整数据传输所需的时间。

  • 最大容量:总线能够支持的最大内存或设备数量。


4. 总线标准

常见的总线标准有很多,主要包括以下几种:

4.1 ISA

  • 由IBM推出,常用于早期的8位和16位计算机。

  • 最大传输率为16 MBps,地址线24位,数据线16位。

4.2 EISA

  • 在ISA的基础上扩展,支持更高的传输率(最大33 MBps),使用32位数据线和32位地址线,改进了传输效率。

4.3 VESA

  • 由VESA提出,主要用于显卡等高带宽需求的设备,最大传输速率可达133 MBps,采用32位或64位数据线。

4.4 PCI

  • 提供更高性能的总线标准,支持即插即用,33 MHz的时钟频率,数据传输速率为132 MBps,支持32位和64位数据通道。

4.5 PCIe

  • 基于串行通信,支持更高的带宽,最新版本支持的传输速率可达8 Gbps。

4.6 AGP

  • 专为显卡设计的总线,具有较高的带宽,最大传输速率可达533 MBps。

4.7 USB

  • 做到了真·即插即用,主要用于外设连接,支持热插拔,传输速率从1.5 Mbps到10 Gbps不等。

4.8 RS-232C

  • 用于串行数据交换,通常用于20米以内的通信,广泛应用于早期的计算机外设。


5. 总线仲裁

总线仲裁是多设备系统中用于决定哪个设备能够访问总线的机制。常见的仲裁方式有:

5.1 链式仲裁

  • 每个设备按顺序连接,优先级由设备在链条中的位置决定,简单但效率较低,适合设备数量较少的系统。

5.2 计数器仲裁

  • 每个设备有一个计数器,设备的优先级由计数器的值决定。优先级动态变化,避免了“饥饿”问题,适用于设备较多的系统,

5.3 独立请求仲裁

  • 每个设备可以独立发出请求,仲裁器根据请求决定哪个设备获得总线。灵活且高效,但可能出现争用和复杂的仲裁机制。

5.4 总线仲裁机制的应用

不同的总线仲裁机制适用于不同的系统,主要的选择标准包括:

  • 设备数量:设备数量多时,计数器仲裁和独立请求仲裁较为高效。

  • 系统复杂性:较为简单的系统可能使用链式仲裁,较为复杂的系统则可以选择计数器仲裁和独立请求仲裁。

  • 公平性要求:如果系统中设备间的公平性要求较高,计数器仲裁和独立请求仲裁更为合适。

5.5 总线仲裁的优缺点总结

仲裁方式
优点
缺点

链式仲裁

实现简单,硬件开销小,适合设备数量少的系统,只需要两根线便可实现功能。

效率低,设备数量多时存在等待延迟,可能产生优先级反转问题。

计数器仲裁

提供动态优先级调整,较高的公平性,适合多设备系统,需要log(n) + 1根线来实现。

实现复杂,硬件开销大,需要全局同步。

独立请求仲裁

灵活高效,设备独立请求,适用于灵活的设备间竞争,需要2n根线实现。

可能导致争用,仲裁复杂,低优先级设备可能无法及时获得总线。


6.总线通信控制

  • 同步通信:

    • 规定明确,简单,但具有局限性。

  • 异步通信:

    • 采取握手方式,一问一答的方式实现,克服了同步通信的缺点,但控制逻辑更复杂,传输率更低。

    • 分为不互锁,半互锁,全互锁式(TCP协议的三次握手)。

  • 半同步通信:

    • 前两者的结合。

  • 分离式通信:

    • 将传输周期分为两个子周期,A为主设备,B为访问的设备

    • 第一个子周期,A占用总线向B设备发送信息,之后立即退出占用总线。

    • 第二个子周期,B设备接受到了A设备发送的信息,在内部准备好A需要的信息后,再占用总线向A发送信息。

    • 总的来说节省了等待B设备准备数据的时间,但设计更加复杂。


I/O系统

1. 组成

1.1 I/O软件

  • I/O指令:

    • 由操作码/命令码/设备码组成。

    • 命令码:表示具体的操作类型,如输入、输出、状态检测等。

    • 操作码:标识该命令为I/O指令。

  • 通道指令:

    • 通道是操作系统与I/O设备交互的一个重要组成部分,负责处理与I/O设备相关的操作。

    • 通道指令是指通过通道进行I/O操作时所使用的指令,它通常是计算机硬件的一部分,直接影响设备的工作和数据传输。

1.2 I/O硬件

  • 采取接口模块的I/O系统:

    • 接口模块/I/O设备。

  • I/O通道:

    • 通道/设备控制器/I/O设备

  • I/O总线


2. I/O接口

2.1 功能

  1. 选址功能:

    • I/O接口负责为每个外部设备分配一个唯一的地址,这样计算机系统能够通过该地址访问特定的I/O设备。

  2. 数据缓冲:

    • I/O接口使用缓冲区存储数据,以解决设备速度差异问题,避免因传输速率不匹配而导致的数据丢失或过载。

  3. 串并转换:

    • 对于串行通信的设备和并行通信的计算机,I/O接口负责进行串行与并行数据格式的转换,以保证数据传输的兼容性。

  4. 电平转换:

    • 计算机内部和外部设备通常使用不同的电压标准,I/O接口负责将信号电平转换,使设备能够正确理解信号。

  5. 传送控制命令:

    • I/O接口发送控制命令,确保I/O设备能够按时启动、停止或执行特定的操作。

  6. 反馈状态信息:

    • I/O接口不断监控设备的状态,并反馈给计算机,告知设备是否处于就绪、忙碌、错误等状态.

2.2 I/O接口的基本组成

I/O接口的基本组成通常包括以下几个关键部分:

  1. 设备选择电路

    • 当设备码匹配时,发出设备选择信号,选择并激活目标I/O设备。该电路确保数据和控制信号被发送到正确的设备。

  2. 命令寄存器/命令译码器

    • 命令寄存器:用于暂时存储通过命令线传输过来的命令码。

    • 命令译码器:对命令寄存器中的命令进行解析,决定该执行的操作类型,如读、写、状态检测等。

  3. 数据缓冲寄存器 (DBR)

    • 用于暂存即将传输的数据或已接收的数据,解决计算机和外部设备之间的速度差异问题。数据缓冲寄存器确保数据在适当时刻被正确传输和处理。

  4. 状态触发器

    • 包括完成触发器(D)和工作触发器(B),用于表示设备的工作状态和操作完成状态。这些触发器提供设备当前状态的实时反馈。

  5. 中断请求触发器

    • 发送中断请求信号,当设备完成任务或发生异常情况时,触发中断请求,通知CPU进行处理。

  6. 中断屏蔽触发器

    • 实现对中断请求的屏蔽功能,用于控制哪些中断信号需要被忽略,防止不需要的中断干扰正常的操作。

2.3 I/O端口及其编址

  1. 端口

    • 指的是接口电路中的一些寄存器,包括数据端口,控制端口,状态端口。

  2. 编址

    • 统一编址:将I/O地址看成存储器地址的一部分,可以通过CPU直接进行访问,缺点是减少了主存的容量。

    • 不统一编址:I/O地址和存储器地址完全分开,两者独立,但与此同时需要专门的I/O指令进行访问,结构更清晰,但指令系统更加复杂。


3. I/O方式

3.1 程序查询方式

  • 定义:在程序查询方式下,CPU通过不断查询设备的状态寄存器来判断I/O操作是否完成,是否可以进行下一步操作。

  • 过程:程序轮询外设的状态寄存器,检查是否就绪,如果未就绪则继续查询,直到操作完成。

  • 特点:

    • 简单易实现,但效率较低。

    • 占用CPU资源,CPU在等待期间无法执行其他任务。

    • 常用于I/O操作较少、延迟要求不高的场景。

3.2 DMA方式 (Direct Memory Access)

  • 定义:DMA方式通过DMA控制器直接将数据在I/O设备和内存之间传输,CPU仅在初始化传输时参与,不需要进行数据传输过程中的干预。

  • 过程:CPU向DMA控制器发送命令,DMA控制器负责直接在内存和I/O设备之间传输数据,传输完成后生成中断通知CPU。

  • 特点:

    • 提高了数据传输效率,释放了CPU的处理能力。

    • 适用于大量数据传输的场景,如磁盘、网络、音视频处理等。

    • 需要额外的硬件支持(DMA控制器)。

    • 支持更高的带宽和低延迟。


上一页计算机组成原理的学习笔记(11)--CPU·其三 中断和异常多处理器相关概念下一页计算机组成原理的学习笔记(2)--数据的表示和运算·其一

最后更新于1个月前