《深入浅出计算机组成原理》学习笔记 Day12

news2024/12/28 18:40:50

数据通路(上)

    • 1. 指令周期(Instruction Cycle)
    • 2. 建立数据通路
    • 3. CPU 所需要的硬件电路
    • 4. 总结
    • 参考

1. 指令周期(Instruction Cycle)

计算机每执行一条指令的过程,可以分为这几个步骤:

  1. Fetch(取得指令),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。
  2. Decode(指令译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。
  3. Execute(执行指令),也就是实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。
  4. 重复进行 1 ~ 3 的步骤。

这样的步骤,其实就是一个永不停歇的“Fetch - Decode - Execute”的循环,我们把这个循环称之为指令周期(Instruction Cycle)。
指令周期(Instruction Cycle)
在取指令的阶段,指令是放在存储器里的,实际上,通过 PC 寄存器和指令寄存器取出指令的过程,是由控制器(Control Unit)操作的。指令的解码过程,也是由控制器进行的。一旦到了执行指令阶段,无论是进行算术操作、逻辑操作的 R 型指令,还是进行数据传输、条件分支的 I 型指令,都是由算术逻辑单元(ALU)操作的,也就是由运算器处理的。不过,如果是一个简单的无条件地址跳转,那么我们可以直接在控制器里面完成,不需要用到运算器。

不同步骤在不同组件之内完成
在 CPU 里面还有两个常见的 Cycle。

  1. Machine Cycle机器周期CPU 周期。CPU 内部的操作速度很快,但是访问内存的速度却要慢很多。每一条指令都需要从内存里面加载而来,所以一般把从内存里面读取一条指令的最短时间,称为 CPU 周期。
  2. Clock Cycle时钟周期以及机器的主频。一个 CPU 周期,通常会由几个时钟周期累积起来。一个 CPU 周期的时间,就是这几个 Clock Cycle 的总和。

对于一个指令周期来说,我们取出一条指令,然后执行它,至少需要两个 CPU 周期。取出指令至少需要一个 CPU 周期,执行至少也需要一个 CPU 周期,复杂的指令则需要更多的 CPU 周期。

三个周期(Cycle)之间的关系
一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。

2. 建立数据通路

数据通路就是我们的处理器单元。其通常由两类元件组成。

第一类叫操作元件,也叫组合逻辑元件(Combinational Element),其实就是 ALU。在前面讲 ALU 的过程中可以看到,它们的功能就是在特定的输入下,根据下面的组合电路的逻辑,生成特定的输出。

第二类叫存储元件,也有叫状态元件(State Element)的。比如在计算过程中需要用到的寄存器,无论是通用寄存器还是状态寄存器,其实都是存储元件。

通过数据总线的方式,把它们连接起来,就可以完成数据的存储、处理和传输了,这就是所谓的建立数据通路了。

控制器只是机械地重复“Fetch - Decode - Execute“循环中的前两个步骤,然后把最后一个步骤,通过控制器产生的控制信号,交给 ALU 去处理。

控制器的电路特别复杂:
一方面,所有 CPU 支持的指令,都会在控制器里面,被解析成不同的输出信号。我们之前说过,现在的 Intel CPU 支持 2000 个以上的指令。这意味着,控制器输出的控制信号,至少有 2000 种不同的组合。

运算器里的 ALU 和各种组合逻辑电路,可以认为是一个固定功能的电路。控制器“翻译”出来的,就是不同的控制信号。这些控制信号,告诉 ALU 去做不同的计算。可以说正是控制器的存在,让我们可以“编程”来实现功能,能让我们的“存储程序型计算机”名副其实。

指令译码器将输入的机器码,解析成不同的操作码和操作数,然后传输给 ALU 进行计算

3. CPU 所需要的硬件电路

第一,就是 ALU。ALU 实际就是一个没有状态,根据输入计算输出结果的一个电路。

第二,需要一个能够进行状态读写的电路元件——寄存器。我们需要有一个电路,能够存储到上一次的计算结果。这个计算结果并不一定要立刻拿到电路的下游去使用,但是可以在需要的时候拿出来用。常见的能够进行状态读写的电路,就有锁存器(Latch),以及我们后面要讲的 D 触发器(Data/Delay Flip-flop)的电路。

第三,需要有一个“自动”的电路,按照固定的周期,不停地实现 PC 寄存器自增,自动地去执行“Fetch - Decode - Execute“的步骤。程序执行,并不是靠人去拨动开关来执行指令的。我们希望有一个“自动”的电路,不停地去一条条执行指令。

看似写了各种复杂的高级程序进行各种函数调用、条件跳转。其实只是修改 PC 寄存器里面的地址。PC 寄存器里面的地址一修改,计算机就可以加载一条指令新指令,往下运行。实际上,PC 寄存器还有一个名字,就叫作程序计数器。顾名思义,就是随着时间变化,不断去数数。数的数字变大了,就去执行一条新指令。所以,我们需要的就是一个自动数数的电路。

第四,需要有一个“译码”的电路。无论是对于指令进行 decode,还是对于拿到的内存地址去获取对应的数据或者指令,我们都需要通过一个电路找到对应的数据。这个对应的自然就是“译码器”的电路了。

最终,把这四类电路,通过各种方式组合在一起,就能组成 CPU。

4. 总结

CPU 需要这样的 4 类电路:ALU 这样的组合逻辑电路、用来存储数据的锁存器和 D 触发器电路、用来实现 PC 寄存器的计数器电路,以及用来解码和寻址的译码器电路。

参考

极客时间《深入浅出计算机组成原理》:http://gk.link/a/11UMi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL三大日志

MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log:是Innodb存储引擎生…

【汇编】深入浅出地讲解使用六条汇编指令解决大部分汇编代码

开发环境说明 本文采用的IDE为keil5,核心板为STM32F103ZE。 在keil中添加以下两条语句即可生成汇编代码: 在上图界面中添加下述两句代码即可生成汇编代码:fromelf --bin --outputtest.bin Objects\test.axffromelf --text -a -c --outputtest…

使用Facebook分析跟踪SEO进展

Facebook是一个强大的社交平台,在这里你可以获取关于你的业务或客户的各种信息。它为你提供了一个巨大的渠道来展示你在过去一年中对行业或公司做出的贡献,以及你如何改进和优化我们所做的事情。如果不知道如何利用 Facebook来获得更多关于 SEO工作的信息…

高级数据结构:线段树入门(c++实现 + 详解)

文章目录线段树概念区间最值问题辅助函数创建线段树查询更新懒惰修改(查询)问题tag标记设计改进的更新函数关于本节的全部源代码线段树概念 线段树是一种高级数据结构,与树状数组一样,被用来处理区间查询,修改问题&am…

DDOS渗透与攻防(一)之拒绝服务攻击概念介绍

DDOS渗透与攻防 前言 DOS(Denial of Service,拒绝服务攻击),它的原理很简单,就是用我们手里的机器去给服务器发请求,如果我们手头的服务器各方面性能都比服务器的主机的性能好,那么当我们发送大量请求给服务器&#…

Day871.行锁 -MySQL实战

行锁 Hi,我是阿昌,今天学习记录的是关于行锁的内容。 MySQL 的 行锁 是在引擎层由各个引擎自己实现的。 但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。 不支持行锁意味着并发控制只能使用表锁,对于这种引擎的…

普通话学习

一、认识韵母是有四个声调的发错的字和音总结R:日、热、肉L:漏、乐参考:https://zhuanlan.zhihu.com/p/34571271身体(shen-1)森(sen-1) 生日(sheng-1)琴(qin-…

k8s对接smb/cifs存储

之前文章提到,k8s官方是支持nfs存储的,那么在windows常见的文件共享协议是否也支持呢。答案是肯定的。不过支持的方式是通过CSI接口进行支持的。官方提供的项目是csi-driver-smb官网:https://github.com/kubernetes-csi/csi-driver-smb安装cu…

《MFC编程》:MFC程序的分类

《MFC编程》:MFC程序的分类《MFC编程》:MFC程序的分类MFC的控制台程序MFC的库程序使用MFC库制作自己的静态库程序使用MFC库制作自己的动态库程序使用MFC库制作自己的拓展库程序MFC的窗口程序单文档视图架构程序多文档视图架构程序对话框架构程序《MFC编程…

Windows server——部署DNS服务(2)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.配置DNS服务 1.安装步骤教程 (1)安装必要条件 &a…

【链表】链表内指定区间反转

BM2链表内指定区间反转 描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。 例如: 给出的链表为1→2→3→4→5→NULL, m2,n4m2,n4, 返回1→4→3→2→5→NULL. 数据范围&#xf…

初识 Canvas(使用 Canvas 绘制直线图形)

初识 Canvas(使用 Canvas 绘制直线图形)参考描述CanvasCanvas 与 SVGCanvas 元素替补元素使用检测绘制直线图形直线同时绘制多条直线指定起点首尾相接多彩的直线矩形描边矩形填充矩形结合体清除矩形区域多边形参考 描述 Canvas 你可以使用 JavaScript…

3 梯度下降算法

文章目录问题方法穷举法分治法梯度下降算法梯度梯度下降算法课程代码随机梯度下降算法批量梯度下降(mini-batch)课程来源: 链接其他觉得别人总结的比自己好,采用之的: 链接以及 BirandaのBlog!问题方法 穷…

飞速的网格【Steema】:TeeGrid for .NET 2023.1.23 Crack

TeeGrid for .NET 的数据网格控件为您的 Visual Studio 项目提供了一个非常快速的网格。 快速浏览 功能齐全的数据网格控件 适用于 WinForms、ASP.NET Core MVC 的易于使用的数据网格 TeeGrid for .NET 是一个原生的 c# 网格控件,目前可用于 WinForms 项目和 NET …

优先级队列(堆)

1.优先级队列1.1概念前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但是有些情况下,操作的数据可能带有优先级时,可能需要优先级高的元素先入队列,该场景中,使用队列显然不合适…

7、数据类型转换

目录 一、隐式类型转换 二、显示类型转换 类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将String类型的数据“457”转换为数值型,也可以将任意类型的数据转换为String类型。 一、隐式类型转换 从低级类型向高级类型的转换&#xf…

一起自学SLAM算法:10.1 RTABMAP算法

连载文章,长期更新,欢迎关注: 同前面介绍过的大多数算法一样,RTABMAP也采用基于优化的方法来求解SLAM问题,系统框架同样遵循前端里程计、后端优化和闭环检测的三段式范式。这里重点讨论RTABMAP两大亮点,一个…

python实现问卷星自动填写(可以跳过智能验证)

最近有一个社会实践需要做问卷调查,突发奇想搞一个自动化脚本,省事省米 1 下载依赖selenium selenium是一款网页爬虫重要的工具。 2 安装chrome驱动 这里需要准备chrome浏览器以及对应的驱动。需要注意的是驱动的版本需要和chrome保持一致。 chrome…

Mybatis框架介绍及使用

文章目录1. 概述1.1什么是框架1.2 Mybatis是什么1.3 Mybatis流程分析2. 参数的使用2.1 保存时获取插入id2.2 #{}与${}的区别2.3 parameterType 的使用2.4 SqlMapConfig.xml 中配置的内容3. 动态SQL3.1 <if>标签3.2 <where>标签3.3 <foreach > 标签3.4 抽取重…

ipv6内网穿透,有ipv6地址外网无法访问

问题描述 光猫已经开启ipv6&#xff0c;并且电脑/服务器已经有ipv6地址&#xff0c;只能通过ipv6局域网访问&#xff0c;外网/手机流量访问设备 原因分析&#xff1a; 光猫没有关闭防火墙路由器入站防护 解决方案&#xff1a; 1.光猫没有关闭防火墙 这里以中国移动的光猫为…