看看Linux中形形色色的接口

如果将内核比作一座工厂,那么linux中众多的接口就是通往这个巨大工厂的高速公路。这条路要足够坚固,禁得起各种破坏(robust)。要能跑得了运货的卡车,还要能升降飞机。(compatible)。当然了这条路要越宽越好(performant)。如下图所标,linux中有四种类型的接口。位于内核和用户之间的api(应用程序接口)和abi(应用二进制接口)。内核内部的api和abi。下面我们逐条的来看看这些接口。
1.linux api
内核-用户接口有内核系统调用和gnu c library (glibc)的包装例程(wrap subroutines)构成。linux api开发的目标是给posix标准提供一个相对兼容的,程序健壮性强的,高性能的实现,同时又实现一些linux特有的标准。
1.1 linux内核的系统调用接口
系统调用接口包含了内核中所有已经实现的和可使用的系统调用。
1.2 c标准库
标准库是对系统调用的封装,用于给用户提供一个简单易用的用户态接口。其中最为熟知的就是gnu c library(glibc),还有为嵌入式和移动设备使用的uclibc。
1.3对posix的补充
还有一些接口是linux特有的,比如:
cgroup子系统,该子系统包含cgroup系统调用和libcgroup。
futex,epoll,dnotify,inotify,fanotify等系统调用。
2. linux abi
abi是一系列约定的集合,例如gnu/linux,freebsd约定函数调用的头六个整型参数放在寄存器rdi, rsi, rdx, rcx, r8和r9上;同时xmm0到xmm7用来放置浮点变元。对于系统调用,r10用来替代rcx。其他额外的参数推入栈,返回值保存在rax中。[1] 可以说调用惯例(calling convention)就是abi。因此,abi是和具体cpu架构和os相关的。
具体而言,abi包含以下内容:[3]
1. 一个特定的处理器指令集
2. 函数调用惯例
3. 系统调用方式
4. 可执行文件的格式(elf,pe)
那么,究竟我们为什么要纠结于abi这个概念呢?答案是为了兼容,只要os遵守相同的abi规范,那么不同的应用就可以实现向前兼容,再也不用担心版本升级后,旧版本的应用不能运行了。
3. in-kernel api
内核api主要是内核中标记为 “export_symbol”的函数。这些函数主要是为了内核模块的编写而提供的。收到内核版本迭代的影响,内核api并不稳定。2.x版本内核的模块可能在3.x版本上就无法使用。
4. in-kernel abi
内核的abi和linux abi的定义类似,再次不再赘述。
5. abstraction abi
在某些情况下,内核过于底层,开发者需要更高一层的抽象。于是出现了类似mesa 3d的为图形驱动开发而生的api。

5G手机如果没有UFS 3.0技术或许还真行不通
关于土壤水分温度盐分PH速测仪
智能手机图像传感器技术原理及未来趋向
华北电力大学打造具有中国特色的 “5G+工业互联网+智慧能源”解决方案
如果让AI自行理解人类颜值的意义,我们会不会得到更好的效果?
看看Linux中形形色色的接口
注射器测试仪设备大全,了解一下!
【推荐】Ebyte CAN分析软件——ECAN Tools
苹果将在下半年推廉价版平板电脑、笔记本及新款Apple Watch
盘点14家已经获得甲级导航电子地图制作资质的单位
奥特斯将投资10亿欧元在重庆新建一座高端半导体封装载板工厂
2021年中国智能手机处理器市场竞争加剧
计算类 IC——硬核科技的代表
SAP系统有哪些接口技术
彩电中声表面滤波器的功能及生产工艺
M12分线盒集线器
如何提供智能装置稳定的电源便成为一大课题
工业机器人到底有多“轴”?
广汽蔚来发布首款概念车 定位为纯电动SUV
地线接地是否有效的测试方法