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能快速使用.

  1. 数据寄存器
    数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。
    数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。
    数据寄存器的作用是 :
    (1)作为CPU和主存、外围设备之间信息传送的中转站;
    (2)弥补CPU和主存、外围设备之间在操作速度上的差异;
    (3)在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

  2. 指令寄存器
    指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。
    当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。
    指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器(Instruction Decoder,ID)就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。
    指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。

  3. 程序计数器
    程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址。
    在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。
    当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则(PC)+1àPC,若为双字长指令,则(PC)+2àPC,以此类推。
    但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。
    因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构。

  4. 地址寄存器
    地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。
    由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。
    当CPU和主存进行信息交换,即CPU向主存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器。
    如果我们把外围设备与主存单元进行统一编址,那么,当CPU和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器。

  5. 累加寄存器
    累加寄存器通常简称累加器(Accumulator,AC),是一个通用寄存器。
    累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。
    显然,运算器中至少要有一个累加寄存器。

  6. 程序状态字寄存器
    程序状态字(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压力的。



 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模型性能的主要指标

主要参数 ROC 曲线和混淆矩阵都是用来评估分类模型性能的工具 ROC曲线(Receiver Operating Characteristic curve): ROC曲线描述了当阈值变化时,真正类率(True Positive Rate, TPR)和假正类率&#xff0…

Android Studio跳过Haxm打开模拟器

由于公司权限限制无法安装Haxm,这个时候我们可以试试Arm相关的镜像去跳过Haxm运行模拟器。解决方案:安装API27以下的Arm Image. #ifdef __x86_64__if (sarch "arm64" && apiLevel >28) {APANIC("Avds CPU Architecture %s i…

NPM与外部服务的集成(上)

目录 1、关于访问令牌 1.1 关于传统令牌 1.2 关于粒度访问令牌 2、创建和查看访问令牌 2.1 创建访问令牌 在网站上创建传统令牌 在网站上创建粒度访问令牌 使用CLI创建令牌 CIDR限制令牌错误 查看访问令牌 在网站上查看令牌 在CLI上查看令牌 令牌属性 1、关于访问令…

mysql数据库第十二课------mysql语句的拔高2------飞高高

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

【C++】开源:CGAL计算几何库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍CGAL计算几何库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,…

【java】mybatis-plus代码生成

正常的代码生成这里就不介绍了。旨在记录实现如下功能: 分布式微服务环境下,生成的entity、dto、vo、feignClient等等api模块,需要和mapper、service、controller等等分在不同的目录生成。 为什么会出现这个需求? mybatis-plus&am…

【计算机视觉|生成对抗】用深度卷积生成对抗网络进行无监督表示学习(DCGAN)

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 链接:[1511.06434] Unsupervised Representation Learning with Deep Conv…

微信小程序中键盘弹起输入框自动跳到键盘上方处理

效果展示 键盘未弹起时 键盘弹起后: 实现方式 话就不多说了 我直接贴代码了 原理就是用你点击的输入框的底部 距离顶部的位置 减去屏幕高度除以2,然后设成负值,再将这个值给到最外层相对定位的盒子的top属性,这样就不会出现顶…

服务器安装JDK

三种方法 方法一: 方法二: 首先登录到Oracle官网下载JDK JDK上传到服务器中,记住文件上传的位置是在哪里(我放的位置在/www/java),然后看下面指示进行安装 方法三: 首先登录到Oracle官网下载…

修改IDEA的idea.vmoptions参数导致IDEA无法打开(ReservedCodeCacheSize)

事发原因 Maven导依赖的时候OOM,因此怀疑是内存太小,尝试修改idea.vmoptions的参数,然后发现IDEA重启后打不开了,卸载重装后也无法打开。。。 实际上如果导包爆出OOM的话应该调整下图参数,不过这都是后话了 解决思路…

王道机组难题分析

第四章 指令系统 大端方式:就是高地址存放高位, LSB的意思是:全称为Least Significant Bit,在二进制数中意为最低有效位 MSB的意思是:全称为Most Significant Bit,在二进制数中属于最高有效位 操作数可以理…

HCIP学习--BGP2

目录 前置内容 BGP宣告问题 BGP自动汇总问题 BGP 的认证 BGP的聚合(汇总) 标准的BGP聚合配置 非标准的BGP聚合 路由传递干涉策略 抑制列表 Route-map 分发列表 前缀列表 BGP在MA网络中下一跳问题-ICMP重定向 查看与某个邻居收发的路由 配置 有条件打破IBGP水平…

腾讯云轻量应用服务器镜像应用模板清单大全

腾讯云轻量应用服务器支持多种应用模板镜像,Windows和Linux镜像模板都有,如:宝塔Linux面板腾讯云专享版、WordPress、WooCommerce、LAMP、Node.js、Docker CE、K3s、宝塔Windows面板和ASP.NET等应用模板镜像,腾讯云服务器网分享腾…

04 - 分离头指针情况、理解HEAD和branch

查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 1. 分离头指针2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分离头指针 分离头指针detached HEAD是一种HEAD指针指向了某一个具体的 commit id,而不是分支的情况。 切换…

HTTP请求性能分析 - 简单

使用随手可得的工具,尽量少的前置要求,来完成任务。 0. 目录 1. 前言2. 分析工具2.1 基于Chrome DevTools 的Timing2.1.1 关于Network标签页下的Timing部分2.1.2 一些注意项 2.2 基于Curl 命令 3. 剩下的工作 1. 前言 对于业务开发选手而言,…

Vision Transformer模型入门

Vision Transformer模型入门 一、Vision Transformer 模型1,Embedding 层结构详解2,Transformer Encoder 详解3,MLP Head 详解 二、ViT-B/16 网络结构三、Hybrid 模型详解四、ViT 模型搭建参数 一、Vision Transformer 模型 总体三个模块&am…

无涯教程-Perl - getprotobynumber函数

描述 此函数在标量context中将协议NUMBER转换为其对应的名称,在列表context中将其名称和相关信息转换为:($name,$aliases,$protocol_number)。 语法 以下是此函数的简单语法- getprotobynumber NUMBER返回值 此函数针对错误返回undef,否则返回标量context中的协议编号,并在…

HBase API

我们之后的实际开发中不可能在服务器那边直接使用shell命令一直敲的&#xff0c;一般都是通过API进行操作的。 环境准备 新建Maven项目&#xff0c;导入Maven依赖 <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>…

Java中创建线程三种方式

继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程 继承Thread类 /*** 使用集成Thread的方式实现多线程*/ public class Match1 {public static void main(String[] args) {Runner liuxiang new Runner();//创建一个新的线程liuxiang.setName(&quo…

当执行汇编指令MOV [0001H] 01H时,CPU都做了什么?

今天和几位单位大佬聊天时&#xff0c;讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作&#xff1f;乍一看这个问题平平无奇&#xff0c;CPU只是把立即数01H放在了地址为0001的内存里&#xff0c;但仔细想想这个问题远没有那么简单&#xff0c…