如何跟ARM开发工程师愉快地聊天(一)

起因是一次内部会议,大家在聊天的过程中发现虽然都是基于ARM平台在做开发,但彼此之间不见得能很清楚的get到对方到底在说些什么。所以我觉得可以写一个聊天指南,大概的目的就是如何在十分钟让一个ARM开发工程师觉得你可以一聊。有几点说明:

  1. 这不是一个技术手册,并不会讨论太多的技术细节;
  2. 不面向大神;
  3. 如果我比较勤奋,那么这个系列或许还会涉及ARM一些基本概念,一点memory相关,或许还有一点Cache,一点Trustzone,一点Virtualization,以上统统都是以随便聊聊为前提,毕竟每个展开就是几千页的ARM手册了。
  4. 水平能力有限,错漏难免,欢迎指正。

那么开始吧。

随便聊聊ARM是什么

做过ARM开发的人都知道ARM是款处理器,跟大部分PC都是 intel inside 类似,绝大部分移动设备也都是 ARM inside。学过微机原理的还会知道 ARM CPU 和 intel CPU 其中一个重要的区别就在于精简指令集(RISC)和复杂指令集(CISC)的区别,并由此带来了指令集解码器和制造工艺的差异,最直接的表现就是ARM CPU 和 intel CPU 在计算能力和功耗上的差异,ARM CPU 无法匹配 intel CPU 强大的计算能力,但 intel CPU 也很难在低功耗上和ARM CPU一较高下,最直接的结果就是intel 占领了大部分桌面平台,而ARM则统治了移动设备。当然这只是两者之间最浅层的区别,毕竟如果只是聊天的话,知道这些应该就是可以开始了。另外这并不意味两者绝对的分裂,毕竟 intel 也在默默的耕耘 atom 系列,希望可以抢占部分移动设备市场。

芯片中总提到的Cortex是什么

买手机关注参数的人应该对高通骁龙系列,华为麒麟系列什么的都很熟悉,数据控可能对每款芯片搭载什么CPU,GPU,Modem等等了如指掌。先聊一波CPU的部分,以骁龙810举个例子,这是一款八核芯片,处理器由四核ARM® Cortex-A57架构 CPU和四核ARM® Cortex-A53架构 CPU组成。那么说到Cortex-A57,Cortex-A53的时候,到底在说什么呢。回到台式机,大概很少有人分不清奔三奔四,酷睿i5,i7是什么,计算机专业古早时候学微机原理都是从intel 的 8086开始学起,然后就是286,386等等等等漫长的几十年到现在。对于ARM来说也是类似的过程,简单聊聊ARM的发展历史,比较了解过去才能更好的掌握现在。
ARM公司的全称是Advanced RISC Machines,1990年正式成立,前身是英国 Acorn 公司,该公司在1985年推出了第一款商用 RISC 处理器:ARM1,此后陆续推出了 ARM2,ARM3。90年ARM公司脱胎于Acorn正式成立之后,在91年推出了 ARM6,之后又不断推出ARM7,ARM8一直到ARM11。ARM 11 之前统称为Classic core,ARM11之后的系列正式更名为Cortex core系列,并逐渐细分出 Cortex-A,Cortex-R,Cortex-M 三大系列,面向不同的细分市场。Cortex-A系列,application processor,应用型处理器,简单说就是面向操作系统和应用程序开发,主要应用于手机,数字电视等丰富应用场景的设备;Cortex-R系列,real-time processor,实时处理器,最大的特点是实时响应,可以简单理解为对指令的响应最为及时,因为准确和可靠,很多汽车控制平台会采用这个系列;Cortex-M,Microcontroller Processors,微控制器处理器,M系列更加的低成本和低功耗,常常被应用在工业控制领域。每个系列都有各自的衍生产品,如Cortex-A7,Cortex-R5,Cortex-M4等等等等。当然这三个系列最本质的差别在于硬件架构,有机会详聊的时候再说吧~ 总之现在聊天的时候,我们大概知道Cortex就是和酷睿差不多的名词了。

ARM8 和 ARMv8 是一个意思吗

继续以骁龙810为例,更详细的参数介绍会告诉你,这款芯片是基于ARMv8指令集。那么ARMv8又是什么,和刚刚提到的ARM8是一个东西吗。直接了当的说,ARM8和ARMv8是完全不同的概念,再进一步说,ARM8是ARM产品其中一个系列,而ARMv8指的则是ARM的一代硬件架构。ARM8这款产品事实上是ARMv4架构,而真正使用ARMv8架构的首发ARM产品是ARM Cortex-A53和Cortex-A57,是不是有点混乱,有个简单的对应关系表:

ARM Architecture ARM Holdings
ARMv1 ARM1
ARMv2 ARM2,ARM250,ARM3
ARMv3 ARM6,ARM7
ARMv4 ARM8
ARMv4T ARM7TDMI,ARM9TDMI
ARMv5TE ARM7EJ,ARM9E,ARM10E
ARMv6 ARM11
ARMv7-A Cortex-A5,Cortex-A7,Cortex-A8,Cortex-A9,Cortex-A12,Cortex-A15,Cortex-A17
ARMv8-A Cortex-A35,Cortex-A53,Cortex-A57,Cortex-A72,Cortex-A73

还有ARMv6-M,ARMv7-R,ARMv7-M,ARMv8-R,ARMv8-M就不再列出来了。

64位是不是比32位厉害一点

终于讲到一个宏大的命题了,32位与64位。要讲清楚32位处理器和64位处理器的区别所在,真的是个很大的话题。从表面看似乎只是四车道变成了八车道,CPU处理的数据量由 32bit 提升到了 64bit,然而随之而来的硬件架构的调整可以写上几千页的文档。这里我们先简单的开个头吧。
首先我们可以聊聊为什么需要64位处理器。首当其冲当然是为了解决大内存问题。我们都知道,32位处理器能访问的最大虚拟内存是2的32次方个bit,也就是4G。随着软件的迅速发展,如果某个应用需要超过4G的虚拟内存怎么办。在ARMv7的基础上,ARM提出了一种LPAE(Large Physical Address Extensions)技术,将内存寻址扩大到了40 bits。而随着桌面系统64位处理器渐成主流,移动设备也渐渐对ARM处理器提出了更高的需求。终于在2011年ARM给出了一份关于ARMv8的白皮书,在这份白皮书里ARM解释了为什么在移动设备端对64位应用的需求还不是那么强烈的时候,ARM选择推出一种全新的64位架构:Because of Trends。 :)

希望在以后的系列中,我们可以继续聊一聊32位和64位ARM处理器在架构上究竟有哪些不同。
希望我足够勤奋~ :P

你可能感兴趣的:(如何跟ARM开发工程师愉快地聊天(一))