前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【代码与算法的交响:人工智能视角下的CPU工作原理】

【代码与算法的交响:人工智能视角下的CPU工作原理】

作者头像
ImAileen
发布2024-12-26 08:24:50
发布2024-12-26 08:24:50
840
举报

前言

  • 本文主要是关于计算机cpu工作原理的介绍。

CPU是如何执行指令的

  • 先加载到内存中 ,然后才能被CPU读取并执行。
  • eg:一个Java程序,写出来是.java 源代码文件,编译得到.class二进制文件(仍然是在硬盘上),运行程序的时候,jvm会把这个.class 加载到内存中,再进一步翻译成cpu能识别的二进制指令。
  • 冯诺依曼体系结构规定:一个程序,指令和依赖的数据,都是要在存储器中保存的,cpu如果要执行,都是要自动的从存储器中读取相应的指令。

CPU执行程序的三个阶段

  • 1.读指令(把内存中的指令数据,读取到cpu的寄存器中)
    • cpu上也能存数据,存储数据的模块就叫做寄存器,速度比内存更快,但是存储空间更小,更贵。
  • 2.解析指令(理解当前指令要干什么)
  • 3.执行指令

指令表

  • 指令表:是cpu内部写死的一个内容,已经内置在里面了。
  • 每个CPU被设计出来都会提供对应的指令表,
    • RAM:内存(随机访问存储器)
    • cpu寄存器:数量是固定的,一般都是使用字母/数字的组合来命名的
    • 指令:由八位二进制数字组成,包括操作码和操作数。
      • opcode:操作码,用于区分是什么操作
      • 操作地址或寄存器:统称为操作数,针对什么数据进行操作(类似于函数的参数)。对于不同的指令有不同作用。
      • 实际上现代的cpu一条指令都是更长的,不仅仅是8位,但是大体也是由操作码和操作数构成。

CPU执行一条指令的具体实现流程 (以计算机计算3+14=17过程为例)

第一轮操作:

  • (1)cpu 取出 0 号地址的指令
  • (2)解析指令,首先根据指令的前四位①操作码去指令表查询到这个指令是LOAD_A指令。
-
-

  • 然后要从后面跟着的地址②(1110 = 14)上读取数据到A寄存器
  • (3)执行指令
    • 14地址这里的数据(00000011 = 3)取出来,放入到A寄存器中。

第二轮操作:

  • (1)取指令 (由于刚才的指令不是跳转指令,所以PC中要取的地址就会顺延加1,也就是说现在的地址是1)
  • (2)解析指令,根据指令前四位①操作码去查询指令表,我们可以知道这个指令是LOAD_B指令。
在这里插入图片描述
在这里插入图片描述
  • 然后要从后面跟着的地址②(1111 = 15)上读取数据到B寄存器中。
  • (3)执行指令
    • 15地址这里的数据(00001110 = 14)取出来,放到B寄存器中。

⚠️注意:

  • 内存中存的不全都是指令,有的地方存的是指令,有的地方存的是数据(指令还是数据是人为规定的),如果是指令,后面还会继续拆分。

第三轮操作:

  • (1)取指令 (按照顺延顺序取得2号地址的指令)
-
-
  • (2)解析指令,根据指令前四位①操作码去查询指令表,我们可以知道这个指令是ADD指令。
  • 通过查看指令表我们可以得知,现在add指令后面的操作数不再是内存地址了,而是寄存器的编号。
  • 操作码后面的操作数表示的是这两个寄存器id分别是0100
  • 寄存器是固定数量的,通过编号来表示,CPU上每个寄存器都有名字(数字+字母)。

我们假设01是A寄存器的id,00是B寄存器的id。现在我们通过操作码对应的ADD指令,把这两个寄存器中的数值进行相加,并将结果放入到第二个寄存器(00 —> A)当中。

  • (3)执行指令
  • 按照上面的操作,将相加结果17放入到第二个寄存器A中,现在A中应该放17,B还是14。

第四轮操作:

  • (1)取指令 (按照顺延顺序取得3号地址的指令)
  • (2)解析指令,根据指令前四位①操作码去查询指令表,我们可以知道这个指令是STORE_A指令。
  • 这个指令的功能是把A寄存器中的数据(17)保存到后面操作数(13对应的单元中)描述的内存中
  • (3)执行指令

第五轮操作:

  • (1)取指令,顺序取出下一个指令
  • (2)解析指令,指令表中未写,一般就表示,程序运行完毕。
  • (3)执行指令,程序就退出了。

小结:

虽然计算步骤非常繁琐,但是由于拥有强大的cpu,使其一秒钟能运行3GHz - > 30亿轮。

内存地址

  • 地址:是管理数据的方式,管理和存储数据都是根据地址展开的(eg:宿管根据门牌号进行宿舍的管理)
  • 内存核心特性:随机访问是内存的核心特性,它使得宿管具有闪现功能,能够在极短时间内访问到任意房间的数据。之所以数组能够以O(1)复杂度取下标,本质上就是内存提供了随机访问的能力。
    • 1G就是1个billion,1个billion就是10亿,所以16G就是160亿。
    • 1M是1个million(百万)
    • 1K是一个thousand(千)
  • cpu中有 一个专门的寄存器,保存接下来要从哪个内存地址来取指令(不同的 cpu 叫法不同),有些操作系统上称为“程序计数器”简称pc

应用场景

  • eg:你有一个服务器程序,这个程序非常重要,绝对不能挂,但是突然发现,这里存在严重的bug!!!但是又不能立即发布新版本重启,你希望能够在不重启服务器情况下把bug修复,应该怎么办?
    • 可以写一个特定的程序,通过特定的程序,直接修改服务器的内存数据,把要更新的代码,直接写到指定的内存中,并且修改原有的服务器指令中的逻辑,插入跳转指令,在触发bug逻辑之前,让程序跳转到新植入的逻辑中进行执行。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • CPU是如何执行指令的
    • CPU执行程序的三个阶段
    • 指令表
  • CPU执行一条指令的具体实现流程 (以计算机计算3+14=17过程为例)
    • 第一轮操作:
    • 第二轮操作:
    • ⚠️注意:
    • 第三轮操作:
    • 第四轮操作:
    • 第五轮操作:
    • 小结:
    • 内存地址
    • 应用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档