如果將內核比作一座工廠,那么Linux中眾多的接口就是通往這個巨大工廠的高速公路。這條路要足夠堅固,禁得起各種破壞(Robust)。要能跑得了運貨的卡車,還要能升降飛機。(Compatible)。當然了這條路要越寬越好(Performant)。如下圖所標,Linux中有四種類型的接口。位于內核和用戶之間的API(應用程序接口)和ABI(應用二進制接口)。內核內部的API和ABI。下面我們逐條的來看看這些接口。
1.Linux API
內核-用戶接口有內核系統(tǒng)調用和GNU C Library (glibc)的包裝例程(wrap subroutines)構成。Linux API開發(fā)的目標是給POSIX標準提供一個相對兼容的,程序健壯性強的,高性能的實現(xiàn),同時又實現(xiàn)一些Linux特有的標準。
1.1 Linux內核的系統(tǒng)調用接口
系統(tǒng)調用接口包含了內核中所有已經實現(xiàn)的和可使用的系統(tǒng)調用。
1.2 C標準庫
標準庫是對系統(tǒng)調用的封裝,用于給用戶提供一個簡單易用的用戶態(tài)接口。其中最為熟知的就是GNU C Library(glibc),還有為嵌入式和移動設備使用的uClibc。
1.3對POSIX的補充
還有一些接口是Linux特有的,比如:
Cgroup子系統(tǒng),該子系統(tǒng)包含cgroup系統(tǒng)調用和libcgroup。
Futex,epoll,dnotify,inotify,Fanotify等系統(tǒng)調用。
2. Linux ABI
ABI是一系列約定的集合,例如GNU/Linux,F(xiàn)reeBSD約定函數(shù)調用的頭六個整型參數(shù)放在寄存器RDI, RSI, RDX, RCX, R8和R9上;同時XMM0到XMM7用來放置浮點變元。對于系統(tǒng)調用,R10用來替代RCX。其他額外的參數(shù)推入棧,返回值保存在RAX中。[1] 可以說調用慣例(calling convention)就是ABI。因此,ABI是和具體CPU架構和OS相關的。
具體而言,ABI包含以下內容:[3]
1. 一個特定的處理器指令集
2. 函數(shù)調用慣例
3. 系統(tǒng)調用方式
4. 可執(zhí)行文件的格式(ELF,PE)
那么,究竟我們?yōu)槭裁匆m結于ABI這個概念呢?答案是為了兼容,只要OS遵守相同的ABI規(guī)范,那么不同的應用就可以實現(xiàn)向前兼容,再也不用擔心版本升級后,舊版本的應用不能運行了。
3. In-kernel API
內核API主要是內核中標記為 “EXPORT_SYMBOL”的函數(shù)。這些函數(shù)主要是為了內核模塊的編寫而提供的。收到內核版本迭代的影響,內核API并不穩(wěn)定。2.x版本內核的模塊可能在3.x版本上就無法使用。
4. In-Kernel ABI
內核的abi和linux abi的定義類似,再次不再贅述。
5. Abstraction ABI
在某些情況下,內核過于底層,開發(fā)者需要更高一層的抽象。于是出現(xiàn)了類似Mesa 3D的為圖形驅動開發(fā)而生的API。
-
Linux
+關注
關注
87文章
11351瀏覽量
210519 -
API
+關注
關注
2文章
1518瀏覽量
62459
原文標題:黃東升: Linux中形形色色的接口API和ABI
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
淺談Linux內核中的形形色色的“鐘表”
![淺談<b class='flag-5'>Linux</b>內核<b class='flag-5'>中</b>的<b class='flag-5'>形形色色</b>的“鐘表”](https://file.elecfans.com/web1/M00/C7/55/pIYBAF9kag2AYWgYAABQhMkDBMo317.png)
如何利用廢舊手機芯片編程
清形形色色的 USB 連接器,你分得清嗎?
畫PCB過程中應該注意哪些細節(jié)?
盤點六大常見通訊接口,拿捏不定就選他們吧
淺析Linux操作系統(tǒng)中備份恢復技術的應用
Molex全套現(xiàn)成電纜解決方案
區(qū)塊鏈將會如何改變各行各業(yè)
![區(qū)塊鏈將會如何改變各行各業(yè)](https://file.elecfans.com/web1/M00/9B/40/o4YBAF0kNUWAP5uTAAJ-nWGJIhs959.png)
評論