一步步编写操作系统 28 cpu乱序执行

乱序执行(乱序执行译作异步执行更贴切),是指在cpu中运行的指令并不按照代码中的顺序执行,而是按照一定的策略打乱顺序执行,也许后面的指令先执行,当然,得保证指令之间不具备相关性。

举个简单的例子,比如如下两行代码就无法乱序执行。

mov eax, [0x1234]
add eax, ebx

第2行的add加法,需要知道eax的值,但eax的值需要在第1行中的mov操作后才能确定,而且内存访问相对来说非常慢,第2步不得不等待第1步完成后才能进行。所以只能是先执行第1步,再执行第2步。

如果将上面第2步的代码修改一下,如下:

mov eax, [0x1234]
add ecx,ebx。

这样就可以在执行第1步内存访问后的等待中执行第2步啦。由于第2步不依赖第1步,所以有利于放在流水线上。

x86最初用的指令集是CISC,Complex Instruction Set Computer,意为复杂指令集计算机,为什么复杂呢?当初的cpu工程师们为了让cpu更加强大,不断地往cpu中添加各种指令,甚至在cpu硬件一级直接支持软件中的某些操作,以至于指令集越来越庞大笨重复杂。如push指令,它相当于多个子操作的合成,拿保护模式中的栈来说,push eax相当于:

  • push指令先将栈指针esp减去操作数的字长,如sub esp,4。
  • 再将操作数mov到新的esp指向的地址,如mov [esp],eax。

这两个子操作合成了一个指令,其中每一个子操作称为微操作。

与CISC指令集相对应的是RISC,Reduced Instruction Set Computer。意为精简指令集计算机。根据二八定律,最常用的指令只有20%,但它们占了整个程序指令数的80%。而不常用的指令占80%,但它们只占整个程序指令数的20%。这就是RISC指令集的由来,它精简保留了那些常用的指令,这些指令大多数都是不可再细分的,也就是,它们基本上都是属于微操作级别的指令啦。所以,x86发展到后来,虽然还是CISC指令集,但其内部已经采用RISC内核,译码对于x86体系来说,除了按照指令格式分析机器码外,还要将CISC指令分解成多个RISC指令。当一个“大”操作被分解成多个“微”操作时,它们之间通常是独立无关联,所以非常适合乱序执行。

还是拿栈举例。如下三行代码:

mov eax , [0x1234]
push eax
call function

第1步需要内存访问,由于内存较慢,所以寻址等待过程中可以做其它事。

第2步的push指令拆分成 sub esp ,4和mov [esp], eax。

第3步的call函数调用,需要在栈中压入返回地址,所以说call指令需要用栈指针。

由于第2步中的微操作sub esp,4,可以让cpu知道esp的最新值,不用等到mov [esp], eax完成,第3步call指令向栈中压入返回地址的操作就可以执行了。故第2步未执行完就开始第3步的执行了,也许第3步先于第2步才完成。

总结下,乱序执行的好处就是后面的操作可以放到前面来做,利于装载到流水线上提高效率.

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

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

相关文章

【POJ - 1741】Tree(树分治,容斥,点分治,模板题)

题干: Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)The min distance between node u and v. Give an integer k,for every pair (u,v) of vertices is called valid if and only if dist(u,v) not e…

Apollo进阶课程㉚丨Apollo ROS背景介绍

原文链接:进阶课程㉚丨Apollo ROS背景介绍 ROS是机器人学习和无人车学习最好Linux平台软件,资源丰厚。无人车的规划、控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。 上周阿波君为大家详细介绍了「进阶课程㉙Apollo控制技术详…

一步步编写操作系统 29 cpu缓存简介

缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解“瓶颈设备”的压力。 之前介绍实模式…

【CodeForces - 1096D】Easy Problem(dp,思维)

题目大意: 现在有一个由小写字母组成的字符串,去掉这个字符串的第i个位置的字符会有ai的代价。你的任务是去掉这个字符串中的一些字符使得该字符串中不包含子序列hard,且去掉字符的代价之和尽可能小。 输入 第一行一个整数n表示字符串的长…

一步步编写操作系统 30 cpu的分支预测简介

人在道路的分岔口时要预测哪条路能够到达目的地,面对众多选择时,计算机也一样要抉择,毕竟计算机的运行方式是以人的思路来设计的,计算机中的抉择其实就是人在抉择。 cpu中的指令是在流水线上执行。分支预测,是指当处理…

【HDU - 5492】Find a path(dp,tricks)

题干: Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each grid in this maze contains a number, which is called the magic value. Frog now stays at grid (1, 1), and he wants to go to grid (N, M). For each step,…

Apollo进阶课程㉜丨Apollo ROS原理—1

原文链接:进阶课程㉜丨Apollo ROS原理—1 ROS在开发过程中,基于功能把整个自动驾驶系统分成多个模块,每个模块负责自己消息的接收、处理、发布。当模块需要联调时,通过框架可以把各个模块快速的集成到一起。 上周阿波君为大家详细…

Ubuntu下安装Chrome浏览器的两个方法

一、通过直接下载安装Google Chrome浏览器deb包。 打开Ubuntu终端,以下为32位版本,使用下面的命令。 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 以下为64位版本,使用下面的命令。 wget https://dl.…

【EOlymp - 2908】SumThem All(数位统计,tricks)

题干: Find the sum of all the digits in all the integers between lowerBound and upperBound inclusive. Input Each line contains two integers lowerBound and upperBound (0 ≤ lowerBound ≤ upperBound ≤ 2109). Output For each test case print i…

Apollo进阶课程㉝丨Apollo ROS原理—2

原文链接:进阶课程㉝丨Apollo ROS原理—2 在ROS系统中,从数据的发布到订阅节点之间需要进行数据的拷贝。在数据量很大的情况下,很显然这会影响数据的传输效率。所以Apollo项目对于ROS第一个改造就是通过共享内存来减少数据拷贝,以…

Java 10 常用集合继承关系图

概述 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。 类图如下: 1、Iterable与Iterator接口之间的区别 我看到好多网上的文章类图里面Collection 是继承Iterator接口&a…

【CodeForces - 673D】Bear and Two Paths(构造,tricks)

题干: Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities. Bear Limak was once in a city a and he wanted to go to a cit…

Apoll进阶课程㉞丨Apollo ROS原理—3

原文链接:进阶课程㉞丨Apollo ROS原理—3 机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具,可以轻松访问传感器数据,处理数据,并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计…

JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别

ava虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。 举例说明含义: -Xms128m 表示JVM Heap(堆内存)最小尺寸128MB,初始分配 -Xmx512m 表示JVM Heap(堆内存)最大允许…

SM3密码杂凑算法原理

目录 1.概述 2、算法描述 2.1 概述 2.2 填充 2.3 迭代压缩 2.3 消息扩展 2.4 压缩函数 2.5 杂凑值 1.概述 SM3是我国采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体…

【Comet OJ - Contest #5 - C】迫真小游戏(优先队列,贪心构造,树,字典序)

题干: H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏。 H君玩的小游戏可以抽象成一棵 nn 个节点的有根树,树以 11 为根,每个点的深度定义为其到根的简单路径上的点数(根的深度为 11)。 H君有 nn 个…

动手学无人驾驶(1):交通标志识别

今天主要介绍无人驾驶当中深度学习技术的应用。 本文是根据博客专家AdamShan的文章整理而来,在此表示感谢。 关于深度学习的图像分类技术,网上已有很多关于深度学习的课程(如吴恩达老师的深度学习专项课程),故本文不对…

《操作系统真象还原》-阅读笔记(上)

第一章 配置bochs,进入bochs simulator后一直是黑屏,原来默认是调试模式,需要输入C(continue)来让调试继续。 第二章 主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS&a…

Apollo进阶课程㉟丨Apollo ROS原理—4

原文链接:进阶课程㉟丨Apollo ROS原理—4 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架。 ROS本身是基于消息机制的,可以根据功能把软件拆分成为各个模块,每…

【HDU - 5917】Instability(规律,结论,Ramsey定理,知识点,tricks)

题干: Long long ago, there was a prosperous kingdom which consisted of n cities and every two cites were connected by an undirected road. However, one day a big monster attacked the kingdom and some roads were destroyed. In order to evaluate th…