一条指令在CPU里如何执行?

这篇具有很好参考价值的文章主要介绍了一条指令在CPU里如何执行?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人才疏学浅,如果我的内容有明显的错误,或者有疑问的地方,衷心希望您能和我联系,给出建议和指导,或者与我交流相关知识。我会对你表示无限的感激!欢迎指正!

“灵魂画手”上线:
一条指令在CPU里如何执行?

老师上周单独布置给我的任务:让我去搞清楚“一条指令在cpu里是如何执行的呢?”。然后可以画张图第二节课讲给同学们。
回去后,我想这首先得去搞清楚CPU的原理,对于我这个所谓的计算机相关专业的学生,我们专业根本没开计算机组成原理这节课!!!(5555555)一时间我真的是懵逼上加懵逼。。。

在通过查阅资料,刷B站搬运的视频(国外的印度小伙搞这些教程确实挺厉害的,我都竟然能听懂)。直接开讲吧,组织组织语言,过几天就要上台介绍了…

其实这个问题我感觉问的有的宽泛,如果直接从原理开讲,这直接就是《计组》开课了,一下子根本讲不完,况且我学术浅薄,能达到像老师一样去讲课,去“传道授业解惑”的高度,还挺遥远。。。

-----------------正文------------------

老师上周单独布置给我的任务:让我去搞清楚“一条指令在cpu里是如何执行的呢?”。然后最好画张图来讲。课后我查阅了很多资料,在我准备画图和思考怎么讲解时,我想,如果直接从原理开讲,这直接就是《计组》开课了,一下子根本讲不完,况且我学术浅薄,能达到像老师一样“传道授业解惑”的高度,还挺遥远。。。我想,我们目前在上Linux课程,倒不如从我们都熟悉的地方切入,即“Linux系统中,一条指令在CPU里是如何执行的?”,去看看CPU大概是怎么工作的。

好的,看图,相信我们对除了CPU这一块流程比较眼熟吧(当时冯老师让我们都画一画Shell解析命令的步骤图),这一次,我就从我们都熟悉的命令来走一走这个流程,“mkdir jd”!!!

在开始流程前,我有一个问题想问大家:你看到这个题目的时候,你会不会和我一样觉得,诶,"mkdir jd"这不就是一条指令吗?对,也不对,还是得区分一下!在Linux中,你可以叫这条命令也可以叫这条指令,它只是我们人类在操作系统的命令行中指示计算机执行操作的文本字符串! 随你怎么叫它。

这和CPU中的指令一定要区别开来,我们计算机领域说指令的话,一般都是指CPU有关的指令!它是cpu的处理数据的基本单位!!!(划重点,会考!!)它用于告诉 CPU 完成特定的操作或任务,这些指令可以执行各种不同的任务。

好的,开始走流程,输入命令后,Shell解释器首先对该命令进行解析,并通过系统调用向内核发送请求,内核接收到请求后,(也向CPU去发起请求,得到管理这些资源的权限等)在内存中创建进程,并为该进程分配内存空间;设置PC值,这个PC值待会会在CPU里提到,这两个PC不是一个东西,但有联系(内存中的PC可以看作是CPU和内存之间的一个通信标记。在程序执行期间,内存中的PC和CPU中的PC会不断地交换和更新信息,以保持CPU和内存之间的同步。以确保下一次CPU从正确无误的地址读取指令。);加载指令,即内核在磁盘中搜索到有可执行程序(/bin/mkdir),然后把它加载到内存中。

这个二进制可执行程序里呢,就有大量的指令,我们可以这么理解:程序是指令的有序集合。这些指令被组合成一种特定的指令集。它们在加载前就已经被程序员们设计和编译好的,都以二进制形式表示,这种已经编译好的指令我们称为机器指令,组成的指令集称为机器指令集(没有编译好的,也就是我们人类可读的源代码)。

那好,/bin/mkdir程序的机器指令集已经在内存中有序加载了,且每个指令都被存储在一个连续的内存地址中。此时认真听的同学应该会有疑问,诶,那你刚刚不是说机器指令集都是编译好的,即都是大量的01组成,你这里画的欠妥。是的,你说的没错,比如执行fork()系统调用时会涉及到多个机器指令。(有兴趣的同学可以了解一下常见的指令,如Load加载啊、加减乘除啊,Jump跳转啊等等),正是这些小小的指令,一个一个的组成了我们的CPU可以处理的可执行的程序,因为本人的时间和画图空间有限,所以在这里需要你将图中的调用函数当作一个指令,注意是一个,然后我们开始看CPU内部是如何执行这个指令的

这里的CPU有两个核心部件,一个控制器(CU),一个运算器(ALU),然后CPU中分布着一些有功能的寄存器(Reg),CPU与“外界”进行“交互”(数据传输啊,控制啊)就是通过总线(有地址总线、数据总线、控制总线这里就不多说了)。首先控制器中有一个叫指令计数器的部件,管它叫PC(Program Counter),它是一种特殊的寄存器,它存储着当前正在执行的指令的地址,通过地址总线将该地址发送到内存中。比如现在是0x00,代表着我要执行fork()这个指令,这时候指令寄存器(Instruction Register,IR)出场了,它从内存中读取这条指令并将其存储到指令寄存器中。这个过程呢就是我们说的取指(Fetch)

接下来呢,指令译码器出场了,它将刚刚拿到的指令(我把它比喻天书一堆010101嘛)转换为具体运算(刚刚一堆0101的天书经过译码后,我知道了这一串01代码原来是这个意思(比如说是+或者-又或者×等等))。这个过程呢,就是我们说的译码(Decode)

接下来,控制器将译码后的指令通过数据总线传给运算器,这些有着具体运算的指令在运算器中就可以进行它们各种各样的运算。这个过程呢,就是我们说的执行(Execute)!接下来需要注意的是,在大多数情况下,每执行一条指令后,PC 的值会自动增加,以指向下一条即将被执行的指令。这个过程被称为“PC 自动增加”。它会根据指令的长度自动增加 PC 的值,并将其设置为下一条要被执行的指令的地址。比如说这里当0x00执行完后,PC的值就增加到0x04(这里假设使用了32位的机器码来表示(取决于处理器),即每个指令长度为4个字节),即指向了下一条指令。

完成运算后,得到的结果,可能会暂时存储到寄存器中(因为这些结果需要在后续指令中进行使用),这里负责存储数据的寄存器我们把它叫做通用寄存器。并且可以通过寄存器之间的数据传输操作来进行合并和处理。这个过程我们把它叫做暂存

在这个情况下,在执行mkdir命令时,内核需要在硬盘上创建一个新的目录jd。此时,内核需要通过特定的系统调用将这些信息写入硬盘。在将结果写入目标寄存器或内存中的过程呢,就是我们说的写回(write-back)

那么到此整个流程就过完了。这就是我这张图呈现的相关内容。我本来是给这张图标号了顺序,想呈现一个流程式的流程图,但是后来想了想,如果理解了,大脑不混乱了,还是不能强行定序,因为CPU作为“大脑”,其实它无处不在,我这里是通过CPU与内存的“交互”来让大家明白CPU的原理和指令执行的基本步骤。其实你看Shell解释器啊,内核啊,它们在执行这些操作(指图上的操作)之前,其实都有与CPU进行请求等操作。

所以说有关于CPU的学问还有更多且更深,我这里只是粗浅地表示出一些基础知识,比如说cpu流水线技术、指令还分操作码,操作数、CPU 的中断模式等等知识,你们感兴趣可以自己查阅资料,毕竟我的时间和精力有限,目前只能陈述这么多。像CPU中断模式,调度算法,前几天冯老师上课也讲了,听完后,我也觉得对CPU的了解又全面了一些。

还有一个彩蛋。前几天我本来是想向鹏子哥取取经,他刚面试完,当时看到他的电脑屏幕上“CPU工作原理”这几个大字引起了我的注意,然后看了一下是哪节课,我回到自己座位上后有些纳闷,心想:啊??冯老师讲过吗??这个章节我也看过,怎么有点没印象了,哎…我这个人…学了就忘。后来我马上回看那个暑期集训章节,原来是魏红学姐的字节跳动面经里的题目,问了大量的CPU相关知识。然后又跟着冯老师把那讲解的部分过了一遍,我发现这次看感觉就很不一样了。经过这几天CPU的洗礼,这些问题也不难啊,甚至我还觉得除了答出来,还有很多更深更难理解的地方去反问面试官,去探讨。(幻想中的hhhhh,我现在可能有点口嗨,要是真在现场了估计紧张的啥都忘了哈哈)

总之,我突然一下就明白的冯老师的用心良苦!!!很感激!觉得这些努力或许也不是白费的啊。来,让我们看看2022年秋招字节跳动一面的题目:

1.cpu的处理数据的基本单位
这不就是 指令嘛!Instruction!

2.cpu怎么工作的?简述cpu的工作原理
简述啊,完全可以把图上这一块讲了就够了,我们可以做一个回顾:

1.取指:CPU 通过地址总线向内存发送地址,将要执行的指令读入寄存器。

2.解码:CPU 将每条指令解密并翻译成具体操作。

3.执行:根据指令操作码,CPU 对数据进行运算、逻辑判断等操作。

4.暂存:得到的结果,可能会暂时存储到寄存器中。

5.写回:将结果写入目标寄存器或内存中

CPU 不断重复上述步骤,直到程序执行完毕。

然后还可以和面试官讲一下PC自动增加这个过程。

最后我就讲到这,谢谢大家!

推荐一个视频,我觉得对于小白来说很不错,看完之后一定有收获,虽然是全英语,但有生动形象的动图和中文字幕。真心推荐!

【【科普】CPU的工作原理】https://www.bilibili.com/video/BV1R54y1k7Pr?vd_source=062a6b7b1a3a8082a74d48f1682bd018

本人才疏学浅,如果我的内容有明显的错误,或者有疑问的地方,衷心希望您能和我联系,给出建议和指导,或者交流相关知识。我会对你表示无限的感激!欢迎指正!

-----------------分割线------------------

今天向鹏子哥取经时(他今天面试),看到他在看“ssh开机启动流程”章节。当时的屏幕上出现了CPU相关字眼,我回到座位上后纳闷极了,心里想:啊??冯老师讲过吗?我之前把这个章节过了,一点印象没有,哎…我这个人就这样…学了就忘,好难受,什么时候才能有一定实力啊,现在找个工作感觉都辣么南/(ㄒoㄒ)/~~

后来我马上回看那个暑期集训章节,原来是魏红学姐的字节跳动面经里的题目,问了大量的CPU相关知识,今天我又跟着老师看了一遍,发现这些知识点在我脑袋里很顺畅的过去了,哇靠,这些问题如果放在之前看视频的我,那确实是一脸懵逼,经过这两天CPU的洗礼,我觉得面试官问的原理问题也不难啊,我甚至感觉还能从一些点切入能反问面试官,和面试官探讨(幻想中的hhhhh,要是正在现场了估计紧张的啥都忘了)。总之,我突然一下就明白的冯老师的用心良苦!!!很感激!觉得这些努力或许也不是白费的啊。来,让我们看看2022年秋招字节跳动一面的题目:

1.cpu的处理数据的基本单位
这不就是 指令嘛!Instruction!

2.cpu怎么工作的?简述cpu的工作原理
简述啊,我感觉这里我能跟你至少聊个半小时,把上面这些字全跟他聊了,而且我还有一堆问题可以反问,我天,想一想还有点酷啊。简述就简述吧,哎。
1.取指:CPU 通过地址总线向内存发送地址,将要执行的指令读入寄存器。

2.解码:CPU 将每条指令解密并翻译成具体操作。

3.执行:根据指令操作码,CPU 对数据进行运算、逻辑判断等操作。

4.暂存:得到的结果,可能会暂时存储到寄存器中。

5.写回:将结果写入目标寄存器或内存中

CPU 不断重复上述步骤,直到程序执行完毕。
然后还可以和面试官讲一下PC自动增加这个过程
——————简述大概到此就讲清楚咯
感兴趣的话,你还可以跟面试官多聊些,可以把一些难点问一问他。总可以吧?毕竟他提的问题我已经回答出来了,这是问题外扩展中的问题

在这个过程中,CPU 还需要处理来自外部设备的中断请求,以及与其他硬件组件之间的通信,如输入输出设备、存储器等。

CPU按照一定的流水线执行指令,即将一条指令的不同步骤分别交给不同的硬件模块完成,以提高指令的处理速度。由于各个模块之间存在时序关系,所以CPU需要根据指令类型和执行情况动态调整流水线的状态,保证指令能够正确无误地执行。

总的来说,CPU的工作原理非常复杂,需要高度协调和精密控制才能完成各种任务。

这两个题不就很轻松和有信心地拿下咯!大厂面试题不过如此嘛(菜菜,捞捞!!!)文章来源地址https://www.toymoban.com/news/detail-413548.html

到了这里,关于一条指令在CPU里如何执行?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql一条多表关联SQL把CPU打爆了,如何优化

    今天是清明假期的第三天,收到同事的求助,DB的CPU被打爆了! 查看监控,CPU已经被打爆100% 登录mysql,DB无锁阻塞,元凶是一个异常sql,存在39个并发执行。 SQL的明细如下: select TEMPSALE.USER_ID_BUY,       TEMPSALE.ORDER_AMOUNT,       TEMPSALE.LAST_UPDATED_DATEfrom T_EAC_BU_SG_CO_INFO T

    2023年04月12日
    浏览(38)
  • 01 | 一条 SQL 查询语句是如何执行的?

    以下内容出自 《MySQL 实战 45 讲》 一条 SQL 查询语句是如何执行的? 下面是 MySQL 的基本架构示意图,从中可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器

    2024年02月10日
    浏览(47)
  • MySQL 一条SQL语句是如何执行的?

    ​ 所以今天我们把MySQL拆解一下,看看里边有哪些零件。下边是MySQL的基本架构示意图。 大体来说,MySQL分为Server层和存储引擎两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数

    2024年02月01日
    浏览(68)
  • 一条SQL在MySQL中是如何执行的

    MySQL的内部组件结构 连接数据库做了什么? 建立链接的时候需要将host,user,pwd,在user表中校验用户(用户名和密码)是否正确。每个链接链接到服务器端之后会给链接开辟一个专属的空间。这个空间存储了很多这个链接需要使用的操作。并且会把这个用户的权限都放到这个空间

    2023年04月09日
    浏览(56)
  • linux 下执行命令需要再次输入密码才能执行,如何在一条命令中执行

    当我在 linux 下执行如下命令时 需要再次输入cc 用户的密码才能运行, 现在我需要在一条命令中执行,不单独去输入密码执行命令 这样就可以使用一条命令执行 cc 用户下面的脚本了

    2024年02月11日
    浏览(71)
  • 01 | 基础架构:一条SQL查询语句是如何执行的?

    画出 MySQL 的基本架构图 Server 层和存储引擎层各自有哪些组件? Server 层 连接器 查询缓存 分析器 优化器 执行器 所有内置函数(日期、时间、数学和加密函数等) 所有跨存储引擎的功能(存储过程、触发器、视图等) 存储引擎层 负责数据的存储和读取 连接器的作用? 连接

    2024年02月08日
    浏览(61)
  • 如何进行MySQL源码调试(一条select语句的执行流程)

    一、背景 MySQL是当今世上最受欢迎的使用最广泛的开源数据库,它的繁荣离不开它的开源特性。放在过去商业数据库的时代,大家都没有机会接触到数据库的源代码,但在如今开源数据库的时代,越来越多的人开始研究数据库的源码,并给社区贡献代码,MySQL官方每次发布新

    2024年02月03日
    浏览(45)
  • Mysql的学习与巩固:一条SQL查询语句是如何执行的?

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时:

    2023年04月13日
    浏览(94)
  • 一条SQL如何被MySQL架构中的各个组件操作执行的?

    简单用一张图说明下, MySQL 架构有哪些组件,接下来给大家用 SQL 语句分析 假如 SQL 语句是这样 SELECT class_no FROM student WHERE name = \\\'lcy\\\' AND age 18 GROUP BY class_no 其中 name 为索引,我们按照 时间顺序 来分析一下 客户端:客户端(如 MySQL 命令行工具、 Navicat 、 MySQL Workbench 或其他应

    2023年04月22日
    浏览(52)
  • MYSQL实战45讲笔记--基础架构:一条SQL查询语句是如何执行的?

    MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层 :连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包