POSIX算汽车行业黑话?

作者 |  一骥绝尘
出品 |  焉知


POSIX算汽车行业黑话?的图1


POSIX与汽车


您有听说过POSIX吗?最近和一位业外朋友聊天聊到POSIX,朋友问我:“POSIX是什么?是你们汽车行业的黑话吗?”果然是术业有专攻,不熟悉对方话题领域的时候听到对方说缩写,都可能会觉得是行业黑话。

事实上POSIX是Portable Operating System Interface的缩写,指的是可移植操作系统接口。顾名思义,这是和操作系统有关的接口标准。操作系统不能说是汽车行业发明的,但当下计算机操作系统与智能汽车的关系密不可分,POSIX也一样。

下图是在某招聘网站上搜索关键字“POSIX”后匹配的岗位所对应的公司列表。数数看,有多少是汽车行业的?

POSIX算汽车行业黑话?的图2

图1:某招聘网站上搜索“POSIX”相关岗位后匹配的公司logo

所以说,现在懂POSIX、会操作系统的汽车工程师,可是市场上的抢手人才。而这与汽车新四化大趋势下汽车电子电气架构的升级关系密切。下图是博世为代表所提出的汽车电子电气架构演进趋势,也是被行业主流接受的趋势。在这个演进过程中,中央车载计算平台和功能域控制器是当下车企最重点研究的部分。

POSIX算汽车行业黑话?的图3

图2:汽车电子电气架构演进趋势(来源:博世)

这些先进控制器提供了更高效而复杂的硬件以及相对应更强大的算力。而为了操作和应用这些更复杂的芯片和硬件,诸如Linux和Android等操作系统就派上用场了。对汽车行业来说,软硬件解耦,同时保证软件可复用、可移植,可以确保开发质量的同时省钱省时间,是黄金准则。那么应用这些操作系统的时候,怎么可以满足这些准则呢?计算机发展多年来,已经成为事实标准的POSIX就可以拿来汽车行业直接用。而正是因为有了POSIX等针对可移植的标准,才让很多操作系统以及之上的智能软件能够丝滑的从服务器切换到个人电脑,再切换到手机,然后切换到汽车上。POSIX在做的事情本质上就是接口标准化。而接口标准化就是高内聚低耦合的有效手段。举一个具象化的例子,我们在各种移动设备上经常能看到的TypeC和Lightning接口就是标准化的接口。不管是传输音频、充电还是投屏,都能通过同一个接口来实现。这样的系统,不就是像堆积木一样方便地移植么?

POSIX算汽车行业黑话?的图4

图3:具象化的两种通用接口,TypeC和Lightining

POSIX算汽车行业黑话?的图5


POSIX历史和版本


要进一步理解POSIX,需要从它的历史说起。POSIX其实是起源于Unix的标准。当年最早的Unix,在1974年代码就开源流传出去了。早期的Unix不够完善,所以大家都在开源软件上各自加工。于是之后出现了好些独立开发的与Unix基本兼容但又不完全兼容的OS,通称Unix-like OS。局面非常混乱,为了提高兼容性和应用程序的可移植性, IEEE(电气和电子工程师协会)开始努力标准化Unix的开发。后来由 Richard Stallman将该标准化命名为“POSIX”。后来IEEE把“POSIX”作为商标注册了。

POSIX的标准系列名称为IEEE Std 1003.n-yyyy。其中yyyy是发布年份,n就是版本号,如IEEE Std 1003.1-2003。我们也可以把IEEE Std 1003.1称为POSIX.1。最新的POSIX.1的版本就是IEEE Std 1003.1-2017。预计今年(2022)会释放一个更新版。

POSIX 1003.1是POSIX系列标准发展的基础标准,目前POSIX旗下有20多个标准和草案。例如POSIX.1定义了应用程序的可移植性,以及C接口和基本任务的系统服务行为,如进程创建和终止、进程环境操作、文件和目录访问以及简单的I/O。POSIX.2则着重描述了命令解释器、可移植的Shell编程、用户环境和相关的实用程序。而IEEE Std 1003.13则是针对实时性的拓展标准。由于实时性对汽车行业异常重要,所以该标准也是POSIX在汽车行业的重要一环。

从POSIX的历史不难看出,UNIX和类UNIX内核的操作系统都是满足POSIX标准的。但创建POSIX就是为了可移植性,所以它并不只适用于UNIX系统,非UNIX系统也可以符合POSIX标准。所以像Linux、macOS、QNX和Android这些我们熟悉的操作系统,都是遵循POSIX的。而像Windows操作系统,本来是独立于UNIX体系的,但随着POSIX市场和用户的扩大,也不得不开发兼容POSIX的接口和子系统。比如Windows 10里就有支持POSIX的Linux子系统(WSL),方便一些UNIX程序移植到Windows上。

POSIX算汽车行业黑话?的图6


POSIX内容简介


POSIX定义了一个标准的操作系统界面和环境,包括一个命令解释器(也就是"Shell"),以及常见的实用程序,以支持源代码层面的应用可移植。POSIX是给应用程序开发人员和系统实施者使用的,包括四个主要部分:

1.基础定义。
这部分为POSIX提供通用的定义,包括关于术语、概念、语法、服务功能、C语言头的定义和命令行的信息。

2.系统接口。
这部分提供与接口有关的术语和概念细节,并定义了访问符合POSIX的系统的应用程序可用的功能接口。系统服务功能和子程序的定义、C语言编程语言的特定系统服务、功能问题,包括可移植性、错误处理和错误恢复,都包含在这部分。

3.Shell和可用工具。
这部分描述了命令解释服务的标准源代码级接口,也就是著名的Shell。以及Shell中可用的命令和工具。

4.理论依据。
这部分主要描述POSIX内容的历史信息,以及为什么增加或删除某些功能的相应理由。

POSIX并没有规定具体应用程序或操作系统的开发,只是定义了它们之间的接口规范。符合POSIX标准的应用程序源代码应该能够在许多系统中运行,因为该标准是在源代码层面上定义的。然而POSIX并不保证任何对象或二进制代码级别的可移植性。因此,即使在具有相同硬件和操作系统的类似机器上,二进制可执行文件也可能无法运行。

POSIX算汽车行业黑话?的图7


POSIX与AUTOSAR


在讨论POSIX和AUTOSAR的关系之前,我们得先说说POSIX 1003.13。如上文提到,POSIX包含一系列的标准,其中POSIX 1003.13是针对实时性定义的配置范围(Profile)标准,而相关的实时环境的接口定义,也修订在POSIX 1003.1中了。实时性无需多言,是汽车行业的关键特性。PSE51、52、53和54是其中4个主要的Profile,可以看作是POSIX的子集,相互关系如下图所示。

POSIX算汽车行业黑话?的图8


图4:PSE51、52、53、54的关系

PSE51到54描述了实时环境可以符合的四个级别的功能。其中PSE51是最小的核心范围。

说回到AUTOSAR,这个汽车行业软件架构的老大哥,尤其在传统嵌入式ECU上的地位可谓是德高望重。而近年来随着复杂控制器的发展,大算力核的增多,AUTOSAR也针对高性能计算、灵活的软件配置和支持 OTA 等角度推出了AUTOSAR Adaptive(也常称AP),并将之前部分称为AUTOSAR Classic(常称CP)。CP中的操作系统部分主要沿用OSEK,而AP的操作系统部分,则明确了是基于POSIX PSE51的。

POSIX操作系统接口是赋能车载软件应用的基础。但是它缺乏汽车常用功能,例如诊断、网络管理和SOME/IP等。AUTOSAR Adaptive刚好补足了这些短板,在POSIX的基础上定义了中间件标准,让POSIX可以与车载应用更加有效地联动起来。

在通讯机制上,PSE51并没有定义进程间通讯IPC (inter process communication),  因此并没有直接的接口可以实现进程之间的交互。所以进程间通信需要有额外模块支持,例如AUTOSAR AP提供的CM (communication management )。抽象出来的ARA接口可以用于IPC,统一提供机器内和机器之间面向服务的通信。随着面向服务架构(SOA)在汽车行业的流行,POSIX提供的标准接口也为以太网通讯和统一服务接口提供了良好基础。例如下图就是一种面向服务架构的框架示意图。

POSIX算汽车行业黑话?的图9

图5:一种基于POSIX和AUTOSAR Adaptive的架构示意图(来源:Vector)

POSIX可以很好地帮助上层应用或者中间件屏蔽底层操作系统和一些驱动的具体实现,让整体软件架构有更清晰的层次,也更能实现高内聚、低耦合的原则。而考虑到传统汽车软件的复用性等问题,基于POSIX接口也可以设计一个AUTOSAR CP环境,例如Vector公司就有这样的商用方案。如下图所示,CP环境下,传统的软件模块(SWC)还是可以通过抽象的运行时环境(RTE)实现通讯,基础软件部分的PDUR、COM、DCM等也可以直接移植。

POSIX算汽车行业黑话?的图10

图6:基于POSIX的AUTOSAR CP环境方案(来源:Vector)

POSIX算汽车行业黑话?的图11


写在最后


POSIX标准允许开发人员使用许多相同的代码在许多操作系统上创建应用程序、工具和平台。按照标准写代码并不是一项强制要求,但当你想把你的代码移植到其他系统时,它确实有很大的帮助。POSIX就是为了简化可移植性而设计的。所以长远来看,它可以节省大量时间和金钱。

虽然POSIX基本上是面向操作系统设计者和软件开发者的,但作为系统的使用者,无论我们是否意识到,我们也都受到POSIX的影响。正是因为有了这个标准,我们才能够在一个UNIX或Linux系统上工作,并把这个系统的工作带到那个系统上,而且感觉毫不费力。作为普通用户,我们也在可用性和跨系统的数据重复使用方面获得了许多好处。

但是完整的POSIX标准有4000多页,1000多个接口。对我们汽车工程师来说,对整个标准都非常熟悉是不太现实的。所幸POSIX的各种资源丰富,开发者社区也有很多大神Q&A。我们可以到社区上提问或者按照实际项目中所涉及的API做裁剪,着重分析相关文档材料。希望这篇文章能帮助没听过POSIX的同仁和初学者理解POSIX,同时亦希望各位大神批评指正。

参考来源:
1.https://itsfoss.com/posix/
2.《车载智能计算基础平台SOA 软件架构白皮书》
3.https://www.baeldung.com/linux/posix

登录后免费查看全文
立即登录
默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注