跳到主要内容

可执行程序在操作系统下的运行原理分析

架构,从下往上分析

  • 裸机(纯硬件)
  • 操作系统(Windows/Linux)
  • 可执行程序

裸机

其实主要就是 CPU 架构的不同,CPU 架构是 CPU 商给 CPU 产品定的一个规范,主要目的是为了区分不同类型的 CPU。目前市场上的 CPU 分类主要分有两大阵营,一个是 Intel、AMD 为首的复杂指令集 CPU,另一个是以 IBM、ARM 为首的精简指令集 CPU。不同品牌的 CPU,其产品的架构也不相同,Intel、AMD 的 CPU 是 X86 架构,IBM 公司的 CPU 是 PowerPC 架构,ARM 公司的 CPU 是 ARM 架构,国内的飞腾 CPU 也是 ARM 架构。此外还有 MPIS 架构、SPARC 架构、Alpha 架构。

x86 指令集发展

  • IA:Intel(英特尔)处理器的服务器称之为 IA(Intel Architecture)架构服务器
  • IA-32:英特尔 32 位体系架构,X86 从 16 位到 32 位是在原有的架构基础上进行修改(Intel 称之为 IA-32)
  • x86-32:现如今 Intel 把 x86-32 称为 IA-32
  • x86-64 分为 intel 和 AMD
  • AMD64:x86 架构的 64 位拓展,向后兼容于 16 位及 32 位的 x86 架构。x64 于 1999 年由 AMD 设计,AMD 首次公开 64 位集以扩展给 x86,称为“AMD64”,AMD64 和 Intel64 基本上一致
  • Intel64:EM64T(Extended Memory 64 Technology)扩展 64bit 内存技术,本质上和 AMD64 一样都是 IA-32 的增强版本。
  • IA-64:64 位的英特尔架构,英特尔安腾架构(Intel Itanium architecture),使用在 Itanium 处理器家族上的 64 位指令集架构,由英特尔公司与惠普公司共同开发。IA 是 Intel Architecture(英特尔架构)的缩写,64 指 64 位系统。使用这种架构的 CPU,包括 Itanium 和 Itanium 2。此架构与 x86 及 x86-64 并不相容,操作系统与软件需使用 IA-64 专用版本。

ARM 架构

ARM 架构,也称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个 32 位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM 处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。

ARM 授权方式:ARM 公司本身并不靠自有的设计来制造或出售 CPU ,而是将处理器架构授权给有兴趣的厂家。

国外生产厂商:TI (德州仪器)、Samsung(三星)、Freescale(飞思卡尔)、Marvell(马维尔)、Nvidia(英伟达)、Qualcomm(高通)、STMicroelectronics(意法半导体)。

国内生产厂商:华为(海思芯片)、飞腾(FT-1500、FT2000-4 等 CPU 芯片)、兆易创新(GD32 系列 MCU,参考 STM32 系列)、瑞芯微(RK 系列芯片)、联发科(台湾,天玑系列)。

MPIS 架构

MIPS 是世界上很流行的一种 RISC 处理器。MIPS 技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。

MPIS 架构授权和 ARM 架构授权不一样,ARM 架构授权用户基本不能自行修改,而 MPIS 架构授权后,可以自己修改。目前 MPIS 发扬光大寄希望中科龙芯公司,龙芯处理器从龙芯 1 号,到现在的龙芯 3 号系列的 3A4000,CPU 的性能已经大幅度提高,在完全可以胜任日常办公或者作为特殊用途的服务器。龙芯 CPU 和国产的飞腾(FT)处理器并驾齐驱,发展我国自主可控 CPU。

PowerPC 系列

PowerPC 是一种精简指令集(RISC)架构的中央处理器(CPU),其基本的设计源自 IBM(国际商用机器公司)的 IBMPowerPC 601 微处理器 POWER(PerformanceOptimized With Enhanced RISC;《IBM Connect 电子报》2007 年 8 月号译为“增强 RISC 性能优化”)架构。二十世纪九十年代,IBM(国际商用机器公司)、Apple(苹果公司)和 Motorola(摩托罗拉)公司开发 PowerPC 芯片成功,并制造出基于 PowerPC 的多处理器计算机。PowerPC 架构的特点是可伸缩性好、方便灵活。

PowerPC 处理器有广泛的实现范围,包括从诸如 Power4 那样的高端服务器 CPU 到嵌入式 CPU 市场(任天堂 Gamecube 使用了 PowerPC)。PowerPC 处理器有非常强的嵌入式表现,因为它具有优异的性能、较低的能量损耗以及较低的散热量。除了象串行和以太网控制器那样的集成 I/O,该嵌入式处理器与“台式机”CPU 存在非常显著的区别。

SPARC 架构

SPARC 架构(Scalable Processor ARChitecture,可扩展处理器架构)是国际上流行的 RISC 处理器体系架构之一,SPRAC 如今已发展成为一个开放的标准,任何机构或个人均可研究或开发基于 SPRAC 架构的产品,而无需交纳版权费。SPARC 处理器架构具备精简指令集(RISC)、支持 32 位/64 位指令精度,架构运行稳定、可扩展性优良、体系标准开放等特点。SPARC 因此得以迅速发展壮大,在现在已经有大约 3 万多个成功的应用案例。

SPARCV7/V8 是目前嵌入式控制系统常用的处理器标准版本,并在航天设备的电子系统中得到广泛应用。然而,SPARC 只是一个处理器的架构标准,并不提供现成的源码或 IP 核,具体的芯片实现要由开发者去完成。

Alpha 架构

目前国内采用此架构的是申微超算处理器,得益于国家的支持,申威处理器在军队应用广泛。

CPU 架构之间的竞争

PC 和服务器竞争

PC 端和服务器端是 X86 架构的天下,而 X86 架构基本是以 Intel 为首,AMD 为辅二分天下之势。国产 CPU 基本只能用在军工行业或者事业单位等。其实说性能,powerpc,可谓是高出不胜寒。硬件方面,Power 系统在可靠性、可用性和可维护性的方面的出色表现使得 IBM 从芯片到系统所设计的整机方案有着独有的优势。Power 架构的处理器在超算、大型企业的 UNIX 服务器等多个方面应用也十分成功。在软件方面,其专用的 AIX 系统在稳定性、软件方案集成度和厂商技术支持能力方面都要更强。由于用户选一平台主要看软件需求,一般对数据保护和 7*24 小时不宕机等有所要求,power 架构的稳定性和运维等方面相对更优。但是,由于 IBM 的技术把控,使得其价格太不友好,同时技术也赶不上环境的变化,在云计算兴起后,随着分布式系统逐渐成熟,系统对小型机的依赖开始降低,改为依靠集群提供,性能也可实现分布式处理。而更为关键的是,IBM 的全套服务尽管稳定性优秀,但却影响了 Power 架构对其他商家的吸引力。

而 Sparc 架构和 Power 架构基本犯了同样的错误:价格不友好。SPARC 架构测成功和 Sun 旗下的 Solaris 系统有着密不可分的关系。当计算机系统庞大、用户数量巨大增加时,基于 Unix 操作系统打造的 Solaris 能更好地利用计算机资源,是所有商业版中最可靠最完善的版本。而依赖 SPARC 架构和 Solaris 系统的性能和可靠性,其占领了服务器高端市场。Sun 的另一个更为知名的产品是 Java,虽然在上世纪 90 年代为智能家电开发的 Java 并没有为其带来相应的回报,但已成为今天移动时代最重要的开发语言。如此强大的实力本应统领服务器市场,但遗憾的是,在 windows 和英特尔组成 Wintel 联盟之后,两者凭借自身在各自市场的规模效应,使得采用 Wintel 产品的服务器厂商可以通过低廉的价格大肆抢占中低端市场。而当 Sun 醒悟过来,通过开源等方式想要挽回败局时为时已晚。

X86 架构与 Power 和 SPARC 在高性能领域的风生水起不同,x86 架构是天生的小屌丝。1978 年他出生的那年,英特尔还只是一个普通的科技公司。可是 x86 架构随同其 cisc 指令集却开启了一个新的时代。x86 之所以可以赢得市场主要原因在于其是一个十分开放的架构。IBM 和 SUN 当年都是从芯片到服务器到系统一手包办的公司。而英特尔则是一个十分纯粹的芯片厂商,其业务仅与 AMD 等少数芯片生产者存在竞争,这就使得服务器厂商不用忌惮与之发生竞争关系。

单从性能来看,无论 Power 还是 SPARC 架构都可以击溃 x86,可是最终能够赢下来的却偏偏是"最弱"的 x86 架构。这并非劣币淘汰良币,而是市场竞争的选择,根源上讲,x86 的成功在于英特尔根本不碰服务器。因此不论设备生产商、软件开发者或者系统开发者都可以与不存在利益竞争关系的英特尔合作。受益于此,x86 架构的兼容性也越发强大,生态体系越发完善,这才成就了现如今市场占有率超过 90%的一家独大局面,英特尔也借助 x86 架构一跃成为全球顶级的芯片提供商。

移动端竞争

正如 PC 和服务器端是 X86 的天下一样,移动端是 ARM 的天下。Intel 在 CPU 界的大名,可谓家喻户晓,但是在手机登移动端却难以看到英国 ARM 公司背影。在 2006 年,自从 AMD 的 64 位处理器发布以来,AMD 成功逆袭了 Intel,市场占有率大幅上升,而 Intel 老迈的 P4 处理器则是腹背受敌,尽失昔日霸气,市场表现一路走低。为了稳住投资人的信心,最好的做法自然是让公司持续盈利,为此 Intel 进行大规模的重整,包括上任新 CEO 欧德宁、大规模裁员、以及出售 XScale 手机处理器业务。正因为这个举措,使得 Intel 到达了人生巅峰,从 PC 市场有赚的钵满盆满,然而也是因为此,Intel 忽视了移动领域的迅猛发展。(当年,Intel 拒绝了乔帮主还是 PPT 的 Iphone 手机,不然是否就会不一样?但是想一下 Iphone X 使用 Intel 基带,信号差的诟病,Intel 做手机芯是否会臭名昭著也未可知)

和 Intel 公司不同, ARM 公司不制造,不销售芯片,而是只自己设计 IP 核,包括指令集架构、微处理器、GPU、互连架构等,然后谁想用就授权卖给谁,再从每颗实际造出来的产品中收取版税。ARM 有三种授权模式,分别是架构授权、内核授权、使用授权,分别对应大中小公司,非常讨喜,贴个牌子就能说是自己的 CPU,为 ARM 处理器的广泛使用打下坚实基础。

ARM 的成功除了商业模式的独特之外还少不得自身素质的优秀,Intel 技术毫无疑问是顶尖的,但应用场景在传统 PC 上,换成移动设备就行不通了,移动设备比起性能首先要考虑功耗和续航,Intel 就吃了这个大亏,X86 架构独步天下肯定是不能随意变改的,移动设备当然继续沿用 X86 架构,然而换来却是高功耗和快速掉电,换谁都看不上。反之功耗控制则是 ARM 的强项,使用精简指令集(RISC)和创新的 big.LITTLE 架构,使 ARM 处理器能耗比一直领先于 Intel。

Intel 正在积极布局,推出应用于 IoT 物联网的 Atom E3900 及车载电子的 Atom A3900 系列,号称 CPU 性能提升 70%,GPU 性能提升 190%,其中 Atom A3900 特别针对高温环境设计,可在 110°C 高温下使用 15 年。Intel 是一家伟大的企业,但也是会犯错误的,既然已经错失移动市场,不妨暂时脱离,提前做好下一阶段的技术研发(5G),也有可能实现弯道超车。

操作系统

操作系统(Operating System,OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。

操作系统能管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,并使计算机系统所有资源最大限度地发挥作用。操作系统主要功能包括:进程管理、存储管理、设备管理、文件管理、作业管理等。

桌面操作系统

桌面操作系统主要用于个人计算机上。个人计算机市场从硬件架构上来说主要分为两大阵营,PC 机与 Mac 机,从软件上可主要分为两大类,分别为类 Unix 操作系统和 Windows 操作系统:

1、Unix 和类 Unix 操作系统:Mac OS X,Linux 发行版(如 Debian,Ubuntu,Linux Mint,openSUSE,Fedora 等);

2、微软公司 Windows 操作系统 :Windows XP,Windows Vista,Windows 7,Windows 8,Windows 8.1,Windows 10,Windows 11 等。

服务器操作系统

服务器操作系统一般指的是安装在大型计算机上的操作系统,比如 Web 服务器、应用服务器和数据库服务器等。服务器操作系统主要集中在三大类:

1、Unix 系列:SUNSolaris,IBM-AIX,HP-UX,FreeBSD 等;

2、Linux 系列:Red Hat Linux,CentOS,Debian,Ubuntu 等;

3、Windows 系列:Windows Server 2003,Windows Server 2008,Windows Server 2008 R2 等。

嵌入式操作系统

嵌入式操作系统是应用在嵌入式系统的操作系统。嵌入式系统广泛应用在生活的各个方面,涵盖范围从便携设备到大型固定设施,如数码相机、手机、平板电脑、家用电器、医疗设备、交通灯、航空电子设备和工厂控制设备等,越来越多嵌入式系统安装有实时操作系统。

在嵌入式领域常用的操作系统有嵌入式 Linux、Windows Embedded、VxWorks 等,以及广泛使用在智能手机或平板电脑等消费电子产品的操作系统,如 Android、iOS、Symbian、Windows Phone 和 BlackBerry OS 等。

可执行程序执行的原理分析

可执行程序执行内容可以分两类,一是 CPU 的指令,二是操作系统的系统调用,几乎所有的可执行程序都是运行在操作系统之上的,由操作系统来统一调度可执行程序的执行内容。

说到可执行程序,必须得说一下,应用程序二进制接口 ABI,(Application Binary Interface),ABI 是编译器和链接器遵守的一组规则,以让编译后的程序可以正常工作。

不同的操作系统对 ABI 的要求不一样,例如 Linux 要求 ELF 格式,Windows 要求 PE 格式。

简单来说,ABI 就是描述函数名如何存储,函数参数类型如何存储的接口。

一个程序要想调用其它程序编译出来的函数,那么就必须知道其 ABI 接口。

C 语言具有优秀的 ABI 兼容,因为主流 C 编译器编译出来的函数,ABI 接口大都相同,所以用 C 语言写的库能方便的被其它程序调用。

C++一般不具有很好的 ABI 兼容,因为每个 C++编译器编译出来的接口可能不同,导致了你无法调用其它人用 C++接口提供的库函数。所以 C++函数往往强制使用 C 的 ABI 用于给其它程序调用。

  • 把符号标准、变量内存布局、函数调用方式等跟可执行代码二进制兼容性相关的内容称为 ABI Application Binary Interface
  • 应用程序二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。
  • 编程语言实现的 ABI 是一种可以使单独编译的模块协同工作的低级细节的规范。如果没有一个稳定的 ABI,就必须使用同一编译器的同一版本编译程序的所有部分。
  • API 是源代码级别的接口,ABI 是二进制层面的接口,ABI 的兼容程度比 API 更加严格

操作系统都规定了支持的可执行文件(程序)的格式。Windows 下有 PE 文件格式,Linux 下有 ELF 格式,Mac OS 下有 Mach-O 格式。

参考