从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • 计算机历史

  • 数字电路

  • 计算机组成原理

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

      • 概述-计算机组成原理(北大-陆俊林)
      • 第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-直接存储器访问方式
      • 网课-计算机组成原理(北大-陆俊林)
    • 计算机组成原理
  • 汇编语言

  • C语言

  • 数据结构

  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 数据库

  • 计算机小知识

  • 编译原理

  • 名人堂

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

104-计算机结构的简化模型

# 104-计算机结构的简化模型

为了掌握计算机的内部结构, 我们要先来构建一个计算机的简化模型。 这个模型能够体现计算机内部的关键之处,又足够的简单,便于理解。   ‍

这个冯诺依曼结构的餐馆,我们已经非常熟悉了。 我们可以根据这个餐馆的结构,几乎一一对应的来构造出我们的计算机结构的模型。这个计算机结构的简化模型我们又称之为模型机。 目前包含了CPU和存储器两大部件,中间通过系统总线相连。 系统总线又被细化为控制总线、地址总线和数据总线三个部分。 CPU和存储器内部各有相应的结构。 我们现在就来逐个部件的说明这个模型机是如何构建的。

​

‍

首先来看存储器。 在设计计算机时要确定存储器的编制方式。 如果存储器按字节编制,那 每一个存储单元就能存放八位的二进制数。 而且每个存储单元的地址是唯一的。 CPU要想访问某个存储单元,必须要通过地址总线给出相应的地址, 因此如果地址总线的宽度为N,则CPU能管理的存储单元数最多为2的N次方个, 假设地址总线的宽度为32位, 那么CPU能管理的存储单元数就是2的32次方,就是4G。

CPU发来的地址 将会存放在存储器地址寄存器, 简称为MAR。 那CPU要读写的数据则会通过数据总线 传送,数据总线的宽度一般为存储单元位宽的整数倍, 对应的数据则会放在 一个被称为存储器数据寄存器,简称为MDR的结构中,最后 控制总线与存储器当中的控制逻辑相连,用于接受来自于CPU的读写信号 或者向CPU反馈传输已经完成的信号。

​

‍

我们再来看模型机的CPU. 首先来看其中的控制器。 控制器是用于控制计算机各个部件完成取指令分析指令执行指令等功能。 在我们的模型机中主要包含如下的部分,我们逐个来进行分析。

首先是指令寄存器, 简称为IR。用于存放正在执行或者即将执行的指令。 这个指令是从存储器中取来的。 那么暂时存放在这个寄存器里头。

程序计数器PC ,用于存放下一条指令的存储单元地址, 我们还记得在餐馆那个例子中厨师要去取下一张任务单 的时候就会检查他下一张任务单的位置, 那么其实对应的就是这个计算机的功能。 那么在取完下一条指令之后呢这个程序计数器需要自动递增以指向接下来那一条指令的地址, 那么CPU当中也有访存相关的寄存器, 访问存储器的地址,存放在MAR寄存器中, 用于写到存储器或者从存储器读回的数据在MDR寄存器当中。

​

‍

‍

指令译码部件,则是用于对IR也就是指令寄存器当中的指令进行译码, 以确定其中存放的是哪一条指令。当确定了是哪条指令之后, 控制电路就可以产生对应的控制信号, 这些控制信号在持续脉冲的同步下去控制CPU当中各个控制部件的动作。

​

‍

‍

‍

‍

然后我们来看模型机的运算器。 运算器顾名思义是用来完成运算的。 运算主要可分为算术运算和逻辑运算, 常见最基本的算术运算就是加法和减法。稍微复杂一些还有乘法和除法等等。 那常见的逻辑运算包括非、与、或等等。

​

‍

运算器主要有如下的部件构成。 其核心部分是ALU,也就是 算数逻辑单元的简称。它用于完成算数运算和逻辑运算, 我们从图中可以看出这个ALU有两个输入,一个输出,比如我们要完成一个 加法,那么加法的两个操作数也就是被加数和加数分别从A端口和B端口 输入,经过ALU计算后,将加法的运算结果送到输出端口

为了便于描述,我们将ALU的输入和输出 分别设置了暂时保存数据用的计时器。 分别记为X, Y和Z。 也就说ALU将会对X和Y所保存的数据 进行控制器所指定的运算,并将结果 输送到Z, 此外,ALU在运算时 还会产生相应的状态,比如这个运算的结果是否产生进位, 是否会有溢出等等。那这样的运算结果的状态会保存在F这个寄存器, F是标志Flag的简称。

那运算器所要运算的数据 实际是从存储器来的。但是不能每一次运算都去存储器取数。 这样的话效率就太低了。 所以有一些常用的数需要提前从存储器中取出来。那我们就需要在运算器中有临时存放这些数的部件。 这就是通用寄存器。在我们的模型机中设置了N个通用寄存器, 其编号从R0 一直到RN-1, 通用寄存器当中的数据可以来自于存储器, 也可以来自于其他通用寄存器。或者来自于ALU的输出,也就说我们可以在两个不同的通用寄存器之间传递数据, 也可以在ALU和通用寄存器之间传递数据。

​

‍

‍

‍

在通用寄存器和ALU 以及刚才提到的控制器当中的若干寄存器之间要传递数据的话, 就必须要经过CPU的内部总线。 内部总线是用于在CPU内部跟各个部件之间传递数据的装置。 我们举一个例子。例如我们需要将数据从R0传送到X, 也就是可能为下一次运算进行准备,那么 数据会通过内部总线从R0 传到了X,那么所谓这个传送的过程指的是什么呢? 在之后我们具体讲电路实现的时候会为大家详细解释

在这里为了便于理解,我先为大家打一个比方, 如果我们把内部总线看作是输水的水管的话,那我们可以把这些通用寄存器等部件看作是蓄水的水池, 比如在这个例子中我们要从R0传送数据到X, R0和X都可以看做两个蓄水池, 它们分别有自己的进水口和出水口,那么R0我们看它有个双向 的箭头,证明它既可以输入又可以输出,所以它既有进水口又有出水口。

而X就一个单向的箭头,说明它只有进水口没有出水口, 因为我们知道X和Y作为ALU的数据输入的临时寄存器的, 所以它不需要输出。

从R0传送数据到X, 我们可以理解成在控制电路的控制下, 将R0的出水管打开, 再将X的入水管打开,与此同时将其他所有部件的出水管和入水管都关闭, 这样R0里面保存的数据就像水流一样,经过了内部总线会留到了X当中, 那么经过一段时间之后,X中所保存的数就跟R0当中的数一样了。 这个我们就可以用来形象的理解,从R0传送输入到X, 这就是内部总线的作用。

​

‍

那这样, 我们这个计算机结构的简化模型就构造完成了。现在我们已经构建完成了这个模型机的核心部分, 想要了解这个静态的结构,一个有效的方法是观察其动态的运行过程。 下一节我们就来一起分析模型机是如何运行的。

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/6/13 17:13:13
103-冯·诺依曼结构的小故事
105-计算机执行指令的过程

← 103-冯·诺依曼结构的小故事 105-计算机执行指令的过程→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式