近期,我们发现很多同学对CPU指令集方面的知识比较匮乏,今天我们就给大家介绍下CPU指令集。
前言
在说正题之前,我相信小伙伴们都有各自擅长的方言吧?像粤语、东北话、闽南语及上海话等等,甚至想出国的同学还要学习当地的语言,例如英语、法语等。同样,我们在进行计算机编程时,也会遇到汇编、C、C++、Java、dotnet、PHP及Python等不同语言,他们各自的语法和写法都不同。如果我拿一段Java代码,放到Python解释器上执行,是根本行不通的。
cpu指令集
同理可知,作为计算机最核心的CPU也有其自身的语言,也就是CPU指令集。CPU指令集是指可以操控该CPU进行运算的所有指令。操作系统内核及更上层的应用程序正是通过这些指令直接操控CPU进行运算和其它操作。
这些CPU指令是以二进制的形式存在的。并且根据CPU不同的功能和特性,设计了不同的CPU指令集,甚至一些指令集的定义都完全不同。就像上文提到的不同语言,就像是你只会中文却找了一个英国人作为合作伙伴,相互之间没有翻译难以准确沟通。同样,不同的CPU指令集一定要搭配相应的程序才能工作。目前指令集有X86、ARM、MIPS、OpenPOWER和国产的SW及开源的RISC-V架构。
编译
小伙伴们平时用C、C++等编写的程序代码需要通过编译器转化成对应CPU指令集的二进制编码,才能在对应的CPU上面执行。这个转换过程,我们称它为“编译”,从操作系统内核到各种库及各种驱动程序,再到开发的小程序都要针对对应的CPU指令集进行编译后才能运行。
因此,有小伙伴问:龙梦的补丁被Linux内核5.5收录后,是不是任何采用该新内核的发行版都能在龙芯上直接运行?答案显然不是,也只有如Fedora 28龙芯版这样的被航天龙梦团队专门针对龙芯使用的MIPS指令集优化编译的操作系统解决方案才能在龙芯上运行。
关于“Linux宝库”微信公众号:
欢迎关注"Linux宝库"微信公众号,这里每天发布最新的开源人物和开源事件。谨以此号记录Linux和开源业界的点点滴滴,为开源爱好者和从业者点亮人生。
- END -
- 责任编辑:陈绪 -