从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

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

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

    • Spring基础
  • 主流框架

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

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

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

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

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

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

    • Spring基础
  • 主流框架

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

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

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

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 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

  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

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

106-计算机输入和输出

# 106-计算机输入和输出

如果无法与外界进行联系,计算机的 CPU,存储器再强大也没有任何的用处。 因此我们需要在我们的模型机上加上输入与输出,这才能构成一个完整的计算机模型。

‍‍ ‍ 这就是冯·诺依曼计算机的五大组成部分 分别是运算器、控制器、存储器、输入设备和输出设备。 现在我们就主要来介绍输入设备和输出设备。 根据冯诺依曼结构的要求,计算机要执行 的程序首先需要通过输入设备传送到存储器中 那么这个过程是如何完成的呢?

就让我们来看一看冯诺依曼这个时代所用的计算机。 当时编写程序并不像我们现在这样方便 ,程序员需要在长长的纸带上打上小孔 ,若干个小孔就代表一条指令,那么将这样穿孔的纸带送入计算机后 计算机可以通过有孔或者没孔的区别转换成 0 和 1 的二进制信息, 从而识别出程序员所表达的指令。经过运算以后,计算机将通过电传打字机将输出的结果打印在纸带上。 这样人们就可以通过观察,分析纸带上的穿孔情况来判断输出的结果。那这样的计算机的输入和输出,与冯诺依曼结构又是如何对应呢?

​ ‍

我们先来想,这个穿孔纸带应该对应着什么,是对应着输入设备吗? 其实纸带上的信息还是要通过特定设备才能被识别。 所以穿孔纸带应该是作为输入设备的来源。其实在冯诺依曼结构中,对此也进行了规定。 除了输入设备 I,输出设备 O ,冯诺依曼结构中还规定了外部的记录介质,称为 R ,实际上穿孔纸带就是这种外部记录介质。 它可以静态的存储计算机所需的信息。 不会因为计算机断电而丢失。

那好,刚才提到了电传打字机。有属于哪个类别呢? 其实电传打字机应该属于输出设备的一种。 电传打字机会将计算机的运行结果打印到纸带上 所以电传打印机输出的纸张也可以认为是外部记录介质 R。 除了纸张,还可以用带磁性的材料 存储信息。类似于我们现在使用的硬盘。 ‍ 那么硬盘应该属于输入设备、输出设备 还是外部记录介质? 首先我们看硬盘是可读又可写的。所以我们至少应该是这么连接的 而硬盘中的信息在断电之后是不会丢失的 ,所以硬盘也具有外部记录介质 R 的特性。 所以来说严格,硬盘里记录信息的磁片才是真正的外部记录介质。 而硬盘当中还会有其他的控制芯片, 可以认为是输入或者输出设备的一部分。 在通常情况下我们没有必要划分的那么苛刻 ,可以认为硬盘就是属于外部记录介质 R 这种类型。

​

那么现在的计算机当中 很多设备都会既有输入的功能又有输出的功能。 所以通常我们会这么来画这个结构图 将输入设备和输出设备化成一个部件,既有输入的功能又有输出的功能。 ‍ 现在,我们就来看 如何在我们的模型机上添加这样一个输入输出设备。 如果直接考虑硬盘这样的设备,就太过复杂了。 我们希望现在模型机上添加一个简单的输入输出设备。 说到简单的设备,我们先来看一个小故事。 这是爱德华·罗伯茨, 当他 60 年代从军队退役之后,开了一个小公司, 制造和销售台式的计算器。 但是后来由于德州仪器这样的大公司进军计算机的市场,采用了 低价销售的策略,罗伯茨这样的小公司自然无法抵抗。很快就到了破产的边缘。 为了挽救这样的局面,罗伯茨也苦苦思索了很多办法。其中一个办法就是设计制造 面向个人的计算机。虽然但是计算机已经开始小型化了, 但是那是,所为小型计算机的体积仍然很大。不是个人能够轻易搬动的。 而且动格上万美元的价格,更不是个人所能承受的。 而大众电子杂志的编辑跟罗伯茨说 如果你能做出 400 美元以下的计算机,我就在杂志封面上给你做推荐。

后来罗伯茨真的造出了这样的计算机,那就是牛郎星 8800 。它内部主要有两块集成电路:一是 intel8080 微处理器 ,二是一块 256 字节的存储器。

​ ‍

那么他在面板上提供了简单的输入输出 靠手来上下拨动一些开关进行编程输入 计算机在经过运算之后,会将计算的结果通过 这些小灯泡进行显示。虽然构造简单, 但这确实是一台设计精巧,而且有实用价值的计算机。 更重要的是它价格非常便宜。真的做到了 400 美元以下。 于是,大众电子杂志就在 1975 年 1 月 真的为他做了封面的推荐。 此后,订单像雪片一样地飞来。挽救了罗伯茨的公司。

​

当时,很多电子计算机的爱好者和团体都争相采购 牛郎星 8800 型计算机以进行分析研究。 其中就有乔布斯和他的搭档沃兹尼亚克。 他们一方面认真学习了这台计算机精巧的内部结构, 另一方面,他们也对如此简陋的输入输出感到非常不满意。 在这样的影响下,同一年,他们就很快设计完成了自己的产品。 就是苹果 I 型个人计算机。这台计算机有键盘的输入 并且可以连接电视机作为显示器输出。这也是苹果公司的第一个产品。

​ ‍

那好,我们回来看如何在模型机上添加输入输出设备。 我们不需要那么复杂的输入输出。 现在,我们只想添加一个类似于牛郎星 8800 型计算机的输入和输出 也就是手动的开关和小灯泡的显示。 我们可以设想有一个类似于存储器结构的输入输出芯片。它内部有两个单元,每个单元都有自己的地址。我们这里设定的是 1110 和 1111 这两个地址。 他们和存储器里面的地址都不相同。因此可以相互区分。 那这个输入输出如何与计算机的其他部分相连呢? 我们知道 CPU 是通过控制总线,地址总线和数据总线与存储器相连的。 现在我们就来对此做一个简单的改造。 将控制总线分别连接到存储器和输入输出芯片的控制逻辑,地址总线也同样分别连到这两个部件。数据总线也是如此。

然后我们将输入输出设备中其中一个单元,连接到手动的开关,这个单元中有 8 个比特, 每个比特连接一个开关。 当开关拨动到上方时,对应的位就会被设置为 1。开关拨动到下方时, 对应的位就会被设置为 0。另外一个存储单元接到 8 个小灯泡, 当这个单元中的比特为高电频时,对应的小灯泡就会亮起。 如果这个比特是低电频时,对应的小灯泡就会熄灭。

‍

​

那现在我们就有一个非常简单的输入输出。 那这个输入输出在计算机上是如何工作的呢? 我们通过一个简单的输入的场景来进行学习。 我们假设这时候 CPU 和存储器已经开始工作了。 其中一条指令就是要读取这 8 个手动开关的状态。 假设现在 8 个手动开关的状态 是前三个开关被拨到高位,后五个开关被拨到低位 那地址为 1111 这个单元中所保存的 2 进制信息就是这样的。 那 CPU 如何能读取到这个输入信息呢? 我们首先来看地址总线。CPU 会将地址发送到地址总线,发的地址是 1111,那么在总线上会有一些简单的电路进行地址的识别, 可以发现这个地址应该发到输入输出部件,而不是存储器。

​

与此同时,我们来看控制总线。 CPU 会发出读的信号, 从而告知输入输出设备目前是要进行一个读操作, 那输入输出设备的控制逻辑和地址译码器 就会从地址为 1111 的单元中读出相关的信息, 送到数据总线上。 数据总线会将这个数据最终送回到 CPU 中, 这样就完成了输入信息的读取工作。

​

此后,CPU 可以对这个输入的数据 进行运算,或者根据这个数据调整后面的执行的行为,也可以把这个数暂时保存到存储器中以备后来的使用。 那这样就是一个输入的简单场景。 ‍ 然后我们再来看一个输出的简单场景。 既然是输出,我们就要给出输出单元对应的地址, 在这里是 1110,与刚才一样, 地址总线会将这个地址传送到输入输出设备, 同时,控制总线上回给出写的控制信号, 然后在数据总线上, 会给出我们想输出的数据, 这里设为 1100 1100. 然后输入输出设备就会根据来自总线的信息判断出要向地址为 1110 的单元写入数据 1100,1100, 此后就可以完成写入的操作。

​ ‍

当写入操作完成后,对应的小灯泡就接收到了 高低不同的电压,我们就会发现 1 所对应的灯泡亮起, 0 所对应的灯泡熄灭。这就是一个输出的简单场景。 这样我们就将 CPU,存储器 输入输出设备通过系统总线连接了起来。 但仅仅如此肯定是不够的。我们还会想增加更多的输入输出设备。 比如说打印机,比如说 硬盘,有了这些其实就很像早期计算机的构造。 计算机作为一个整体已经可以开始运行了。 当然我们还可以通过网络将计算机内部的信息 与其他设备或其他计算机进行交互, 我们还可以增加更多的输入输出设备,进行更为丰富的人机交互, 现在看到的这些就是在个人计算机中常见的输入输出设备了。 早期的个人计算机中几乎每一个设备都需要通过 对应的输入输出芯片或者板卡进行连接,例如我们会需要单独的网卡, 单独的声卡等等。

在现在的个人计算机当中, 大多数的输入输出设备的控制芯片都会集中在 主板上的南桥芯片中,例如我们刚才提到的 这些设备。 那么对于一些比较复杂的输入输出的需求, 比如高性能的显示,还是需要独立的板卡与外部的设备进行相连。 这就是以个人计算机为例所展示的输入输出设备相关的情况。

​

运算器,控制器, 存储器再加上输入和输出, 我们通过模型机的构建已经掌握了冯诺依曼结构的基本原理。 但是这个基本原理和真实的计算机之间是否能够一一对应呢? 我们下一节来探讨这个问题。 ‍

上次更新: 2025/5/17 12:26:09
105-计算机执行指令的过程
107-冯诺依曼结构和具体实现

← 105-计算机执行指令的过程 107-冯诺依曼结构和具体实现→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式