【计算机科学速成课】笔记二

笔记一

文章目录

      • 7.CPU
        • 阶段一:取指令阶段
        • 阶段二:解码阶段
        • 阶段三:执行阶段
      • 8.指令和程序
      • 9.高级CPU设计——流水线与缓存

7.CPU

CPU也叫中央处理器,下面我们要用ALU(输入二进制,会执行计算)、两种内存(寄存器(很小一块内存,能存一个值)、RAM(大量内存,能在不同地址存大量数字))来做一个CPU——电脑的心脏。
在这里插入图片描述

计算机中上的任何东西都是程序,程序有指令和数据组成。指示计算机要做什么。
我们采用微体系架构的方式(注重功能,适当抽象)来讲解之——
CPU既然是执行指令的,下面是CPU的指令表
我们给所有的指令分配一个ID,我们用前四位存操作码,后四位存地址或寄存器,指示数据来自哪里
在这里插入图片描述

我们还需要两个寄存器来完成CPU,指令地址寄存器(用来追踪程序运行到了哪里,即里面存当前指令的内存地址)、指令寄存器(用来存当前指令)。
下面是目前的大概图示:
在这里插入图片描述

为了举例,我们在RAM里面存了一个程序,我们会将其运行并一步一步讲解:
CPU运行有三个阶段——

阶段一:取指令阶段

初始所有寄存器里面的值均为0。指令地址寄存器连接到RAM,因为里面地址为0,所以会返回RAM中地址为0处的数据,将00101110复制到指令寄存器中。现在指令拿到了,必须分析是什么指令才能进行执行。

在这里插入图片描述

阶段二:解码阶段

首先检查指令前四位值,是0010,对应于指令表中的LOAD_A,即将值加载到寄存器A中,后四位是RAM的地址,1110,即十进制中的14,查看RAM地址为14处的数据为00000011,则该数据会加载进寄存器A中
在这里插入图片描述
在这里插入图片描述
上面这是解码器,用来判断指令是否是LOAD_A的。

阶段三:执行阶段

现在既然知道是什么指令了,就可以开始执行了。上面的检查是否是指令LOAD_A的电路可以打开RAM的“允许读取线”,把地址14传过去进行读取。地址14里面的值是00000011,因为只是加载进寄存器A中,所以会将所有寄存器用线连接起来,只打开寄存器A,将00000011存入即可。如下图。
之后将指令地址寄存器加1,执行阶段到此结束,进行下一次读取指令并执行。
在这里插入图片描述

上面只是LOAD_A指令的执行过程,不同指令有不同逻辑解码电路,这些逻辑解码电路会配置CPU内的组件来执行相应操作。我们不妨将解码电路封装成一个单元(又一层抽象),称为控制单元(control unit)——
在这里插入图片描述

控制单元就像管弦乐队的指挥一样,“指挥”CPU的所有组件。“取指令”——>“解码”——>"执行"完成之后,又再次开始该过程。直至程序结束。

当程序执行指令到地址2处时,指令为1000 0100,对应指令为将两个寄存器的值相加。后面的地址01代表寄存器B,地址00代表寄存器A,因此该指令代表将寄存器B与A相加后存到寄存器A中。
在这里插入图片描述
为了执行这个指令,我们的控制单元要整合ALU,进行运算。这里控制单元先用自己的寄存器保存结果,然后将ALU关闭后,再将结果存进寄存器A中。
在这里插入图片描述

最后一个指令将寄存器A中的值放入RAM中。这就是我们的第一个电脑程序!从RAM中加载两数后相加后存入RAM中。仅仅用了4条指令,地址从0~3.

现实中,处理器中会有一个“时钟”来控制上面的**“取指令”——>“解码”——>"执行"节奏**与速率。
时钟以精确的间隔触发电信号,控制单元会用这个信号,推进CPU的内部操作。确保一切顺利进行。

CPU执行**“取指令”——>“解码”——>"执行"的速度叫做“时钟速度”**,单位是HZ。通常也会有超频、降频来增加、降低时钟速度的。

在这里插入图片描述

我们将上面的CPU Chip抽象后封装成独立元件,叫做CPU芯片。而RAM是独立的组件,通过DATA,ADDRESS INPUT、READ ENABLE、WRITE ENABLE线与CPU相互通信。
我们目前做的只是简化版CPU,下一节,我们将给CPU拓展更多指令!

8.指令和程序

上一章我们用ALU、寄存器、RAM做了个简单的中央处理单元——CPU,这节课我们来给上节课做的CPU一些指令运行,即——编程
CPU之所以强大,就是因为它是可编程的。如果写入不同指令,就会执行不同任务。CPU是硬件,它可以被软件控制

我们知道RAM里面的指令前4位是指令表,后4为是地址,不如直接将二进制码换成汇编语言,更加方便易理解,这样就提升了一个抽象了。
在这里插入图片描述
在这里插入图片描述

CPU还有很多指令,如下,数据和指令是存在一个内存条里面的。HLT是程序结束指令,通常在数据与指令内存之间。
在这里插入图片描述
JUMP指令无非就是覆盖掉指令地址寄存器里面存的值。使得CPU读取指定地址处的指令。
如下原本是会继续读取地址为5的指令的,但是JUMP 2代表重新读取地址为2的值了。注意这里是一个永久循环,永远不会到达HALT,程序永远不会结束。这就是永久循环的原理。
在这里插入图片描述
So, our hypothetical CPU is very basic – all of its instructions are 8 bits long,
我们这里假设的 CPU 很基础,所有指令都是 8 位,

with the opcode occupying only the first four bits.
操作码只占了前面 4 位

So even if we used every combination of 4 bits, our CPU would only be able to support,a maximum of 16 different instructions.
即便用尽 4 位,也只能代表 16 个指令

On top of that, several of our instructions used the last 4 bits to specify a memory location.
而且我们有几条指令,是用后 4 位来指定内存地址

But again, 4 bits can only encode 16 different values,
因为 4 位最多只能表示 16 个值,

meaning we can address a maximum of 16 memory locations - that’s not a lot to work with.
所以我们只能操作 16 个地址,这可不多.

For example, we couldn’t even JUMP to location 17,
我们甚至不能 JUMP 17

because we literally can’t fit the number 17 into 4 bits.
因为 4 位二进制无法表示数字 17

For this reason, real, modern CPUs use two strategies.
因此,真正的现代 CPU 用两种策略

The most straightforward approach is just to have bigger instructions, with more bits,like 32 or 64 bits.
最直接的方法是用更多位来代表指令,比如 32 位或 64 位

This is called the instruction length.
这叫 指令长度法

Unsurprisingly.
毫不意外

The second approach is to use variable length instructions.
第二个策略是 “可变指令长度法”

For example, imagine a CPU that uses 8 bit opcodes.
举个例子,比如某个 CPU 用 8 位长度的操作码

When the CPU sees an instruction that needs no extra values, like the HALT instruction,
如果看到 HALT 指令,HALT 不需要额外数据

it can just execute it immediately.
那么会马上执行.

However, if it sees something like a JUMP instruction, it knows it must also fetch
如果看到 JUMP,它得知道位置值

the address to jump to, which is saved immediately behind the JUMP instruction in memory.
这个值在 JUMP 的后面

This is called, logically enough, an Immediate Value.
这叫 “立即值

In such processor designs, instructions can be any number of bytes long,
这样设计,指令可以是任意长度

which makes the fetch cycle of the CPU a tad more complicated.
但会让读取阶段复杂一点点

Now, our example CPU and instruction set is hypothetical,
要说明的是,我们拿来举例的 CPU 和指令集都是假设的,

designed to illustrate key working principles.
是为了展示核心原理

So I want to leave you with a real CPU example.
所以我们来看个真的 CPU 例子.

In 1971, Intel released the 4004 processor.
1971年,英特尔发布了 4004 处理器.

It was the first CPU put all into a single chip
这是第一次把 CPU 做成一个芯片 , 给后来的英特尔处理器打下了基础

在这里插入图片描述

It supported 46 instructions, shown here.
它支持 46 个指令

Which was enough to build an entire working computer.
足够做一台能用的电脑

And it used many of the instructions we’ve talked about like JUMP ADD SUBTRACT and LOAD.
它用了很多我们说过的指令,比如 JUMP ADD SUB LOAD

It also uses 8-bit immediate values, like we just talked about, for things like JUMP,in order to address more memory.
它也用 8 位的"立即值"来执行 JUMP, 以表示更多内存地址.
在这里插入图片描述
And this huge growth in instruction set size is due in large part to extra bells and whistles
指令越来越多,是因为给 CPU 设计了越来越多功能

that have been added to processor designs overtime, which we’ll talk about next episode.
下集我们会讲

9.高级CPU设计——流水线与缓存

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

倪海厦(二)研究任何学问(东西)批判去看

大家好今天我们接着研究,倪海厦是如何思考问题的: 研究任何学问(东西),批判去看,假设--验证--结果。以果决其行!!!放空自己。学而后思,思学并进。 今天这一篇呢&#xf…

医疗器械软件相关的追溯关系

在医疗器械软件开发过程中,追溯性是确保产品质量和安全性的关键步骤之一。追溯性要求各个阶段的需求、设计、实现和测试之间能够清晰、连贯地关联起来,以便在整个开发周期中进行有效的跟踪和管理。IEC62304中明确输出的内容要有对应的追溯性,…

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术,它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间,而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处: 内…

docker系列8:容器卷挂载(上)

目录 传送门 从安装redis说起 什么是容器卷挂载 操作系统的挂载 日志文件一般是"首恶元凶" 挂载命令 容器卷挂载 卷挂载命令 启动时挂载 查看挂载卷信息 容器卷管理 查看卷列表 创建容器卷 具名挂载与匿名挂载 具名挂载 传送门 docker系列1&#xff…

了解并学会使用反射

目录 一、反射的应用场景(简单了解) 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一:forName(): 方式二:封装类.Class: …

天风证券:水电燃气价格上涨,能推动通胀么?

水电燃气价格上涨对PPI的影响更大,6%的平均价格上涨能够拉动CPI和PPI分别上涨0.3个和0.7个百分点。 近期,国内多地上调水电燃气价格 燃气价格上涨主要针对居民端。目前燃气价格实行居民用气价格限价波动非民用气市场化定价的双轨制,这使得居…

【Linux】目录和文件相关的命令,补充:centos7系统目录结构

【Linux】Linux操作系统的设计理念之一就是“一切皆文件”(Everything is a file),即将设备、文件等都当作“文件”处理。 “文件”主要类型有:目录(即文件夹),链接文档(即快捷方式…

【Linux线程】

目录 线程是操作系统的一个执行流并发编程进程并发的优劣基于线程的并发编程Linux当中的线程 线程的创建使用pthread_createpthread_join对线程进行等待pthread_exit和pthread_cancelpthread_detach线程分离注意事项 原生线程库,详谈Linux的线程pthread库管理线程 线…

云端部署Stirling PDF:构建个人App的API调用指南(附Python源码)

今天发现一个Github的开源项目,Stirling PDF,项目地址如下:https://gitcode.com/Stirling-Tools/Stirling-PDFhttps://gitcode.com/Stirling-Tools/Stirling-PDF?utm_sourceartical_gitcode目前CSDN上已经有好几个up主都介绍了这个项目&…

cocos=》 预乘、混合(黑边、白色)

简介 预乘,指的是在数据提交给GPU之前,就对纹理的RGB分量与alpha值进行计算。 预乘计算 结果颜色 源颜色值 目标颜色值 * (1 - 源 alpha 值) result source.RGB dest.RGB * (1 - source.A); 对应的颜色混合函数设置为 gl.blendFunc(gl.ONE, gl.…

英语复习之英语形近词总结

最近在练习英语口语,有很好的练习场景,和数字人对练,还能纠错,不过开口的基础需要单词量的支撑以及语法的熟悉,因为英语的语法太简单了,没啥需要复习和注意的,音标发音的问题也可以后期再纠正&a…

Angular进阶-NVM管理Node.js实现不同版本Angular环境切换

一、NVM介绍 1. NVM简介 Node Version Manager(NVM)是一个用于管理多个Node.js版本的工具。它允许用户在同一台机器上安装和使用多个Node.js版本,非常适合需要同时进行多个项目的开发者。NVM是开源的,支持MacOS、Windows和Linux…

wechat_OCR项目打包以及如何使用

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

医学图像处理:nii格式转换(3D切片为2D)

目录 NIFTI文件结构 读取NII文件 ITK-SNAP安装 使用方法 NII转PNG NIFTI文件结构 NIFTI 格式,是一种用于存储和交换医学成像数据的文件格式,特别适用于神经影像学领域。NIFTI文件通常有两个扩展名:.nii(用于图像数据&#xf…

42.WEB渗透测试-信息收集-域名、指纹收集(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:41.WEB渗透测试-信息收集-域名、指纹收集(3) 关于单域名收集内容…

基于JSP的酒店客房管理系统(二)

目录 第二章 相关技术介绍 2.1 Jsp的简介 2.2 sql server 2005 的简介 第三章 系统的分析与设计 3.1 系统需求分析 1.理解需求 2.需求分析 3.2开发及运行环境 3.3功能模块的设计 3.3.1 设计目标 3.3.2 客房管理系统前台的设计 3.3.3 操作员管…

一种算法分类方式及其应用

在计算机科学领域,算法是解决问题的有效方法,而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法,包括按设计思想、问题类型、数据结构和应用领域等,每一类算法会对应有其典型和实际应用。 算…

大数据BI可视化(Echarts组件)项目开发-熟悉交互API5.0

全局echarts对象 init初始化 registerTheme注册主题 var mCharts echarts.init(document.querySelector("div"), itcast)registerMap地图图表 connect 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

javaFor循环-打印九九乘法表

虽然所有循环结构都可以用while或者do...while表示&#xff0c;但java提供了另一种循环语句--for循环&#xff0c;使一些循环结构变得简单。for循环语句是支持迭代的一种通用结构&#xff0c;是最有效&#xff0c;最灵活的循环结构。 先写第一列&#xff1a; 运行结果&#xf…

什么是开发者门户?最佳实践及示例

原文链接&#xff1a;https://document360.com/blog/api-developer-portal-examples 开发者门户是什么&#xff1f; DevPortal 奖的主要赞助商 Provonix 对开发者门户的定义如下&#xff1a; “开发者门户&#xff08;通常缩写为 DevPortal&#xff09;是一组 API、SDK 或其他…