计算的是如何工作的

news2024/9/22 4:18:46

文章目录

  • 一. 冯诺依曼体系结构
    • 二. CPU
    • 三. 指令
    • *四. CPU是如何执行指令的

一. 冯诺依曼体系结构

冯诺依曼是计算机领域的祖师爷, 被评为"二十一世纪最伟大的"全才""
在这里插入图片描述
冯诺依曼提出了冯诺依曼体系结构, 定义了一台计算机, 由这几部分构成:
在这里插入图片描述
输入设备: 包括键盘, 鼠标, 摄像头…
CPU: 控制器 + 运算器
存储器: 内存 + 外存
输出设备: 显示器, 音箱, 打印机…

二. CPU

打开任务管理器, 我们可以看到:
在这里插入图片描述

  1. 6%: 表示CPU的占用率
    CPU就像一个打工人, 一个打工人, 一天可能工作8个小时, 领导给她安排一些活, 这个打工人花了4个小时就干完了, 剩下4个小时就可以摸鱼了, 此时cpu的占用率就是50%
  2. 3.06GHz: 表示CPU的频率, 翻译过来3.06GHz == 30亿 Hz, 简单认为一秒钟执行30亿条指令
    它描述了CPU的干活效率, 数字越大, 干活就越快, 可以简单粗暴理解为:一秒钟, cpu运行多少次/执行多少条指令(不够严谨)
    cpu的频率有两个概念:
    基础频率:保底多少
    最大频率(最大加速睿频): 拉满多少

实际上, 现在的CPU都是**“多核心CPU”**, 一个CPU其实是好几个打工人的集合
另外intel(搞CPU的两大巨头, 另一个是AMD), 研究了"超线程技术", 让一个CPU核心, 当两个用

例如我的电脑, 就是4核(物理核心) 8线程(逻辑核心)

三. 指令

指令, 可以认为是CPU被设计时, 给程序猿提供的一些"程序接口", 近似理解为cpu提供给程序猿的API
不同的cpu,提供的指令是不同的
但是虽然不相同, 但是有几套标准的:

  1. x86架构
    最主流的一套标准, x86架构的cpu
    intel/AMD 生产的 pc / 服务器 都属于x86系列的cpu

由来:
上个世纪70年代左右, intel发布了一系列 8086 cpu, 80286, 80386…非常经典, 支持的指令和内部构造大同小异, 称为x86 系列

  1. arm架构
    用于手机, 平板, 各种嵌入式设备, 例如苹果的M1芯片, M2芯片…

*四. CPU是如何执行指令的

指令, 都需要先加载到内存中, 然后才能被CPU读取, 并执行

冯诺依曼体系结构规定:
一个程序, 指令和依赖的数据, 都是要在存储器中保存的, CPU如果想要执行, 都要自动的从存储器中读取到对应的指令

例如: 一个java程序, 写出来的是一个.java源代码文件, 经过编译, 得到.class二进制文件(仍然存储在硬盘上), 再经过运行, jvm就会把这个.class文件加载到内存中, 再进一步翻译成CPU能识别的二进制文件

接下来, CPU执行程序, 大概经历了三个阶段:

  1. 读指令
    把内存中的指令数据, 读取到CPU的寄存器中
    寄存器: CPU上也能存储数据, 存数据的模块就叫寄存器, 速度比内存快, 但是存储空间更小, 更贵
  2. 解析指令
  3. 执行指令

注意上述只是一个简述的阶段, 实际上CPU会更复杂
每个CPU被设计出来都会提供吧这样的指令表, 供CPU来解析指令
在这里插入图片描述
RAM: 内存
此处一个指令时8位二进制数字, 前四位用来区分这是什么指令, 后四位数操作数, 不同的指令不一样的作用
实际上的CPU一条指令, 不仅仅是八位, 但大体上也是 操作码 + 操作数 构成的
假设内存中的数据如下图:
在这里插入图片描述
设这段数据描述了一段程序, 并从0号地址开始执行, 想要理解这段程序, 就需要结合指令表, 至于哪些是指令, 哪些是数据, 是看不出来的, 只有在程序跑起来之后才能知道(都是系统安排好的)

cpu中有一个专门的寄存器, 保存着要从哪个内存地址来取指令, 叫做"程序计数器", 简称 “pc”
我们假设从0号开始执行, CPU每次读取执行完一条指令后, 就会自动把pc中的值 +1 , 顺序执行下一条指令, (如果遇到跳转指令, 就不是 + 1, 而是被设置成特定的地址)

  • 第一轮操作
  1. 取地址: cpu取出0号地址的指令
    在这里插入图片描述
    2 )解析指令: 去指令表中查询, 看指令是什么意思
    操作码:
    在这里插入图片描述
    查询指令表, 发现对应LOAD_A指令, 要从后面跟着的地址上读取数据到A寄存器中
    操作数:
    在这里插入图片描述
    要操作的数的地址是1110 => 14
  2. 执行指令: 把14地址的数据取出来, 放在A寄存器中
    在这里插入图片描述
    00000011 => 3, 把3存在A寄存器中
  • 第二轮操作
  1. 取指令
    由于刚刚pc = 0, 顺延应该pc++, pc = 1, 取1号地址的指令
    在这里插入图片描述
  2. 解析指令
    操作码:
    在这里插入图片描述
    查询指令表, , 发现对应LOAD_B指令, 要从后面跟着的地址上读取数据到B寄存器中
    操作数:
    在这里插入图片描述
    要操作的数的地址是1111 => 15
  3. 执行指令
    在这里插入图片描述
    把15地址的数据取出来, 00001110 => 14, 把14放在B寄存器中
  • 第三轮操作
  1. 取指令
    取2号地址指令
    在这里插入图片描述
  2. 解析指令
    操作码:
    在这里插入图片描述
    查询指令表, 发现对应ADD指令, 此时后面的操作数, 就是寄存器的编号(已知00 =>A 01 =>B)
    操作数:
    在这里插入图片描述
    01对应B寄存器, 00对应A寄存器, 将这两个寄存器中的数据相加, 相加的和存到第二个寄存器中, 也就是A寄存器
  3. 执行指令
    A中为3, B中为14, 3+14 = 17, 将17存到A中 此时A:17, B: 14
  • 第四轮操作
    1)取指令
    取3号地址指令
    在这里插入图片描述
    2)解析指令
    操作码:
    在这里插入图片描述
    对应指令表STORE_A指令, 把A寄存器的数据写入后面的地址中
    操作数:
    在这里插入图片描述
    1101 => 13
    3)执行指令
    把A寄存器中的数据17 => 00010001 放在13号地址中
  • 第五轮操作
    1)取指令
    取4号地址的数据
    在这里插入图片描述
    2)解析指令
    指令表中没有这中操作, 一般就表示程序运行完毕, 一般为全0
    3)执行指令
    程序就退出了

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

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

相关文章

STM32---HAL库外设配置--串口外设配置及使用

一:首先按照本人的时钟配置博客配置,配置好基础时钟 二:选择对应串口进行选中,然后配置 配置如下:首先配置成异步收发模式,如图中的序号1 参数设置界面选择默认即可如下图 下图中的1不用设置,默认即可。2…

增长新引擎,构建基于 CDP 的用户运营竞争力

本文将围绕“企业如何通过构建基于 CDP 的用户运营体系提升业务增长”这一核心,详细介绍企业数据化运营现状,拆解用户运营目标,展示神策 CDP 的关键能力以及用户运营策略落地的完整路径。 一、洞察:企业数据化运营面临的挑战 当前…

系统编程--Linux下文件的“其他操作”函数

这里写目录标题 文件存储理论补充dentry、inode 文件其他操作stat函数作用函数原型代码(以获取文件大小为例)补充(获取文件类型) lstat函数作用函数原型代码补充(获取文件权限)总结 tipslink函数作用简介函…

看板项目之vue代码分析

目录: Q1、vue项目怎么实现的输入localhost:8080就能自动跳到index页面Q2、组合饼状图如何实现Q3、vue项目如何实现环境的切换Q4、vue怎么实现vue里面去调用js文件里面的函数 Q1、vue项目怎么实现的输入localhost:8080就能自动跳到index页面 …

OZON家庭洗剂产品,OZON热卖家庭洗剂用品有哪些

OZON平台上家庭洗剂产品的热销情况主要反映了俄罗斯家庭对于环保、高效、多功能的清洁用品的需求。根据最新数据和市场趋势,以下是一些OZON平台上热卖的家庭洗剂用品:OZON热卖家庭洗剂用品:D。DDqbt。COm/74rD Top1 洗碗液 ЭКО. Гел…

免费【2024】springboot 毕业设计管理系统

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

反序列化-极客大挑战2019php【I have a cat!】

知道这个题考的是反序列化,那么我们第一反应该拿到他的源码。 根据这句话判断【因为每次猫猫都在我键盘上乱跳,所以我有一个良好的备份网站的习惯 不愧是我!!! 】说明有目录 我们直接使用dir开扫,发现有压…

Redis的应用场景及类型

目录 一、Redis的应用场景 1、限流 2、分布式锁 3、点赞 4、消息队列 二、Redis类型的命令及用法 1、String类型 2、Hash类型 3、List类型 4、Set类型 5、Zset类型 6、Redis工具类 Redis使用缓存的目的就是提升读写性能 实际业务场景下,我们就可以把 Mys…

通信原理-思科实验五:家庭终端以太网接入Internet实验

实验五 家庭终端以太网接入Internet实验 一实验内容 二实验目的 三实验原理 四实验步骤 1.按照上图选择对应的设备,并连接起来 为路由器R0两个端口配置IP 为路由器R1端口配置IP 为路由器设备增加RIP,配置接入互联网的IP的动态路由项 5.为路由器R1配置静…

Blender插入关键帧的位置报错

在操作过程中,有时候是误操作或者是做动画选择了活动插帧集,导致按i键插入关键帧一直报提示:插入关键帧的帧位置或者是其他的报错弹窗。 1、解决方法是:在时间线的抠像(插帧)选项里,将活动插帧集给清空 2、若是骨骼动画…

新智慧:企元数智呈现全新新零售合规分销系统免费送

新智慧!企元数智近期发布了令人振奋的消息:他们推出了全新的新零售合规分销系统,并且免费向企业赠送!这一举措旨在帮助更多企业轻松实现数字化转型,提高管理效率,实现持续增长。 企元数智的新零售合规分销系…

【Linux】管道通信和 system V 通信

文章目录 一、进程通信原理(让不同进程看到同一份资源)二、管道通信2.1 管道原理及其特点2.1 匿名管道和命名管道 三、共享内存通信3.1 共享内存原理3.2 创建和关联共享内存3.3 去关联、ipc 指令和删除共享内存 四、消息队列和信号量(了解&am…

论文阅读【检测】:Facebook ECCV2020 | DETR

文章目录 论文地址AbstractMotivation模型框架详细结构小结 论文地址 DETR Abstract 提出了一种将目标检测视为直接集预测问题的新方法。简化了检测pipeline,有效地消除了许多手工设计的组件的需求,例如非最大抑制过程或锚生成,这些组件明…

Windows环境下安装Redis并设置Redis开机自启

文章目录 0. 前言1. 下载 Windows 版本的Redis2. 为 Redis 设置连接密码(可选)3. 启动 Redis4. 设置 Redis 开机自启4.1 将 Redis 进程注册为服务4.2 设置 Redis 服务开机自启4.3 重启电脑测试是否配置成功4.4 关闭 Redis 开机自启(拓展&…

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…

docker产生日志过大优化

1、Docker容器启动后日志存放位置 #cat /var/lib/docker/containers/容器ID/容器ID-json.log #echo >/var/lib/docker/containers/容器ID/容器ID-json.log临时清除日志 注&#xff1a;echo一个空进去&#xff0c;不需要重启容器&#xff0c;但如果你直接删除这个日志&…

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…

arinc664总线协议

AFDX总线协议简介 &#xff08;1&#xff09;AFDX的传输速率高&#xff1a;带宽100MHZ&#xff0c;远远高于其他的类型的航空总线。&#xff08;2&#xff09;AFDX网络的鲁棒性高&#xff1a;AFDX的双冗余备份网络可以在某一个网络出现故障时&#xff0c;仍能正常通讯。 其中…