系统软件工程师实战攻略(体系结构篇)--(2)

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




如何掌握一个CPU的ABI(Application Binary Interface)

在体系结构中,通常会说一个CPU的结构(Architecture),一个CPU的微结构(Micro-Architecture)。

是啥意思呢?

结构的意思就是那些程序员能看见的东东;微结构就是程序员不(太)需要关心的东西。

对能看得见的结构部分(例如,通用寄存器,控制寄存器,状态寄存器,中断或者例外寄存器)的使用方法,或者说编程模式,就是所谓的ABI。

掌握一个CPU的ABI,或者说编程界面,是一个基本功。是必须的。浅显说,就是那些寄存器的用法,分布和使用约定。

定义一个处理器的ABI,也是做编译器设计的第一个环节。笔者曾经设计过一个网络处理器的GCC的后端target。设计的第一个事情其实就是设计寄存器的约定。

这个章节里,主要具体谈如何掌握MIPS,PowerPC,Arm和x86的ABI。

一些相关的中文参考资料如下:

《PowerPC and Linux Kernel Inside》, 陈怀临,2002

《MIPS CPU 体系结构概述,Linux/MIPS内核》(上),陈怀临,张富新,2002

《MIPS CPU 体系结构概述,Linux/MIPS内核》(下),陈怀临,张富新,2002

《Linux PowerPC详解:核心篇》, 王齐, 2008[有没有网上电子版?]

《Arm 体系结构》,李曦

[其他] [待补充]

(1个打分, 平均:5.00 / 5)

雁过留声

“系统软件工程师实战攻略(体系结构篇)--(2)”有4个回复

  1. comcat 于 2011-12-11 7:31 下午

    首席对一个体系结构的剖析方法非常好,不管什么新体系总能快速介入,这个应该影响了不少国内的兄弟。

    从 GPR 和 ABI 入手 –> 常用指令 –> 中断异常 –> 存储管理 –> 顺带看一下 cache,稍微结合一下内核代码就能很快把握住一个体系结构的框架。

    我这儿有一个 SPARC 的笔记:http://hi.baidu.com/comcat/blog/category/sparc%20%CC%E5%CF%B5%BD%E1%B9%B9

    有一个 PDF 版的,可稍作补充:http://people.openrays.org/~comcat/mydoc/sparc.arch.intro.pdf

    民间关注 SPARC 的人比较少,网上的文章数目比不上其他体系。前些年还有不少人弄过 欧空局的开源 leon3 项目,现在好像都没声了。

  2. chenwj 于 2011-12-13 4:37 上午

    我這邊有個問題。ABI 一般來說應該是包含 CPU 和 OS,如果單指 CPU 的話應該是講 ISA。標題 “如何掌握一个CPU的ABI” 定得是否準確?

  3. 陈怀临 于 2011-12-13 9:07 下午

    通常而言,ABI is more of a term for compiler backend stuff。例如,包括数据类型,复杂数据类型的定义等。但General Compiler是不太考虑Exception处理的。API需要考虑,例如,对exception register file的处理。。。

  4. 孟宁 于 2012-01-23 12:21 上午

    其实大多数硬件芯片(包括CPU)的使用方法大致都是通过读写寄存器来驱动芯片完成一定的功能后得到返回结果的吧?