【JavaEE】 简单认识CPU

🐵本篇文章将对cpu的相关知识进行讲解


一、认识CPU

下图是简略的冯诺依曼体系结构图

上图中,存储器用来存储数据,注意在存储器中都是以二进制的形式存储数据的,CPU就是中央处理器,其功能主要是进行各种算术运算各种逻辑判断

我们在计算机上运行的任何一个程序,本质上都是在CPU上运行的,接下来再结合任务管理器来对CPU进行讲解

1.1 占有率和频率

上图中,“3%” 就是CPU占有率

举个例子:假如一个人上班总时间为8小时,但他用4小时就完成了今天的工作,此时称CPU占有率为50%,计算机中运行的程序并非都是全力的工作,通过计算每一个程序的CPU占有率,最终算得的总占有率就是上图中显示的

“3.03GHz” 就是CPU频率

CPU频率用来描述CPU工作的效率,数字越大,工作效率越快,CPU频率也可以简单认为1s执行多少个指令/计算了多少次

CPU频率还有基础频率最大睿频的概念,基础频率就是CPU保底的工作效率,最大睿频就是CPU最高能达到的工作效率

1.2 核心

以前的CPU都是单核心CPU,要想提高这种CPU的性能,就必须增加其内部的集成原件的数量,那么就得让每个单位原件更小,但是并不能无限小下去,单核CPU就达到了发展瓶颈

于是就有了多核心CPU,现在的计算机大多都是多核心CPU

内核为物理核心,逻辑处理器是逻辑核心,买电脑时看到的8核 16线程就是这个意思(这里有一个简单的了解就行)

CPU是多核心的,但每一个核心的工作效率是一样的,所以在设计程序时为了提高工作效率,就得做到合理分配,把要完成的任务交给不同的核心去完成,这也就是我们后续要研究的“多线程编程”

1.3 缓存

寄存器是CPU内部存储数据的模块,在存储空间上:硬盘 > 内存 > 寄存器,在速度上:寄存器 > 内存 > 硬盘;寄存器和内存大概差3~4个数量级,内存和硬盘又差3~4个数量级,由于速度差异过大,CPU提供了缓存模块

上述CPU中有3个缓存,对于缓存数字越小,速度越快,空间越小

有些要频繁使用的数据如果存在内存中,CPU要频繁从内存中读取,这样速度会比较慢,因此可以将这些要高频使用的数据放到缓存中

CPU在读取指令时,先看缓存中有没有,如果有直接从缓存中读取,没有则从内存中读取

二、CPU如何执行指令

2.1 CPU执行指令的步骤

CPU执行指令分为3个步骤:

1. 读指令:将内存中的指令数据读取到CPU的寄存器中

2. 解析指令

3. 执行指令

2.2 指令

指令就是指导CPU工作的命令,主要由 操作码+操作数 组成,操作码就是指令的编号,操作数就是接下来通过指令要操作的数据

下图是一个指令表:

每一个CPU被设计出来时都会提供一个指令表

2.3 CPU如何读到指令

写完一个Java程序,就会生成一个 .java 的源文件,经过编译后生成 .class 的二进制字节码文件,之后运行程序时JVM会把 .class 文件加载到内存中,在内存中进一步被翻译为CPU认识的二进制指令

写完一个C程序,就会生成一个 .c 的源文件,经过编译后生成 .exe 的二进制文件,之后运行程序时操作系统会把 .exe 文件加载到内存中,在内存中进一步被翻译为CPU认识的二进制指令


CPU中有一个专门的寄存器保存接下来要从哪个内存地址取指令(在不同的CPU中可能叫不同的名字,在有些操作系统书中称其为“程序计数器”简称“pc”

此处假设从0号地址开始读取,CPU每次读取执行完一个指令之后,就会自动把pc中的值+1,即顺序取下一条指令(有些情况会遇到跳转类指令,此时就根据设置的地址进行取地址)

接下来通过具体的操作进一步熟悉CPU执行指令的过程

2.4 模拟操作

第一轮操作:

读取指令:从0号地址读取到 00101110

解析指令:操作码:0010;操作数:1110(10进制:14),通过查询指令表该指令就是将14号地址的数据加载到A寄存器中

执行指令:将14号地址的数据:00000011(10进制:3)加载到A寄存器中

第二轮操作:

读取指令:顺序读取1号地址指令:00011111

解析指令:操作码:0001;操作数:1111(10进制:15),通过查询指令表该指令就是将15号地址的数据加载到B寄存器中

执行指令:将15号地址的数据:00001110(10进制:14)加载到B寄存器中


执行到这一步:CPU中,寄存器A:3,寄存器B:14


第三轮操作:

读取指令:顺序读取2号地址指令:10000100

解析指令:操作码:1000;通过查指令表,此处是将两个寄存器的数据求和并将求和后的数据加载到第二个寄存器,操作数:0100,此处的01 和 00 就代表两个寄存器的id,id是在CPU设计出来的时候提前约定好的,这里就假定01:B,00:A

执行指令:AB寄存器中数据求和等于17 并将其加载到A中


此时CPU中,寄存器A:17,寄存器B:14


第四轮操作:

读取指令:顺序读取3号地址指令:01001101

解析指令:操作码:0100;操作数:1101(10进制:13),通过查指令表,此处将A寄存器中的数据加载到13号地址处

执行指令:13号地址的数据:00000000 -> 00010001(17的二进制形式)

第五轮操作:

读取指令:顺序读取4号地址指令:00000000

解析指令:操作码:0000;操作数:0000,指令表中没有0000的操作码,一般认为程序运行结束

执行指令:程序退出


🙉本篇文章只是对CPU进行了大致的了解,接下来会对操作系统的相关知识进行讲解

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

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

相关文章

Java版Flink使用指南——分流导出

大纲 新建工程编码Pom.xml自定义无界流分流 测试工程代码 在之前的案例中,我们一直使用的是单个Sink来做数据的输出。实际上,Flink是支持多个输出流的。本文我们就来讲解如何在Flink数据输出时做分流处理。 我们将基于《Java版Flink使用指南——自定义无…

公司内部配置GitLab,通过SSH密钥来实现免密clone、push等操作

公司内部配置GitLab,通过SSH密钥来实现免密clone、push等操作。以下是配置SSH密钥以实现免密更新的步骤: 1.生成SSH密钥 在本地计算机上打开终端或命令提示符。输入以下命令以生成一个新的SSH密钥:ssh-keygen -t rsa -b 4096 -C "your…

自动驾驶事故频发,安全痛点在哪里?

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日,武汉城市留言板上出现了多条关于萝卜快跑的投诉,多名市民反映萝卜快跑出现无故停在马路中间、高架上占最左道低速行驶、转弯卡着不动等情况,导致早晚高峰时段出现拥堵。萝卜快跑是百度 A…

Mac VSCode 突然闪退、崩溃、打不开了

1、 思路历程 VSCode 作为前端常用开发工具,其重要性就不一一描述了。 所以 VSCode 突然打不开了,真的是让我一脸懵逼。 本来以为问题不大,于是 : 1、重启了一下VSCode 2、关机重启了一下电脑; 3、清理了一下缓存&am…

RequestContextHolder多线程获取不到request对象

RequestContextHolder多线程获取不到request对象,调用feign接口时,在Feign中的RequestInterceptor也获取不到HttpServletRequest问题解决方案。 1.RequestContextHolder多线程获取不到request对象 异常信息,报错如下: 2024-07-0…

设计模式8-桥模式

设计模式8-Bridge 桥模式 由来与目的模式定义结构代码推导1. 类和接口的定义2. 平台实现3. 业务抽象4. 使用示例总结1. 类数量过多,复杂度高2. 代码重复3. 不符合单一职责原则4. 缺乏扩展性改进后的设计1. 抽象和实现分离(桥接模式)2. 抽象类…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

【鸿蒙学习笔记】使用动画

官方文档:使用动画 目录标题 属性动画:通用属性发生改变时而产生的属性渐变效果animationanimateTo自定义属性动画 AnimatableExtend 转场动画:是页面或组件的切换动画 , 显示/隐藏 切换时的动画出现/消失转场:实现一个组件出现或…

Allegro纠纷管理:构建和谐交易的桥梁

在Allegro这个欧洲领先的电商平台,每天都有成千上万的交易发生,纠纷可能源于多种原因,包括但不限于商品描述不符、运输损坏、未收到货、退货退款问题等。纠纷留言便成为了连接买卖双方,解决争议的桥梁。在Allegro平台上&#xff0…

部署前端项目

常见部署方式有:静态托管服务、服务器部署 1. 静态托管服务 使用平台部署代码,比如 GitHub。 | 创建一个仓库,仓库名一般是 yourGithubName.github.io。 | 将打包后的静态文件文件上传到仓库。 | 在“Settings”(选项&#xff0…

初始化线程的4种方式

1. 继承Thread 缺点:无法获取线程的运算结果。 public class ThreadTest{public static void main(String[] args){Thread01 thread new Thread01();thread.start();}public static class Thread01 extends Thread{public void run(){System.out.println("当前…

PageDTO<T>,PageQuery,BeanUtils,CollUtils的封装

一、PageDTO<T> import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.annotation.JsonIgnore; import com.tianji.common.utils.BeanUtils; import com.tianji.common.utils.CollUtils; import com.tianji.common.utils.…

koa + http-proxy-middleware 搭建一个带转发的静态服务器

背景 由于工作中碰到写普通页面&#xff08;未使用脚手架&#xff09;&#xff0c;需要发起接口请求&#xff0c;但普通页面又无法对接口发起正常请求&#xff0c;故编写一个Koa搭建的带转发功能的静态服务器。 起步 新建一个文件夹&#xff0c;在文件夹下打开 cmd 或者 git …

AI提示词:AI辅导「数学作业」

辅导孩子作业对许多家长来说可能是一件头疼的事&#xff0c;但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容&#xff1a; # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…

iOS 开发技巧 - 使用本地 json 文件

前言 使用本地 json 文件的场景&#xff0c;在我们开发功能的阶段&#xff0c;服务端接口字段定义好了后&#xff0c;有些接口响应很慢&#xff0c;请求到响应可能要 几十秒甚至一分钟&#xff0c;我们需要频繁调用接口来调试功能&#xff1b;还有就是调用一些我们需要付费的三…

宿州降本 提质 增效 数据采集监控平台提高生产自动化水平

在当今竞争激烈的市场环境中&#xff0c;企业追求降本、提质、增效已成为发展的关键。而我们的[数据采集监控平台名称]数据采集监控平台&#xff0c;正是助力企业实现这一目标的强大工具。 LP-SCADA数据采集监控平台是工业4.0中主要的数据采集系统之一&#xff0c;主要针对产线…

限流组件都有哪些

限流组件有很多&#xff0c;下面是一些常见的限流组件&#xff1a; 1.Sentinel&#xff1a;轻量级的流量控制、熔断降级组件&#xff0c;适用于分布式系统间的流量控制、负载保护和系统防护。 1.Guava RateLimiter&#xff1a;Google 的 Guava 库提供的限流器&#xff0c;基于令…

基于STM32的智能加湿器

1.简介 基于STM32的加湿器发展前景非常乐观&#xff0c;这主要得益于其在技术、市场需求、应用场景以及政策支持等多方面的优势。STM32微控制器具备强大的处理能力和丰富的外设接口&#xff0c;能够实现精确的湿度监测和智能化控制。基于STM32的加湿器可以根据环境湿度自动调节…

2-29 基于matlab的CEEMD

基于matlab的CEEMD&#xff08;Complementary Ensemble Empirical Mode Decomposition&#xff0c;互补集合经验模态分解&#xff09;&#xff0c;先将数据精心ceemd分解&#xff0c;得到imf分量&#xff0c;然后通过相关系数帅选分量&#xff0c;在求出他们的样本熵的特征。用…

JAVA从入门到精通之入门初阶(一)

1. 认识变量 一、 首先变量名要遵循如下命名规则&#xff1a; 1. 变量名只能由字母、数字和下划线组成 2. 变量名必须以字母或下划线开头 3. 变量名大小写敏感 4. 变量名不能使用关键字&#xff0c;如const、static等 5. 变量名应具有描述性&#xff0c;以便于代码的可读性…