从 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

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,存储器 输入输出设备通过系统总线连接了起来。 但仅仅如此肯定是不够的。我们还会想增加更多的输入输出设备。 比如说打印机,比如说 硬盘,有了这些其实就很像早期计算机的构造。 计算机作为一个整体已经可以开始运行了。 当然我们还可以通过网络将计算机内部的信息 与其他设备或其他计算机进行交互, 我们还可以增加更多的输入输出设备,进行更为丰富的人机交互, 现在看到的这些就是在个人计算机中常见的输入输出设备了。 早期的个人计算机中几乎每一个设备都需要通过 对应的输入输出芯片或者板卡进行连接,例如我们会需要单独的网卡, 单独的声卡等等。

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

​

‍

‍

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

‍

上次更新: 2024/9/29 12:08:10
105-计算机执行指令的过程
107-冯诺依曼结构和具体实现

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

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