专栏首页程序员成长充电站CPU怎么去执行程序的?

CPU怎么去执行程序的?

从 "取指令" 开始,"指令地址寄存器" 现在的值是 1 到 "解码" 阶段! 0001 是 LOAD B 指令 从 RAM 里把一个值复制到寄存器 B,这次内存地址是 1111,十进制的 15。现在到 "执行阶段“,”控制单元" 叫 RAM 读地址 15,并配置寄存器 B 接收数据,成功,我们把值 0000 1110 ,也就是十进制的 14 存到了寄存器 B ,最后一件事是 "指令地址寄存器" +1 ,我们又完成了一个循环。

下一条指令有点不同,来取它吧 1000 0100,1000 是 ADD 指令 ,这次后面的 4 位不是 RAM 地址,而是 2 位 2 位分别代表 2 个寄存器,2 位可以表示 4 个值,所以足够表示 4 个寄存器。第一个地址是 01, 代表寄存器B ,第二个地址是 00, 代表寄存器A。因此,1000 0100,代表把寄存器 B 的值,加到寄存器 A 里 ,为了执行这个指令,我们要整合第 5 周的"控制单元" 负责选择正确的寄存器作为输入,并配置 ALU 执行正确的操作 B对于 "ADD" 指令, "控制单元" 会 启用寄存器 B,作为 ALU 的第一个输入,还启用寄存器 A,作为 ALU 的第二个输入 。之前说过,ALU 可以执行不同操作,所以控制单元必须传递 ADD 操作码告诉它要做什么 。最后,结果应该存到寄存器 A,但不能直接写入寄存器 A,这样新值会进入 ALU ,不断和自己相加,因此,控制单元用一个自己的寄存器暂时保存结果,关闭 ALU,然后把值写入正确的寄存器,这里 3+14=17,二进制是 0001 0001,现在存到了寄存器 A。和之前一样,最后一件事是把指令地址 + 1 这个循环就完成了。

好,来看最后一个指令:0100 1101,解码得知是 STORE A 指令(把寄存器 A 的值放入内存), RAM 地址 13,接下来,把地址传给,同时,打开寄存器 A 的 "允许读取" 这样就可以把寄存器 A 里的值,传给 RAM。恭喜,我们刚运行了第一个电脑程序!它从内存中加载两个值,相加,然后把结果放回内存,刚刚是我一步步来讲的,我们人工切换 CPU 的状态 "取指令→解码→执行"。

时钟

但不是每台电脑里都有一个迷你,其实是 "时钟" 来负责管理 CPU 的节奏,时钟以精确的间隔触发电信号,控制单元会用这个信号,推进 CPU 的内部操作,确保一切按步骤进行。就像罗马帆船的船头,有一个人负责按节奏的击鼓, 让所有划船的人同步... 就像节拍器一样,节奏不能太快,因为就算是电也要一定时间来传输。 "取指令→解码→执行" 的速度叫 "时钟速度",单位是赫兹 - 赫兹是用来表示频率的单位。赫兹代表一秒 1 个周期 因为我花了大概 6 分钟,给你讲了 4 条指令:读取→读取→相加→存储,所以我的时钟速度大概是 0.03 赫兹。我承认我算数不快,但哪怕有人算数很快,最多也就是一秒一次,或 1 赫兹。第一个单芯片 CPU 是 "英特尔 4004" ,1971 年发布的 4 位CPU,它的微架构很像我们之前说的CPU。虽然是第一个单芯片的处理器,但它的时钟速度达到了 740 千赫兹 - 每秒 74 万次 。你可能觉得很快,但和如今的处理器相比不值一提,一兆赫兹是 1 秒 1 百万个时钟周期,你现在看视频的电脑或手机,肯定有几千兆赫兹 , 1 秒 10 亿次时钟周期 。

动态调整频率

你可能听过有人会把计算机超频,意思是修改时钟速度,加快 CPU 的速度 。就像罗马帆船要撞另一艘船时,鼓手会加快敲鼓速度。芯片制造商经常给 CPU 留一点余地,可以接受一点超频。但超频太多会让 CPU 过热或产生乱码,因为信号跟不上时钟。你可能很少听说降频,但降频其实很有用,有时没必要让处理器全速运行,可能用户走开了,或者在跑一个性能要求较低的程序,把 CPU 的速度降下来,可以省很多电,省电对用电池的设备很重要,比如笔记本和手机。为了尽可能省电,很多现代处理器可以按需求加快或减慢时钟速度这叫 "动态调整频率" 。

加上时钟后,CPU 才是完整的。现在可以放到盒子里,变成一个独立组件。!一层新的抽象! RAM,上面说过,是在 CPU 外面的独立组件,CPU 和 RAM 之间用 "地址线" "数据线" 和 "允许读/写线" 进行通信。虽然今天我们设计的 CPU 是简化版的, 但我们提到的很多机制,依然存在于现代处理器里 。

本文分享自微信公众号 - 程序员成长充电站(qianpangzi8),作者:钱胖子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CPU处理程序的三个阶段

    我们已经做了一个算术逻辑单元(ALU)输入二进制,它会执行计算。我们还做了两种内存: 寄存器 - 很小的一块内存,能存一个值 ,之后我们增大做出了 ,RAM 是...

    硬核编程
  • CPU的价值

    一种提升性能的方法叫 "指令流水线",想象下你要洗一整个酒店的床单,但只有 1 个洗衣机, 1 个干燥机。

    硬核编程
  • 一步步做个集成电路(IC)

    我们在之前讨论过硅很特别,它是半导体,它有时导电,有时不导电, 我们可以控制导电时机,所以硅是做晶体管的绝佳材料。我们可以用晶圆做基础,把复杂金属电路放上面,集...

    硬核编程
  • 温度传感器 介绍以及驱动实现原理

    4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI、低电平有效的从机选择线NSS。

    菜刀兔
  • STM32CubeProgrammer下载算法制作

    本文档主要介绍,在STM32CubeProgrammer环境下,QSPI下载算法的制作和应用,方便将全字库和图片等资源文件存入QSPI flash里面,这样就可...

    用户1605515
  • 人工智能行业已巨头林立, Salesforce 成功“突围”

    编者按:本文作者为《连线》杂志知名编辑 Scott Rosenberg,他以知名“软件即服务(SaaS)”行业公司 Saleforce 发展人工智能技术为背景...

    臭豆腐
  • 在R中赞扬下努力工作的你,奖励一份CheetShet

    传说有个R,R里有个包,包的名字叫praise,会一直不停地夸赞你。 > praise() [1] "You are sensational!" > prais...

    生信宝典
  • 数字货币存在什么风险 数字货币交易平台存在哪些风险?

    当我们聊起币圈的种种时,不可避免的都会谈论到关于数字货币交易平台的问题,尤其安全、风险等方面普遍受到币圈投资者的关注。而纵观目前行业内的数字货币交易平台,各个交...

    用户4129775
  • 故障树分析法在数据库诊断分析中的应用

    编辑手记:将知识转化为能力,除了需要经验的积累和时间的磨砺,更重要的是正确的方法和思维模式,学会应用知识才是真正的能力。本文试图通过方法的讨论使大家能够形成一个...

    数据和云
  • 用50年前NASA送阿波罗上天的计算机挖矿什么体验? 出一个块要10^18年……

    比特币挖矿到底有多难呢?一个外国极客用曾送宇宙飞船上天的 NASA 老古董做了一个大胆的实验。

    区块链大本营

扫码关注云+社区

领取腾讯云代金券