cpu的架构
明天继续搞一下cache,还有后面的,
下面是cpu框架图

开始解释cpu
1.控制器
控制器又称为控制单元(Control Unit,简称CU),下面是控制器的组成
1.指令寄存器IR:是用来存放当前正在执行的的一条指令。当一条指令需要被执行时,先按照程序计数器PC所指出的指令地址,从cache中取出一条指令到指令寄存器IR。

操作码就是汇编语言里的mov,add,jmp等符号码;操作数地址说明该指令需要的操作数在数据缓存cache中的地址。
2.指令译码器ID:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
3.时序产生器TG: 类似于“时间作息表”,给计算机各部分提供工作所需的时间标志,一般是利用定时脉冲的顺序和不同的脉冲间隔来实现。
4.操作控制器CU: 根据指令所需完成的操作和信号,发出各种微操作命令序列,用以控制所有被控对象,完成指令的执行。
5.程序计数器PC: 用来存放下一条要执行指令的地址,它与存储器(内存)之间有一条直接通路。执行指令时,首先需要根据程序计数器PC中存放的指令地址,将指令由内存取到指令寄存器IR,完成“取指令”的操作。程序计数器PC本身具有自动加1的功能,可以自动给出下一条指令的地址,如此循环,执行每一条指令。
2.运算器
运算器,一般最少包括3个寄存器和1个算术逻辑单元(ALU),现代计算机内部往往设有通用寄存器组。
寄存器,一种有限存储容量的高速存储部件,可用来暂存指令、数据和位址。寄存器有很多种类,一般涉及到四则运算的有3类,ACC(Accumulator)为累加器,MQ(Multiplier-Quotient Register)为乘商寄存器,X为操作数寄存器,3类寄存器在完成不同运算时,所存放的操作数类别也各不相同。

关于乘积高位和乘积低位的概念,以十进制为例,百位就是十位的高位,十位是百位的低位。两个16位数相乘,结果可能会有32位,那左半部分的16位就是乘积高位,存储到ACC中,右半部分的16位就是乘积低位,存储到MQ中。
算术逻辑单元(ALU,Arithmetic and Logic Unit),是算术运算和逻辑运算的部件。算术运算包括加、减、乘的整数运算,逻辑运算是与、或、非和异或等逻辑操作,还有移位、比较和传送等操作。
移位运算,将一个字符向左或向右移动位,或是浮动特定位,包含带符号延伸和无符号延伸,在程序中应用很广泛。
3.寄存器
在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。
这些寄存器用来储存少量数据,以供cpu能快速使用.
-
数据寄存器
数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。
数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。
数据寄存器的作用是 :
(1)作为CPU和主存、外围设备之间信息传送的中转站;
(2)弥补CPU和主存、外围设备之间在操作速度上的差异;
(3)在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。 -
指令寄存器
指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。
当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。
指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器(Instruction Decoder,ID)就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。
指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。 -
程序计数器
程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址。
在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。
当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则(PC)+1àPC,若为双字长指令,则(PC)+2àPC,以此类推。
但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。
因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构。 -
地址寄存器
地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。
由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。
当CPU和主存进行信息交换,即CPU向主存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器。
如果我们把外围设备与主存单元进行统一编址,那么,当CPU和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器。 -
累加寄存器
累加寄存器通常简称累加器(Accumulator,AC),是一个通用寄存器。
累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。
显然,运算器中至少要有一个累加寄存器。 -
程序状态字寄存器
程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式。
程序状态字寄存器用来保存由算术/逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常用1位触发器来保存。
除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。
因此,程序状态字寄存器是一个保存各种状态条件标志的寄存器。
下面是cpu和主存框架图

4.MMU
属于cpu
mmu的作用是进行虚拟地址和物理地址的相互转换.
虚拟地址和物理地址的关系记录在页表里,页表存在内存中.
TLB是一个高速缓存,用于缓存页表转换的结果,从而减少页表查询的时间.
如果TLB中没有命中,那么就用TWU去内存中遍历查询页表,得到物理地址或虚拟地址,并记录在TLB中.
5.cache
属于cpu
首先说明,cache被称为高速缓存,为什么有cache,是因为虽然内存存取数据速度很快,但是和cpu相比还是太慢了,cache比内存快上百倍,存取速度和cpu相当, 所以先把内存的数据提前加载到cache里,做个缓存,以供cpu使用.
cache分为L3 cache /L2 cache / L1 cache, L1 cache又分为指令缓存cache和数据缓存cache
L1和L2 cache在同一个cpu上,L3 cache一般是多个cpu间共享

下图为计算机的所有储存数据的类型
1.寄存 2.缓存 3.内存 4.硬盘

二.CPU的运行过程
cpu的运行过程

1.取指令
cpu读取 程序计数器 所指的在 指令cache 中的一条指令,将指令读取到到指令寄存器IR.
2.分析并发出指令
指令译码器ID对指令进行分析
操作控制器CU和时序产生器TG根据指令的功能向有关部件发出控制命令,执行控制指令的操作
3.执行指令
执行指令分为两步:取操作数和进行运算。
取操作数:CPU通过寻址操作从 数据缓存cache 中读取操作数到寄存器中,暂时保存起来
进行运算:运算单元通过指令中的操作码,对寄存器中的数进行操作
4.指令计数
修改程序计数器PC,使其指向下一条指令地址. 继续循环以上步骤,直至没有指令.
cpu的三级缓存的大小
一级缓存,容量最小,单位都是KB,不同CPU之间一级缓存没有差距,
二级缓存,基本都是个位数MB,除了一些服务器CPU会有10几MB之外,
三级缓存,常见的CPU的三级缓存只有10MB左右(现在AMD EPYC 的X系列已经达到768MB的三级缓存)。
cpu和io的关系
计算机硬件上使用DMA来访问磁盘等IO,也就是请求发出后,CPU就不再管了,直到DMA处理器完成任务,再通过中断告诉CPU完成了。所以,单独的一个IO时间,对CPU的占用是很少的,阻塞了就更不会占用CPU了,因为程序都不继续运行了,CPU时间交给其它线程和进程了。虽然IO不会占用大量的CPU时间,但是非常频繁的IO还是会非常浪费CPU时间的,所以面对大量IO的任务,有时候是需要算法来合并IO,或者通过cache来缓解IO压力的。
相关文章:
cpu的架构
明天继续搞一下cache,还有后面的, 下面是cpu框架图 开始解释cpu 1.控制器 控制器又称为控制单元(Control Unit,简称CU),下面是控制器的组成 1.指令寄存器IR:是用来存放当前正在执行的的一条指令。当一条指令需要被执行时,先按…...
FastAPI和Flask:构建RESTful API的比较分析
Python 是一种功能强大的编程语言,广泛应用于 Web 开发领域。FastAPI 和 Flask 是 Python Web 开发中最受欢迎的两个框架。本文将对 FastAPI 和 Flask 进行综合对比,探讨它们在语法和表达能力、生态系统和社区支持、性能和扩展性、开发工具和调试支持、安…...
用康虎云报表打印二维码
用康虎云报表打印二维码 1 安装: 下载地址: https://www.khcloud.net/cfprint_download, 选择Odoo免代码报表模块和自定义SQL报表模块 下载下来后解压缩,一共有四个模块 cf_report_designer # 报表设计模块 cf_sale_print_ext # 演示模块 cf_sql_report cfprint …...
网盘直链下载助手
一、插件介绍 1.介绍 这是一款免费开源获取网盘文件真实下载地址的油猴脚本,基于 PCSAPI,支持 Windows,Mac,Linux 等多平台,支持 IDM,XDown,Aria2 等多线程下载工具,支持 JSON-RPC…...
【EI复现】售电市场环境下电力用户选择售电公司行为研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
并发——何谓悲观锁与乐观锁
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会…...
【C++】模板
1.模板的概念 2.函数模板基本语法 3.未完待续。。。 https://www.bilibili.com/video/BV1et411b73Z?p169&spm_id_frompageDriver&vd_sourcefb8dcae0aee3f1aab700c21099045395...
【Echart地图】jQuery+html5基于echarts.js中国地图点击弹出下级城市地图(附完整源码下载)
文章目录 写在前面涉及知识点实现效果1、实现中国地图板块1.1创建dom元素1.2实现地图渲染1.3点击地图进入城市及返回 2、源码分享2.1 百度网盘2.2 123云盘2.3 邮箱留言 总结 写在前面 这篇文章其实我主要是之前留下的一个心结,依稀记得之前做了一个大屏项目的时候&…...
Python AI 绘画
Python AI 绘画 本文我们将为大家介绍如何基于一些开源的库来搭建一套自己的 AI 作图工具。 需要使用的开源库为 Stable Diffusion web UI,它是基于 Gradio 库的 Stable Diffusion 浏览器界面 Stable Diffusion web UI GitHub 地址:GitHub - AUTOMATI…...
mongodb:环境搭建
mongodb 是什么? MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库 为什么要用mongodb? (1)MongoDB提出的是文档、集合的概念,使用BSON&am…...
Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》
阿丹: Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…...
【Github】Uptime Kuma:自托管监控工具的完美选择
简介: Uptime Kuma 是一款强大的自托管监控工具,通过简单的部署和配置,可以帮助你监控服务器、VPS 和其他网络服务的在线状态。相比于其他类似工具,Uptime Kuma 提供更多的灵活性和自由度。本文将介绍 Uptime Kuma 的功能、如何使…...
linux环形缓冲区kfifo实践3:IO多路复用poll和select
基础知识 poll和select方法在Linux用户空间的API接口函数定义如下。 int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll()函数的第一个参数fds是要监听的文件描述符集合,类型为指向struct pollfd的指针。struct pollfd数据结构定义如下。 struct poll…...
SpringBoot系列---【使用jasypt把配置文件密码加密】
使用jasypt把配置文件密码加密 1.引入pom坐标 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version> </dependency> 2.新增jasypt配置 2.1…...
大数计算(大数加法/大数乘法)
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…...
【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
前言 【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio 构建React完成点餐H5页面一、Cloud Studio介绍1.1 Cloud Studio 是什么1.2 相关链接1.3 登录注册 二、实战练习2.1 初始化工作空间2.2 开发一个简版的点餐系统页面1. 安装 antd-mobile2. 安装 less 和 less-loader3. …...
杭电多校 Rikka with Square Numbers 费马平方和定理
👨🏫 Rikka with Square Numbers 🧀 参考题解 🍻 AC code import java.util.Scanner;public class Main {static boolean isSqu(int x){int t (int) Math.sqrt(x);return t * t x;}public static void main(String[] args…...
跟禹神VUE——组件间的通信方式(props配置项、组件间自定义事件、全局事件总线、消息订阅与发布、VUEX)
一、通过props配置项传递数据(适用于父组件给子组件传递数据) 父组件向子组件传递数据: 父组件代码:在子组件的标签中传递数据 <template><div><h2>学校名称:{{schoolName}}</h2><!-- 方…...
《2023年中国企业数字化转型发展白皮书》发布
导读 本报告主要采用市场调查、行业深度访谈、桌面研究等方法,并使用艾媒咨询旗下各大数据计算系统和相关计算模型。 对部分相关的公开信息进行筛选,通过对行业专家、相关企业与网民进行深度访谈,了解相关行业主要情况,获得相应…...
基于Python 简易实现接口测试自动化
目录 实现思路 统筹脚本 请求封装 日志封装 结果比对 结果邮件 用例获取及数据格式化 请求url转换 测试用例excel结构 测试报告 邮件接收结果 资料获取方法 实现思路 使用excel管理用例用例信息,requests模块发送http请求,实现了记录日志&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
