指令集:本质是一组机器码
不同硬件厂家设计的CPU的架构不同,这就使得让CPU完成同一功能的动作不同:
比如说:mov操作,在x86架构的CPU上,执行的是 1010…,而在ARM架构的CPU上则是0101…
(CPU只认识机器码)
于是相同的一组功能:
{
1. 向左
2. 向右
3. 向上
4. 向下
5. …
6. …
}
在不同的CPU上对应的机器码是不一样的,所以指令集就是将上述一组功能翻译成的对应CPU的机器码集合。
每个硬件厂商都有自己的一套指令集,同样一个功能指令,为了提高效率、降低功耗,厂商就需要不断优化CPU架构,
当然,(指令集的实现方式是公开,但是要使用必须授权),ARM 公司通过设计CPU架构,授权给硬件厂商制作CPU来获利。
操作系统是指令集的上层应用
一个操作系统在CPU上运行之前,要根据对应CPU的指令集来编译成机器码,然后才能运行,操作系统通过调用指令集来完成相应的功能。
Linux 系统能够在不同CPU上运行,原因是该系统是开源的,CPU厂商拿到系统源码后,用自己的指令集对其进行编辑,系统就能在自己的CPU上运行了。
Windows系统不是开源的,如果别的CPU厂商未获得指令集授权,就无法完成系统编译过程,因此Windows只能在兼容x86架构的CPU上运行(Intel 授权 AMD后,windows 也能在AMD上运行)
架构与微架构是两个概念
架构与指令集一一对应,CPU的架构是最底层的,是处理器的硬件结构,即CPU按照什么样的硬件结构来设计,有了硬件自然也就有了如何使用硬件的“说明书”也就是指令集;
微架构是CPU设计人员对指令功能,用指令集(CPU语言)设计的一套执行“程序”,这个过程也是最具技术含量的环节。
微架构与指令集是两个概念:指令集是CPU选择的语言,而微架构是具体的实现。
微架构是用指令集这门语言编写的 CPU较为复杂的功能的实现方式。
例如,会C++的人很多,而同一个功能,大牛和小白设计的程序效率上差别很大,
所以,通常认为只有具备独立的微架构研发能力的企业才算具备了CPU研发能力,而是否使用自行研发的指令集无关紧要。微架构的研发也是IT产业技术含量最高的领域之一。
从这里我们可以知道,厂商研发CPU时并不需要获得指令集授权就可以获得指令集的相关资料与规范,指令集本身的技术含量并不是很高。获得授权主要是为了避免法律问题。然而微架构的设计细节是各家厂商绝对保密的,而且由于其技术复杂,即便获得相应文档也难以山寨。
这也就意味着指令集能指导CPU设计人员通过阅读“指令集规范”这本“指南”来设计CPU。而CPU设计人员通过阅读这本规范后设计出来的CPU结构就叫“微架构”。