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

笔记一

文章目录

      • 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…

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

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

C语言写一个终端进度条

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

零基础学习数据库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…

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(…

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。每个…

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

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

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

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

Scikit是什么?

目录 一、Scikit是什么? 二、用Scikit做一个简单房价预测例子 三、sklearn知识点 一、Scikit是什么? Scikit就是scikit-learn,是一个免费软件机器学习库。 https://scikit-learn.org/stable/https://scikit-learn.org/stable/ 用于预测数…

SoundStream: 下一代的神经网络音频编解码器,实时压缩不牺牲音质

音频编解码技术的目标是,通过减少音频文件的大小来节省存储空间或减轻网络传输的负担。理想的情况下,即使音频被压缩,我们听到的声音与原版也应该没有任何区别。 过去,已经有不少编解码技术被开发出来,满足了这些需求…

Day13-JavaWeb开发-事务管理(回顾/进阶)AOP基础(入门/概念)AOP进阶(通知类型/顺序/切点表达式)AOP案例

1. 事务管理 1.1 事务管理-事务回顾 1.2 事务管理-事务进阶 rollbackFor propagetion 2. AOP基础 2.1 AOP基础-快速入门 2.2 AOP基础-核心概念 3. AOP进阶 3.1 AOP进阶-通知类型 3.2 AOP进阶-通知顺序 3.3 切入点表达式-execution 3.4 切入点表达式-annottation 3.5 AOP进阶…

如何构建用于从收据中提取信息的生成式人工智能工具

原文地址:how-to-build-a-generative-ai-tool-for-information-extraction-from-receipts 使用 LangChain 和 OpenAI 工具从 Google Drive 中存储的收据图像中提取结构化信息 2024 年 4 月 10 日 纸质收据有各种样式和格式,是自动信息提取的一个有趣目…

Web服务器手动配置

目录 配置环境 http配置 配置步骤 1、首先安装Nginx(已经安装的跳过这步) 2、查看一下下Nginx的配置文件结构,了解如何配置,以及配置的各个条目有什么作用(为接下来的配置打基础) 3、创建你的网页 4、…

【JAVA项目】基于ssm的协同过滤算法的【图书推荐系统】

技术简介:采用B/S架构、ssm 框架、Java技术、MySQL等技术实现。 系统简介:系统权限按管理员和用户这两类涉及用户划分。(1)管理员功能需求 管理员登陆后,主要包括首页、个人中心、用户管理、书籍管理、书籍分类管理、热…

牛客NC382 切割木头【中等 二分超找 Java/Go/C++】

题目 题目链接: https://www.nowcoder.com/practice/707d98cee255448c838c76918a702be0 核心 二分查找Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可…

安卓 app icon大小 安卓app界面尺寸大小

移动应用的界面设计画布尺寸设计多大(特别是Android)、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现? 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索,来分享移动应用界面设计中的…