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

news2024/11/24 22:54:35

今天和几位单位大佬聊天时,讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作?乍一看这个问题平平无奇,CPU只是把立即数01H放在了地址为0001的内存里,但仔细想想这个问题远没有那么简单,由于现代计算机体系中CPU速度比内存要快2到3个个数量级,因此从CPU执行MOV指令,到实际把01H写入内存之间,还有非常漫长而复杂的过程。

为了回答好这个问题,我翻阅了一些资料,发现不同时代的CPU在执行这个操作时,行为也不一样,下面分享一下我的成果。

一.386及之前的CPU

从现在的角度来看,386及以前的CPU完全是上古时期的物件,还没有指令流水线的概念,当CPU执行这条汇编指令时,会和我们的第一印象差不多,基本会是按照以下步骤进行工作:

1.取指、译码,简单说就是从可执行文件中把MOV的二进制表示100010翻译出来。

2. 取操作数,将立即数01H加载到内部寄存器。

3. 取内存地址,将内存地址0001H(地址为0001的内存单元,不考虑段寄存器加偏移量的形式)加载到内部寄存器。

4. 指令执行,将内存地址0001H所指向的内存单元与内部寄存器中的数据(即01H)进行写入操作,完成将01H写入到内存单元000H1的操作。

二.486与奔腾时代之前的CPU

这个阶段的CPU和386相比增加了指令流水线的概念,我们知道CPU的每个动作都需要用晶体震荡而触发,想完成一个最简单的指令也需要取指、译码、取操作数、执行以及获取操作结果等若干步骤,而每个步骤都需要一次晶体震荡才能推进,因此在流水线技术出现之前执行一条指令至少需要5到6次晶体震荡周期才能完成。

指令/时刻

T1

T2

T3

T4

T5

MOV

取指

译码

取操作数

执行

取结果

 

而流水线的思想就是将不同指令的译码、寻址、执行等操作,放在一个震荡周期中并发完成。

指令/时刻

T1

T2

T3

T4

T5

T6

T7

T8

指令1

取指

译码

取操作数

执行

取结果 

 

 

 

指令2

 

取指

译码

取操作数

执行

取结果 

 

 

指令3

 

 

取指

译码

取操作数

执行

取结果 

 

指令4

 

 

 

取指

译码

取操作数

执行

取结果 

指令5

 

 

 

 

取指

译码

取操作数

执行

指令6

 

 

 

 

 

取指

译码

取操作数

指令7

 

 

 

 

 

 

取指

译码

指令8

 

 

 

 

 

 

 

取指

 

但上述升级对于MOV [0001H] 01H指令的执行没有带来太多本质变化。

三、现代多核CPU

在2006年英特尔发布一代酷睿处理器之后,现代桌面CPU正式进入了多核时代,现代CPU在执行指令时会和内存交互,但CPU本身只是直接操作高速缓存而不会直接操作内存。

MESI协议简介

现代X86 CPU的高速缓存(Cache),包括多级缓存(L1、L2、L3)。高速缓存是位于CPU内部的一块快速访问的存储区域,用于临时存储从主内存中读取的指令和数据。当CPU需要访问内存时,它首先会检查高速缓存,如果所需数据已经存在于高速缓存中,CPU会直接从高速缓存中读取或写入数据,无需访问主内存。其中L1和L2为每个CPU核心的专属缓存,L3为各核心的共享使用。 CPU多核心之间的高速缓存同步一般按照MESI协议进行,即每个缓存行都有四个状态,分别是E(exclusive)、M(modified)、S(shared)、I(invalid),说明如下:

M:代表该缓存行中的内容被修改,并且该缓存行只被缓存在该CPU中。这个状态代表缓存行的数据和内存中的数据不同。

E:代表该缓存行对应内存中的内容只被该CPU缓存,其他CPU没有缓存该缓存对应内存行中的内容。这个状态的缓存行中的数据与内存的数据一致。

I:代表该缓存行中的内容无效。

:该状态意味着数不只存在在本地CPU缓存中,还存在其它CPU的缓存中。这个状态的数据和内存中的数据也是一致的。不过只要有CPU修改该缓存行都会使该行状态变成 I 。

四种状态的状态转移图如下:

8fba2176cb0b4130a5fb01c77bf402f2.png

 

​在初始执行MOV [0001H] 01H,实际执行这条语句的核心上会触发local write的动作,这实际会把内存地址对应的缓址行置为Modify状态,而Modify状态下内存和缓存的内容实际是不一致的。而01H到底会不会被写回内存也是需要讨论的。

 01H被显式写入内存0001H:这种情况也有其他其它核心也发起了对于0001H地址的读取操作,即发起remote read,在这种情况缓存的状态会从Modify迁移到Share状态,而Share状态下缓存中的数据会被显示的写回内存。也就是MOV [0001H] 01H被实际执行完成。

 01H未被写入内存0001H:这种情有其他其它核心发对于地于0001H的写操作,即发起remote wri,e,这种情况下,在这种情况缓存的状态会从Modify迁移到Invalid状态,而Invalid状态下的调整缓存数据不会再被写入内存了。

内存写入状态未知:如果0001H地址的读写一直由同一核心操作,那么这种情况下缓存的状态就一直是Modify,那么这时候01H是否被写入内存,就取决于0001H这个内存地址是否能始终处于热点访问状态了,如果该地址一直在缓存中不被换出的话,那么01H的值有可能不会被写入内存,只有当该地址从缓存中换出时才会触发内存的回写操作。

总之,现代的CPU在执行MOV [0001H] 01H这样一条平平无奇的指令时,其实背后也做了很多工作,甚至操作完成后01H的值到底有没有写入到内存地址0001H也是很不确定的,希望通过本文梳理各阶段CPU执行MOV [0001H] 01H指令的过程,可以帮助读者更好的理解现代CPU的工作原理。

 

 

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

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

相关文章

SystemVerilog之覆盖率详解

文章目录 1.0 覆盖率前言1.1 覆盖率类型1.2 覆盖策略及覆盖组1.3 覆盖率数据采样1.3.1 bin的创建与使用1.3.2 条件覆盖率1.3.3 翻转覆盖率1.3.4 wildcard覆盖率1.3.5 忽略bin与非法bin 1.4 交叉覆盖率1.4.1 排除部分cross bin1.4.2 精细化交叉覆盖率1.4.3 单个实例的覆盖率1.4.…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续…

【简单认识zookeeper+kafka分布式消息队列集群的部署】

文章目录 一、zookeeper1、定义2、工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制(1)第一次启动选举机制(2)非第一次启动选举机制 7、部署zookeeper群集 二、消息队列概述1、为什么需…

《线性调频雷达典型有源干扰抑制技术研究》阅读记录

文章目录 《线性调频雷达典型有源干扰抑制技术研究》 阅读记录(1)研究背景与意义:(2)有源压制干扰(3)有源欺骗式干扰(4)压制干扰的抑制(5)欺骗干扰…

面试热题(全排列)

给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 先在这里说明一下排列和组合的区别? 组合:是指从一…

[gdc]Rendering ‘God of War Ragnark‘

gdc23, sony santa monica关于god of war的分享; back ground 作者stephen mcauley现在是santa monica的technical director;20年加入santa monica,作为rendering lead,有9年的经验,之前在ubisoft montre…

[鹤城杯 2021]Middle magic 解题思路过程

过程 打开题目&#xff0c;是一道PHP的代码审计。代码如下&#xff1a; <?php highlight_file(__FILE__); include "./flag.php"; include "./result.php"; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)…

河道水位自动监测预警 yolov5

河道水位自动监测预警系统基于yolov5网络模型AI视频智能水尺读数技术&#xff0c;河道水位自动监测预警系统通过在河道周边布设监控摄像头&#xff0c;实时监测水位的变化&#xff0c;一旦水位超过预设阈值&#xff0c;将自动发出预警信号&#xff0c;并提示相关人员采取相应的…

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层&#xff08;一&#xff09;物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据…

Java 基础知识点

Object 类相关方法 getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象&#xff0c; 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝&#xff0c;对引用类型拷贝引用&#xff1b;深拷贝对基本类型进行值拷贝&#xff0c;对…

CentOS7.7.1908升级python3版本

介绍 本文将详细介绍在CentOS7.7.1908系统的服务器将自带的python版本升级到3.8.0版本的过程。 在升级前CentOS7.7.1908中已经存在旧python版本。 查看CentOS版本命令&#xff1a; cat /etc/centos-release升级前后的python版本&#xff08;python3升级前为3.6.8&#xff09…

开箱报告,Simulink Toolbox库模块使用指南(三)——Simscape 电路仿真模块

文章目录 前言 Simscape 电路仿真模块 模型搭建 仿真求解 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;二&#xf…

grafana中利用变量来添加dashboard详情页地址实现点击跳转

背景 最近弄grafana的dashboard,突然想到各个dashboard之前可以直接跳转到不同详细页面的面板,于是找了找实现方法 实现 以stat 格式的面板为例,显示出各个pod的对应状态, PromQL是(avg(kube_pod_status_phase{phase"Running", namespace!"kube-system"…

用友U8+CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

缓存 基础

在项目里面缓存是怎么用的? 项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果? 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个问题…

大数据课程I4——Kafka的零拷贝技术

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的零拷贝技术&#xff1b; ⚪ 了解常规的文件传输过程&#xff1b; 一、常规的网络传输原理 表面上一个很简单的网络文件输出的过程&#xff0c;在OS底层&…

leetcode 力扣刷题 滑动窗口 部分题解(记录)

力扣刷题 滑动窗口相关的部分题解 209. 长度最小的子数组904. 水果成篮76. 最小覆盖子串 209. 长度最小的子数组 leetcode题目链接 209.长度最小的子数组 题目内容是这样的&#xff1a;给定一个含有 n个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的…

不同路径 II——力扣63

class Solution {public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n=

Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel. JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . Easy Excel 我们今天要说到就是 Easy Excel , 这个是阿里的项…

学习笔记整理-JS-01-语法与变量

文章目录 一、语法与变量1. 初识JavaScript2. JavaScript的历史3. JavaScript与ECMAScript的关系4. JavaScript的体系5. JavaScript的语言风格和特性 二、语法1. JavaScript的书写位置2. 认识输出语句3. REPL环境&#xff0c;交互式解析器4. 变量是什么5. 重点内容 一、语法与变…