官术网_书友最值得收藏!

1.1 Linux系統(tǒng)調用和用戶程序編程接口

1.1.1 系統(tǒng)調用

操作系統(tǒng)負責管理和分配所有的計算機資源。為了更好地服務于應用程序,操作系統(tǒng)提供了一組特殊接口—系統(tǒng)調用。通過這組接口,用戶程序可以使用操作系統(tǒng)內核提供的各種功能,如分配內存、創(chuàng)建進程、實現(xiàn)進程之間的通信等。

為什么不允許程序直接訪問計算機資源?答案是不安全。單片機開發(fā)中,由于不需要操作系統(tǒng),所以開發(fā)人員可以編寫代碼直接訪問硬件。而在嵌入式系統(tǒng)中通常都要運行操作系統(tǒng),程序訪問資源的方式就發(fā)生了改變。操作系統(tǒng)基本上都支持多任務,即同時可以運行多個程序。如果允許程序直接訪問系統(tǒng)資源,肯定會帶來很多問題。因此,所有軟硬件資源的管理和分配都由操作系統(tǒng)負責。程序要獲取資源(如分配內存、讀寫串口)必須通過操作系統(tǒng)來完成,即用戶程序向操作系統(tǒng)發(fā)出服務請求,操作系統(tǒng)收到請求后執(zhí)行相關的代碼來處理。

用戶程序向操作系統(tǒng)提出請求的接口就是系統(tǒng)調用。所有的操作系統(tǒng)都會提供系統(tǒng)調用接口,只不過不同的操作系統(tǒng)提供的系統(tǒng)調用接口各不相同。Linux 系統(tǒng)調用接口非常精簡,它繼承了 UNIX 系統(tǒng)調用中最基本和最有用的部分。這些系統(tǒng)調用按照功能大致可分為進程控制、進程間通信、文件系統(tǒng)控制、存儲管理、網(wǎng)絡管理、套接字控制、用戶管理等。

1.1.2 用戶程序編程接口

前面提到利用系統(tǒng)調用接口程序可以訪問各種資源,但在實際開發(fā)中程序并不直接使用系統(tǒng)調用接口,而是使用用戶程序編程接口(API)。為什么不直接使用系統(tǒng)調用接口呢?原因如下。

(1)系統(tǒng)調用接口功能非常簡單,無法滿足程序的需求。

(2)不同操作系統(tǒng)的系統(tǒng)調用接口不兼容,程序移植時工作量大。

用戶程序編程接口通俗的解釋就是各種庫(最重要的就是 C 庫)中的函數(shù)。為了提高開發(fā)效率,C 庫中實現(xiàn)了很多函數(shù)。這些函數(shù)實現(xiàn)了常用的功能,供程序員調用。這樣一來,程序員不需要自己編寫這些代碼,直接調用庫函數(shù)就可以實現(xiàn)基本功能,提高了代碼的復用率。使用用戶程序編程接口還有一個好處:程序具有良好的可移植性。幾乎所有的操作系統(tǒng)上都實現(xiàn)了C 庫,所以程序通常只需要重新編譯一下就可以在其他操作系統(tǒng)下運行。

用戶程序編程接口(API)在實現(xiàn)時,通常都要依賴系統(tǒng)調用接口。例如,創(chuàng)建進程的 API 函數(shù) fork()對應于內核空間的 sys_fork()系統(tǒng)調用。很多 API 函數(shù)需要通過多個系統(tǒng)調用來完成其功能。還有一些 API 函數(shù)不需要調用任何系統(tǒng)調用。

在 Linux 中,用戶程序編程接口(API)遵循了在 UNIX 中最流行的應用編程界面標準—POSIX 標準。POSIX 標準是由 IEEE 和 ISO/IEC 共同開發(fā)的標準系統(tǒng),該標準基于當時的 UNIX 實踐和經(jīng)驗,描述了操作系統(tǒng)的系統(tǒng)調用編程接口(實際上就是 API),用于保證應用程序可以在源代碼一級上在多種操作系統(tǒng)上移植運行。這些系統(tǒng)調用編程接口主要是通過C 庫(libc)實現(xiàn)的。

主站蜘蛛池模板: 杭州市| 泗阳县| 彝良县| 延川县| 浦江县| 赤水市| 西丰县| 花垣县| 江津市| 宕昌县| 塔河县| 平舆县| 连州市| 油尖旺区| 富源县| 龙里县| 锦屏县| 石渠县| 富顺县| 广州市| 诸暨市| 平泉县| 木里| 石狮市| 萝北县| 正镶白旗| 靖江市| 应用必备| 儋州市| 江西省| 葵青区| 凭祥市| 山东| 耒阳市| 朝阳市| 阿图什市| 耿马| 横山县| 枣阳市| 阿瓦提县| 德清县|