从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

    • 网课-计算机组成原理(北大-陆俊林)

      • 概述-计算机组成原理(北大-陆俊林)
      • 第1周-计算机组成章节视频简介
      • 101-电子计算机的兴起
      • 102-冯·诺依曼结构的要点
      • 103-冯·诺依曼结构的小故事
      • 104-计算机结构的简化模型
      • 105-计算机执行指令的过程
      • 106-计算机输入和输出
      • 107-冯诺依曼结构和具体实现
      • 201-设计自己的计算机
      • 202-x86 体系结构
      • 203-x86 指令简介
      • 204-复杂的 x86 指令举例
      • 205-MIPS 体系结构
      • 206-MIPS 指令简介
      • 301-算术运算和逻辑运算
      • 302-门电路的基本原理
      • 303-寄存器的基本原理
      • 304-逻辑运算的实现
      • 305-加法和减法的实现
      • 306-加法器的优化
      • 401-乘法的运算过程
      • 402-乘法器的实现
      • 403-乘法器的优化 1
      • 404-乘法器的优化 2
      • 405-除法的运算过程
      • 406-除法器的实现
      • 407-除法器的优化
      • 501-处理器的设计步骤
      • 502-数据通路的建立
      • 503-运算指令的控制信号
      • 504-访存指令的控制信号
      • 505-分支指令的控制信号
      • 506-控制信号的集成
      • 601-流水线的基本原理
      • 602-流水线的优化
      • 603-超标量流水线
      • 604-流水线的冒险
      • 605-数据冒险的处理
      • 606-控制冒险的处理
      • 701-存储层次结构概况
      • 702-DRAM 和 SRAM
      • 703-主存的工作原理
      • 704-主存技术的发展
      • 705-高速缓存的工作原理
      • 706-高速缓存的组织结构
      • 707-存储容量的计算
      • 801-中断和异常的来源
      • 802-中断向量表的结构
      • 803-中断向量表的发展
      • 804-中断的处理过程
      • 805-内部中断分类说明
      • 806-基于中断的功能调用
      • 901-输入输出接口的基本功能
      • 902-输入输出接口的编址方式
      • 903-输入输出的控制方式
      • 904-中断控制方式
      • 905-外部中断的处理过程
      • 906-直接存储器访问方式
  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • 数据库

  • 计算机基础
  • 计算机组成原理
  • 网课-计算机组成原理(北大-陆俊林)
2023-06-13

901-输入输出接口的基本功能

# 901-输入输出接口的基本功能

计算机的核心能力就是运算, 而快速的数学运算,甚至是早期设计计算机时的唯一目标。

但是今天,计算机已经成为了我们日常生活中,密不可分的一部分。 我们平时感受更多的,可能是计算机与外界交互的能力, 因此,想要了解计算机的组成,我们就必须要知道现代计算机当中,输入输出设备到底是怎么工作的。

‍‍

‍

‍

我们先来一起回顾模型机的结构, 这个模型机由一个 CPU,一个存储器,和一个输入输出设备组成。 在系统启动后,CPU 就会从地址总线发出地址给存储器,然后从数据总线读回对应的指令编码, 并通过指令译码部件,产生相应的控制信号,完成对应的操作, 那这些操作有可能是进行运算, 也可能是读写存储器当中的某个单元,那也有可能是要进行输入输出的动作

​

‍

那我们来看一看,CPU 如果要完成一个简单的输入动作,会是怎么样的。 我们这里的输入设备是八个手动的开关, 我们假设前三个开关都拨到高电平,后五个开关拨到低电平,那这八个开关可能连接到了一个寄存器, 那这个单元当中,就保存了 1110 0000 这个数, 而且事先在系统当中,也为这个单元分配了一个地址, 那么事先就编写了一个用于输入的程序,在这个程序当中,有一条指令就是读取 1111 这个地址单元。 那么当 CPU 执行了这条指令的时候,就会在地址总线上发出这个地址,与此同时,在控制总线上发出表示当前是读操作的信号,那这个输入输出设备收到这样地址和控制信号之后,就会 从 1111 这个单元,取出对应的内容,然后把它送到数据总线上去, 而 CPU 这时会采样数据总线上的信号,得到这个数值, 然后这条指令应该是把这个数,保存到某个通用寄存器当中去, 这样后续的程序也就可以对这个数进行操作了,这就完成了一个输入的动作。

​

‍

那我们再来看一个输出的简单场景,我们现在的输出设备是 8 个小灯泡, 它也和一个 8 位的寄存器相连,并有对应的地址, 那现在 CPU 执行到某一条指令,是想点亮这 8 个灯泡当中的某几个, 那这条指令就会在地址总线上送出 1110,然后在控制总线上送出写的控制信号,与此同时,还需要在数据总线上,送出要写的数据, 这个输入输出设备,就会根据控制总线发现是一次写操作,就找到地址总线上的信号对应的单元,并将数据总线上对应的信号写进去, 于是 1110 这个单元,就被写入了 11001100 这个数, 然后这个单元的输出,就直接通过物理的连线,连接到 8 个小灯泡上,数值为 1 代表高电平,就会点亮某个灯泡,数值为 0,代表低电平,那对应的灯泡就是熄灭的状态。 这样我们就通过一条指令,完成了这几个小灯泡亮灭的控制, 从而让计算机外部的人,可以观察到输出的信息。

​

‍

‍

因此,由 CPU、存储器和输入输出设备,就构成了一个简单的计算机系统。 用于输入输出的,可以是拨码开关、LED 管,这样的的简单的设备, 也可能是比较复杂的设备,像打印机、硬盘, 那现在的计算机系统当中,输入输出设备变得越来越多,功能也非常的丰富。 这些设备的差异非常大,有些设备要求很高的数据传输率,比如说显示器, 有些设备的速度却很慢,比如键盘和鼠标, 而且有一些接口是串行的,有一些是并行的,有数字电路的接口,也有模拟电路的接口

​

‍

如此千差万别的设备,就没有办法直接和 CPU 这一个芯片进行连接, 因此我们就需要在 CPU 和这些设备之间,设置一个中转站, 这就是输入输出接口,也被称为 I/O 接口。

I/O 接口主要提供了这些功能,1 是数据缓冲, 用于解决高速的 CPU 和低速的外设之间的差距。

第 2 是提供联络信息,比如打印机什么时候能够接收数据。

第 3 是提供格式上的转换,比如模拟信号和数字信号之间的转换, 串行信号和并行信号之间的转换,不同电平之间的转换。

第 4,一个接口可能连接了多个设备,比如说有多个硬盘, 那这个 I/O 接口还需要提供设备选择的功能。

其它还有一些功能,在用到的时候再做介绍。

​

‍

‍

因此,在现代的计算机系统当中, 往往把跟输入输出相关的设备分解成两个类型,一部分是 I/O 接口, 这可能是插在计算机主板上的一块插卡,也有可能是主板上的一个芯片,它内部会有一些寄存器,CPU 可以通过系统总线,去访问 I/O 接口当中的这些寄存器, 而这个 I/O 接口芯片,还会有一些管脚,与外部的设备相连。 那这种划分的典型代表,就是显卡和显示器, 显卡是一个 I/O 接口,显示器则被称为外设,那我们要注意的是,这样的划分和冯诺依曼结构当中所定义的输入输出设备,是不能完全一一对应的, 在这里,我们描述的是现代计算机发展过程中的,一种具体的实现。

​

‍

那 I/O 接口究竟是如何用外设相连的, 我们来看一个例子,这是一种最简单的 I/O 接口, 叫做并行接口,它一边通过系统总线和 CPU 相连, 另一边可以连接数码管、拨码开关,这样简单的设备, 也可以连接打印机这样比较复杂的设备。 那这样的并行接口,一般有两种常见的实现形式,一种是采用独立的芯片,比如这个 8255A,就是一个并行接口芯片。那么早期的 I/O 接口,大多会采用这样独立芯片的形式, 而现在可以在一个芯片当中,实现多个 I/O 接口的功能。 所以这个并行接口,也可能被实现在一个多功能的芯片当中, 但不管是哪种实现形式,它总是要与这些外设进行连接。

​

‍

‍

‍

‍

‍

我们先来看看它和那些简单的外设是怎么连接的, 比如说和一个简单的输出设备,就是这个数码管,那这个并行接口的芯片,对外会有 8 根引脚, 通过主板上的连线,就可以连接到这个数码管, 每根信号线,正好连接到其中一个可以发亮的部分, 加上旁边的这个小数点,一共有 8 个,因此,这和我们刚才用模型机演示的例子一样,CPU 只要将对应的数据写到这个数据输出寄存器上,并行接口芯片就会直接将这个寄存器的内容,输出到这八根信号线上,那这个数码管上对应的部分就会亮起,从而展现出我们编程想要输出的数字

那类似的,这个并行接口芯片,还可以有 8 个引角,连接到拨码开关, 那拨码开关的状态,就会被保存在数据输入寄存器当中,等待 CPU 来读取, 这些都是非常简单的设备。

​

‍

‍

那我们再看一些稍微复杂一点的设备,比如说打印机, 那么就不能像刚才那样简单的传入数据了,除了连接刚才那 8 根输出的信号之外, 还需要有一根信号,告诉打印机,此时输出的数据,是希望打印机接收的数据, 而打印机在接收了这个数据之后,还要给出一个回答的信号, 以表示它已经完成了这个数据的接收工作, 这样才能保证,这个并行接口和打印机进行数据传输时, 既不丢失数据,也不会传输到重复的数据。

那么对于扫描仪这样的输入设备,也是类似的情况, 扫描仪在将扫描了的数据进行输入时,也需要给出一个输入准备好的信号, 那并行接口电路在采样了数据输入之后,也需要给出输入的回答信号, 因此,并行接口芯片,在连接这些比较复杂的设备时, 除了那 8 根数据信号之外,还需要有两根用于通讯联络的信号, 而这两根信号,又被称为握手信号,在数据传输中, 起着协调和联络的作用,那对于稍微复杂一些的外设, 都得采用带握手信号的数据传输的方式。

​

‍

在现代的计算机当中,这种并行接口电路,算是最简单的 I/O 接口了, 它和许多其它更为复杂的 I/O 接口,都会在集成在南桥芯片当中, 而还有少数对性能要求比较高的接口,则会采用独立的芯片,或者板卡的形式, 而在一些紧凑型的设备中,比如说平板电脑和智能手机, 这些 I/O 接口甚至会和 CPU 一起,集成在一个芯片当中。 那不管是哪种形式,这些 I/O 接口的功能都是独立存在的, 而且它们也需要各自的管脚、连线,与对应的外设相连,从而让 CPU 可以与外部进行交互。

​

‍

‍

外面的世界很精彩,但也很复杂。 我们的 CPU 虽然又超群的计算能力,然而它的交往技巧却是很贫乏, 所以我们为它找到了 I/O 接口这个好帮手

上次更新: 2024/9/29 12:08:10
806-基于中断的功能调用
902-输入输出接口的编址方式

← 806-基于中断的功能调用 902-输入输出接口的编址方式→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式