- 嵌入式應用程序設計綜合教程(微課版)
- 華清遠見嵌入式學院 劉洪濤 熊家主編
- 1104字
- 2021-01-15 19:25:07
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)的。
- 30天自制操作系統(tǒng)
- Windows Vista基礎與應用精品教程
- Learning Windows Server Containers
- Ansible權威指南
- 循序漸進學Docker
- macOS效率手冊
- Linux使用和管理指南:從云原生到可觀測性
- Linux命令行大全(第2版)
- VMware Horizon Mirage Essentials
- Getting Started with UDK
- 操作系統(tǒng)之哲學原理第2版
- 電腦辦公(Windows 7 + Office 2013)入門與提高
- Drupal 7 Mobile Web Development Beginner’s Guide
- The Infinite Retina
- UG NX 實例教程(第2版)