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

笔记一

文章目录

      • 7.CPU
        • 阶段一:取指令阶段
        • 阶段二:解码阶段
        • 阶段三:执行阶段
      • 8.指令和程序
      • 9.高级CPU设计——流水线与缓存
      • 10.早期编程方式
      • 11.编程语言发展史
      • 12.编程原理
      • 13.算法入门
      • 14.数据结构
      • 15.阿兰·图灵

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设计——流水线与缓存

10.早期编程方式

11.编程语言发展史

12.编程原理

13.算法入门

14.数据结构

15.阿兰·图灵

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

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

相关文章

在R的 RGui中,使用devtools 安装trajeR

创建于:2024.5.5 文章目录 1. 报错信息2. 尝试使用指定的清华镜像,没有解决3. 找到原因:官网把包删除了4. 尝试从网上下载,然后安装。没有成功5. 使用devtools安装5.1 尝试直接安装:install.packages("devtools&q…

写点简单的算法压压惊

题目 问题描述 小蓝是个直男,他老是不懂女朋友的心思,甚至不知道女朋友 有没有生气。 后来他逐渐发现,如果女朋友给他发的消息的字符个数小于等 于 10 个,那么就是生气了,否则就是没有生气。 现在收到一条女朋友发来的…

关于YOLO8学习(四)模型转换为ncnn

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 简介 本文将会讲解: (1)如何通过PyCharm,进行pt模型的转换,最后输出一个适合手机端使用的模型 开发环境 win10、python 3.11…

C语言写一个终端进度条

C语言写一个终端进度条 这个功能挺简单的,主要有以下两点: 如何获取终端宽度如何让字符在原地闪烁 如何获取终端宽度 这里用到了设备控制接口函数ioctl(),下面简单的介绍一下这个函数的用法: ioctl是一个在Unix和类Unix系统中…

1-36 双列集合

一 Map集合 1.存储特点(重点记忆:) 以键值对(KEY-VALUE)形式存储 2.特点: ①将键值对看做对象进行存储 ②KEY 不能重复,VALUE可以重复 ③每一对K-V都是意义对应的映射关系 3.拓展:Map集合是双列集合,由两个单列集合组成的 分析KEY和VALUE所在的是什么种类集合 ①KEY不…

JS基础:js的2种基本用法,4个属性详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

C++容器map及unordered_map底层实现和性能上有所不同

std::map 和 std::unordered_map 都是 C 标准库中用于实现关联容器的类模板,但它们在底层实现和性能上有所不同。 1. std::map: - 使用红黑树实现,保持元素的有序性。因此,所有操作的时间复杂度都是 O(log n),其中…

算法--贪心算法

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤其有效,这意味着局部最优解能决定全局最优解。简单来说,贪心…

零基础学习数据库SQL语句之查询表中数据的DQL语句

是用来查询数据库表的记录的语句 在SQL语句中占有90%以上 也是最为复杂的操作 最为繁琐的操作 DQL语句很重要很重要 初始化数据库和表 USE dduo;create table tb_emp(id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment…

【C++基础】内联函数

一,内联函数概念 以inline修饰的函数叫做内联函数。 编译时,C编译器会在调用内联函数的地方展开,没有函数调用栈帧的开销。 内联函数提升程序运行的效率。 二,特性 1,inline是一种以空间换时间的做法 2&#xff…

glob库和split函数的用法

dir为一个文件夹,存放着三张jpg格式的图像 import glob dir rD:\My Data\Figure image_DCE_files glob.glob(f{dir}/*.jpg) image_DCE_files glob库可以获取文件夹下为个文件的绝对路径,会保存到一个列表中 获取的路径可以拆分为列表 image_DCE_files[1].split(…

写自己的c库----小话c语言(19)

Q: 对于c代码,经常可能被c代码使用,所以经常需要使用extern "C"语句,老是写这段代码真是很烦人,有什么好的方法? A: 对于重复代码来说,宏无疑是个很好的方法。 #if defin…

HTTP常见面试题(一)

3.1 HTTP 常见面试题 HTTP基本概念 HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。 HTTP 的名字「超文本协议传输」,它可以拆成三个部分: 超文本 传输 协议 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语…

Lora训练笔记1——快速上手

准备工具 AKI大佬的整合包,一键解压即可。 度盘链接 提取码:p8uy 图片预处理 图片预处理:以一定规则裁剪原始的训练素材图片,并进行打标处理。 新建两个文件夹 input:存放原始图片的文件夹 preprocess-output:…

西湖大学赵世钰老师【强化学习的数学原理】学习笔记-1、0节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程,本课程深入浅出地介绍了RL的基础原理,前置技能只需要基础的编程能力、概率论以及一部分的高等数学,你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…

OpenCV如何使用 GDAL 读取地理空间栅格文件(72)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录(持续更新中......) 目录 目标 代码: 解释: 如何使用 GDAL 读取栅格数据 注意 …

C++进阶----多态

1.多态的概念 1.1 概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同类型的对象去完成时会 产生出不同的状态。 举个例子:比如有一个基类Animal,它有两个子类Dog和Cat。每个…

利用 pcap 库和 select 函数实现网络数据包实时捕获

概述 在网络编程中,实时捕获网络数据包是一项常见的任务。这对于网络安全分析、网络流量监控以及网络性能调优等领域都非常重要。在本篇博客中,我们将介绍如何利用 pcap 库和 select 函数实现网络数据包的实时捕获,以及一些相关的技巧和应用…

数据结构---时间复杂度+空间复杂度

算法(algorithm)简单说就是解决问题的方法。方法有好坏,同样算法也是,有效率高的算法,也有效率低的算法。衡量算法的好坏一般从时间和空间两个维度衡量,也就是本文要介绍的时间复杂度和空间复杂度。有些时候,时间与空间…

2024年第七届大数据技术国际会议(ICBDT 2024)即将召开!

2024年第七届大数据技术国际会议(ICBDT 2024)将于2024年9月20-22日在中国杭州的浙江工商大学举行。数据驱动未来,技术引领潮流。从数据挖掘算法的优化,到数据处理速度的提升,再到数据安全与隐私保护的进步,…