亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入了解系統(tǒng)調(diào)用API:探索操作系統(tǒng)底層的關(guān)鍵接口

? 來(lái)源:jf_57394773 ? 作者:jf_57394773 ? 2025-11-03 09:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言
為什么用戶(hù)程序不能直接訪(fǎng)問(wèn)系統(tǒng)內(nèi)核模式提供的服務(wù)?

linux中,將程序的運(yùn)行空間分為內(nèi)核空間與用戶(hù)空間(內(nèi)核態(tài)和用戶(hù)態(tài)),在邏輯上它們之間是相互隔離的,因此用戶(hù)程序不能訪(fǎng)問(wèn)內(nèi)核數(shù)據(jù),也無(wú)法使用內(nèi)核函數(shù)。當(dāng)用戶(hù)進(jìn)程必須訪(fǎng)問(wèn)內(nèi)核或使用某個(gè)內(nèi)核函數(shù)時(shí),就得使用系統(tǒng)調(diào)用(System Call)。在Linux中,系統(tǒng)調(diào)用是用戶(hù)空間訪(fǎng)問(wèn)內(nèi)核空間的唯一途徑。

什么是系統(tǒng)調(diào)用?

答:系統(tǒng)調(diào)用就是一種特殊的接口。通過(guò)這個(gè)接口,用戶(hù)可以訪(fǎng)問(wèn)內(nèi)核空間。系統(tǒng)調(diào)用規(guī)定了用戶(hù)進(jìn)程進(jìn)入內(nèi)核的具體位置。系統(tǒng)調(diào)用是用戶(hù)進(jìn)程進(jìn)入內(nèi)核的接口層,它本身并非內(nèi)核函數(shù),但它是由內(nèi)核函數(shù)實(shí)現(xiàn),進(jìn)入內(nèi)核后,不同的系統(tǒng)調(diào)用會(huì)找到各自對(duì)應(yīng)的內(nèi)核函數(shù),這些內(nèi)核函數(shù)被稱(chēng)為系統(tǒng)調(diào)用的“服務(wù)例程”。比如系統(tǒng)調(diào)用getpid實(shí)際調(diào)用了服務(wù)例程為sys_getpid(),或者說(shuō)系統(tǒng)調(diào)用getpid是服務(wù)例程sys_getpid()的“封裝例程”。
具體步驟:用戶(hù)進(jìn)程-->系統(tǒng)調(diào)用-->內(nèi)核-->返回用戶(hù)空間。

系統(tǒng)調(diào)用就是為了解決上述問(wèn)題而引入的,是提供給用戶(hù)的“特殊接口”,系統(tǒng)調(diào)用規(guī)定用戶(hù)進(jìn)程進(jìn)入內(nèi)核空間的具體位置。

1.程序運(yùn)行空間從用戶(hù)空間進(jìn)入內(nèi)核空間。
2.處理完后再返回用戶(hù)空間。
什么是API

答:應(yīng)用程序接口A(yíng)PI(Application Programming Interface) ,是程序員在用戶(hù)空間下可以直接使用的函數(shù)接口。是一些預(yù)定義的函數(shù),比如常用的read()、malloc()、free()、abs()函數(shù)等,這些函數(shù)都具有一定功能,說(shuō)明了如何獲得一個(gè)給定的服務(wù),跟內(nèi)核沒(méi)有必然的聯(lián)系。提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件的以訪(fǎng)問(wèn)一組例程的能力,而又無(wú)需訪(fǎng)問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。

兩者的區(qū)別

答:區(qū)別:api是函數(shù)的定義,規(guī)定了這個(gè)函數(shù)的功能,跟內(nèi)核無(wú)直接關(guān)系。而系統(tǒng)調(diào)用是通過(guò)中斷向內(nèi)核發(fā)請(qǐng)求,實(shí)現(xiàn)內(nèi)核提供的某些服務(wù)。

聯(lián)系:程序員調(diào)用的是API(API函數(shù)),然后通過(guò)與系統(tǒng)調(diào)用共同完成函數(shù)的功能。 因此,API是一個(gè)提供給應(yīng)用程序的接口,一組函數(shù),是與程序員進(jìn)行直接交互的。系統(tǒng)調(diào)用則不與程序員進(jìn)行交互的,它是根據(jù)API函數(shù),通過(guò)一個(gè)軟中斷機(jī)制向內(nèi)核提交請(qǐng)求,以獲取內(nèi)核服務(wù)的接口。

有時(shí)候,某些API所提供的功能會(huì)涉及到與內(nèi)核空間進(jìn)行交互。那么,這類(lèi)API內(nèi)部會(huì)封裝系統(tǒng)調(diào)用。而不涉及與內(nèi)核進(jìn)行交互的API則不會(huì)封裝系統(tǒng)調(diào)用。也就是說(shuō),API和系統(tǒng)調(diào)用并沒(méi)有嚴(yán)格的一一對(duì)應(yīng)關(guān)系,一個(gè)API可能恰好只對(duì)應(yīng)一個(gè)系統(tǒng)調(diào)用,比如read()系統(tǒng)調(diào)用和read();一個(gè)API也可能由多個(gè)系統(tǒng)調(diào)用實(shí)現(xiàn);有時(shí)候,一個(gè)API的功能可能并不需要內(nèi)核提供的服務(wù),那么此時(shí)這個(gè)API也就不需要任何的系統(tǒng)調(diào)用,比如abs()。另外,一個(gè)系統(tǒng)調(diào)用可能還被多個(gè)API內(nèi)部調(diào)用。

對(duì)于編程者來(lái)說(shuō),系統(tǒng)調(diào)用和API都是一組函數(shù),并無(wú)什么兩樣,二者關(guān)注的都是函數(shù)名、參數(shù)類(lèi)型及返回值的含義;但是事實(shí)上,系統(tǒng)調(diào)用的實(shí)現(xiàn)是在內(nèi)核完成的,API則是在函數(shù)庫(kù)中實(shí)現(xiàn)的。

例如: 在內(nèi)核中實(shí)現(xiàn)了write系統(tǒng)調(diào)用。
AI寫(xiě)代碼
在庫(kù)函數(shù)中通過(guò)宏定義的方式實(shí)現(xiàn)write API??梢栽趗nistd.h中看到write到系統(tǒng)調(diào)用的轉(zhuǎn)換。

API是用戶(hù)程序直接可以使用的函數(shù)接口,但如果每個(gè)操作系統(tǒng)都擁有只屬于自己的API,那么應(yīng)用程序的移植性將會(huì)很差?;赑OSIX(Portable Operating System Interface)標(biāo)準(zhǔn)的API擁有很好的可移植性,它定義了一套POSIX兼容標(biāo)準(zhǔn),這使得按這個(gè)標(biāo)準(zhǔn)實(shí)現(xiàn)的API可以在各種版本的UNIX中使用?,F(xiàn)如今,它也可以在除UNIX之外的操作系統(tǒng)中使用,比如Linux,Windows NT等。

二、系統(tǒng)調(diào)用
操作系統(tǒng)負(fù)責(zé)管理和分配所有的計(jì)算機(jī)資源。為了更好地服務(wù)于應(yīng)用程序,操作系統(tǒng)提供了一組特殊接口———系統(tǒng)調(diào)用。用戶(hù)程序可以通過(guò)這組特殊的接口來(lái)獲取操作系統(tǒng)內(nèi)核提供的各種功能,如分配內(nèi)存、創(chuàng)建進(jìn)程、實(shí)現(xiàn)進(jìn)程之間的通信等。

系統(tǒng)調(diào)用(system call) 其實(shí)是 Linux 內(nèi)核提供給應(yīng)用層的應(yīng)用編程接口(API) , 是 Linux 應(yīng)用層進(jìn)入內(nèi)核的入口。不止 Linux 系統(tǒng),所有的操作系統(tǒng)都會(huì)向應(yīng)用層提供系統(tǒng)調(diào)用,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用來(lái)使用操作系統(tǒng)提供的各種服務(wù)。

通過(guò)系統(tǒng)調(diào)用, Linux 應(yīng)用程序可以請(qǐng)求內(nèi)核以自己的名義執(zhí)行某些事情,譬如打開(kāi)磁盤(pán)中的文件、讀寫(xiě)文件、關(guān)閉文件以及控制其它硬件外設(shè)。

通過(guò)系統(tǒng)調(diào)用 API,應(yīng)用層可以實(shí)現(xiàn)與內(nèi)核的交互,其關(guān)系可通過(guò)下圖簡(jiǎn)單描述:

內(nèi)核提供了一系列的服務(wù)、資源、支持一系列功能,應(yīng)用程序通過(guò)調(diào)用系統(tǒng)調(diào)用 API 函數(shù)來(lái)使用內(nèi)核提供的服務(wù)、資源以及各種各樣的功能, 如果大家接觸過(guò)其它操作系統(tǒng)編程,想必對(duì)此并不陌生,譬如Windows 應(yīng)用編程,操作系統(tǒng)內(nèi)核一般都會(huì)向應(yīng)用程序提供應(yīng)用編程接口 API,否則我們將我無(wú)法使用操作系統(tǒng)。

為什么用戶(hù)程序不能直接訪(fǎng)問(wèn)系統(tǒng)內(nèi)核提供的服務(wù)呢?答案是不安全。

單片機(jī)開(kāi)發(fā)中,由于不需要操作系統(tǒng),只需要知道寄存器的地址,代碼通過(guò)指針直接操作硬件,所以開(kāi)發(fā)人員可以編寫(xiě)代碼直接訪(fǎng)問(wèn)硬件。硬件>>>>>>代碼直接在內(nèi)存中運(yùn)行操作硬件。

而在嵌入式系統(tǒng)中通常都要運(yùn)行操作系統(tǒng),程序訪(fǎng)問(wèn)資源的方式就發(fā)生了改變。操作系統(tǒng)基本上都支持多任務(wù),即同時(shí)可以運(yùn)行多個(gè)程序。如果允許程序直接訪(fǎng)問(wèn)系統(tǒng)資源,肯定會(huì)帶來(lái)很多問(wèn)題。因此,所有軟硬件資源的管理和分配都由操作系統(tǒng)負(fù)責(zé)。程序要獲取資源(如分配內(nèi)存、讀寫(xiě)串口)必須通過(guò)操作系統(tǒng)來(lái)完成,即用戶(hù)程序向操作系統(tǒng)發(fā)出服務(wù)請(qǐng)求,操作系統(tǒng)收到請(qǐng)求后執(zhí)行相關(guān)的代碼來(lái)處理。硬件>>>>>>>操作系統(tǒng)>>>>>>>代碼

還有更重要的一點(diǎn)是,在Linux中,為了更好地保護(hù)內(nèi)核空間,將程序的運(yùn)行空間分為用戶(hù)空間和內(nèi)核空間(也就是常稱(chēng)的用戶(hù)態(tài)和內(nèi)核態(tài)),它們分別運(yùn)行在不同的級(jí)別上,邏輯上是相互分離的。因此,用戶(hù)進(jìn)程通常情況下不允許訪(fǎng)問(wèn)內(nèi)核數(shù)據(jù),也無(wú)法使用內(nèi)核函數(shù),它們只能在用戶(hù)空間操作用戶(hù)數(shù)據(jù),調(diào)用用戶(hù)空間的函數(shù)。但是,在有些情況下,用戶(hù)空間的進(jìn)程需要獲得內(nèi)核的系統(tǒng)服務(wù)(調(diào)用內(nèi)核空間程序),這時(shí)操作系統(tǒng)就必須利用系統(tǒng)提供用戶(hù)的特殊接口———”系統(tǒng)調(diào)用”規(guī)定用戶(hù)進(jìn)程進(jìn)入內(nèi)核空間的具體位置。在進(jìn)行系統(tǒng)調(diào)用時(shí),程序運(yùn)行空間需要從用戶(hù)空間進(jìn)入內(nèi)核空間,處理完成后再返回用戶(hù)空間。

用戶(hù)程序向操作系統(tǒng)提出請(qǐng)求的接口就是系統(tǒng)調(diào)用。所有的操作系統(tǒng)都會(huì)提供系統(tǒng)調(diào)用接口,只不過(guò)不同的操作系統(tǒng)提供的系統(tǒng)調(diào)用接口各不相同。Linux系統(tǒng)調(diào)用接口非常精簡(jiǎn)(只有250個(gè)左右),它繼承了UNIX系統(tǒng)調(diào)用中最基本和最有用的部分。這些系統(tǒng)調(diào)用按照功能大致可分為進(jìn)程控制、進(jìn)程間通信、文件系統(tǒng)控制、存儲(chǔ)管理、網(wǎng)絡(luò)管理、套接字控制、用戶(hù)管理等。

應(yīng)用編程與裸機(jī)編程、驅(qū)動(dòng)編程有什么區(qū)別?

在學(xué)習(xí)應(yīng)用編程之前,相信大家都有過(guò)軟件開(kāi)發(fā)經(jīng)驗(yàn),譬如 51、 STM32單片機(jī)軟件開(kāi)發(fā)、 以及嵌入式 Linux 硬件平臺(tái)下的驅(qū)動(dòng)開(kāi)發(fā)等, 51、 STM32 這類(lèi)單片機(jī)的軟件開(kāi)發(fā)通常是裸機(jī)程序開(kāi)發(fā),并不會(huì)涉及到操作系統(tǒng)的概念,那應(yīng)用編程與裸機(jī)編程以及驅(qū)動(dòng)開(kāi)發(fā)有什么區(qū)別呢?

就拿嵌入式 Linux 硬件平臺(tái)下的軟件開(kāi)發(fā)來(lái)說(shuō),我們大可將編程分為三種,分別為裸機(jī)編程、 Linux 驅(qū)動(dòng)編程以及 Linux 應(yīng)用編程。首先對(duì)于裸機(jī)編程這個(gè)概念來(lái)說(shuō)很好理解,一般把沒(méi)有操作系統(tǒng)支持的編程環(huán)境稱(chēng)為裸機(jī)編程環(huán)境,譬如單片機(jī)上的編程開(kāi)發(fā),編寫(xiě)直接在硬件上運(yùn)行的程序,沒(méi)有操作系統(tǒng)支持; 狹義上 Linux 驅(qū)動(dòng)編程指的是基于內(nèi)核驅(qū)動(dòng)框架開(kāi)發(fā)驅(qū)動(dòng)程序, 驅(qū)動(dòng)開(kāi)發(fā)工程師通過(guò)調(diào)用 Linux 內(nèi)核提供的接口完成設(shè)備驅(qū)動(dòng)的注冊(cè), 驅(qū)動(dòng)程序負(fù)責(zé)底層硬件操作相關(guān)邏輯, 如果學(xué)習(xí)過(guò) Linux 驅(qū)動(dòng)開(kāi)發(fā)的讀者,想必對(duì)此并不陌生; 而 Linux 應(yīng)用編程(系統(tǒng)編程)則指的是基于 Linux 操作系統(tǒng)的應(yīng)用編程,在應(yīng)用程序中通過(guò)調(diào)用系統(tǒng)調(diào)用 API 完成應(yīng)用程序的功能和邏輯, 應(yīng)用程序運(yùn)行于操作系統(tǒng)之上。通常在操作系統(tǒng)下有兩種不同的狀態(tài):內(nèi)核態(tài)和用戶(hù)態(tài),應(yīng)用程序運(yùn)行在用戶(hù)態(tài)、而內(nèi)核則運(yùn)行在內(nèi)核態(tài)。

三、用戶(hù)編程接口(API)---C庫(kù)
前面提到利用系統(tǒng)調(diào)用接口程序可以訪(fǎng)問(wèn)各種資源,但并不直接與程序員進(jìn)行交互,它僅僅是一個(gè)通過(guò)軟中斷機(jī)制向內(nèi)核提交請(qǐng)求以獲取內(nèi)核服務(wù)的接口。但在實(shí)際開(kāi)發(fā)中程序并不直接使用系統(tǒng)調(diào)用接口,而是使用用戶(hù)程序編程接口(API)。例如,創(chuàng)建進(jìn)程的API函數(shù)fork()函數(shù)對(duì)應(yīng)于內(nèi)核空間的sys_fork()系統(tǒng)調(diào)用,但并不是所有的函數(shù)都對(duì)應(yīng)一個(gè)系統(tǒng)調(diào)用。有時(shí),一個(gè)API函數(shù)會(huì)需要幾個(gè)系統(tǒng)調(diào)用來(lái)共同完成函數(shù)的功能,甚至還有一些API函數(shù)不需要調(diào)用相應(yīng)的系統(tǒng)調(diào)用(因此它所完成的不是內(nèi)核提供的服務(wù))。

前面給大家介紹了系統(tǒng)調(diào)用,系統(tǒng)調(diào)用是內(nèi)核直接向應(yīng)用層提供的應(yīng)用編程接口, 譬如 open、 write、read、 close 等。編寫(xiě)應(yīng)用程序除了使用系統(tǒng)調(diào)用之外,我們還可以使用庫(kù)函數(shù)。

庫(kù)函數(shù)也就是 C 語(yǔ)言庫(kù)函數(shù), C 語(yǔ)言庫(kù)是應(yīng)用層使用的一套函數(shù)庫(kù), 在 Linux 下,通常以動(dòng)態(tài)(.so)庫(kù)文件的形式提供,存放在根文件系統(tǒng)/lib 目錄下, C 語(yǔ)言庫(kù)函數(shù)構(gòu)建于系統(tǒng)調(diào)用之上,也就是說(shuō)庫(kù)函數(shù)其實(shí)是由系統(tǒng)調(diào)用封裝而來(lái)的,當(dāng)然也不能完全這么說(shuō), 原因在于有些庫(kù)函數(shù)并不調(diào)用任何系統(tǒng)調(diào)用,譬如一些字符串處理函數(shù) strlen()、 strcat()、 memcpy()、 memset()、 strchr()等等; 而有些庫(kù)函數(shù)則會(huì)使用系統(tǒng)調(diào)用來(lái)幫它完成實(shí)際的操作,譬如庫(kù)函數(shù) fopen 內(nèi)部調(diào)用了系統(tǒng)調(diào)用 open()來(lái)幫它打開(kāi)文件、庫(kù)函數(shù) fread()就利用了系統(tǒng)調(diào)用 read()來(lái)完成讀文件操作、 fwrite()就利用了系統(tǒng)調(diào)用 write()來(lái)完成寫(xiě)文件操作。

庫(kù)函數(shù)可以理解為是對(duì)系統(tǒng)調(diào)用的一層封裝。系統(tǒng)調(diào)用作為內(nèi)核提供給用戶(hù)程序的接口,它的執(zhí)行效率是比較高效而精簡(jiǎn)的,但有時(shí)我們需要對(duì)獲取的信息進(jìn)行更復(fù)雜的處理,或更人性化的需要,我們把這些處理過(guò)程封裝成一個(gè)函數(shù)再提供給程序員,更方便于程序猿編碼。庫(kù)函數(shù)有可能包含有一個(gè)系統(tǒng)調(diào)用,有可能有好幾個(gè)系統(tǒng)調(diào)用,當(dāng)然也有可能沒(méi)有系統(tǒng)調(diào)用,比如有些操作不需要涉及內(nèi)核的功能??梢詤⒖枷聢D來(lái)理解庫(kù)函數(shù)與系統(tǒng)調(diào)用的關(guān)系。

Linux 系統(tǒng)內(nèi)核提供了一系列的系統(tǒng)調(diào)用供應(yīng)用層使用, 我們直接使用系統(tǒng)調(diào)用就可以了呀,那為何還要設(shè)計(jì)出庫(kù)函數(shù)呢?事實(shí)上, 有些系統(tǒng)調(diào)用使用起來(lái)并不是很方便, 于是就出現(xiàn)了 C 語(yǔ)言庫(kù),這些 C 語(yǔ)言庫(kù)函數(shù)的設(shè)計(jì)是為了提供比底層系統(tǒng)調(diào)用更為方便、更為好用、 且更具有可移植性的調(diào)用接口。

來(lái)看一看它們之間的區(qū)別:

庫(kù)函數(shù)是屬于應(yīng)用層,而系統(tǒng)調(diào)用是內(nèi)核提供給應(yīng)用層的編程接口,屬于系統(tǒng)內(nèi)核的一部分;
庫(kù)函數(shù)運(yùn)行在用戶(hù)空間,調(diào)用系統(tǒng)調(diào)用會(huì)由用戶(hù)空間(用戶(hù)態(tài))陷入到內(nèi)核空間(內(nèi)核態(tài));
庫(kù)函數(shù)通常是有緩存的,而系統(tǒng)調(diào)用是無(wú)緩存的,所以在性能、效率上,庫(kù)函數(shù)通常要優(yōu)于系統(tǒng)調(diào)用;
可移植性:庫(kù)函數(shù)相比于系統(tǒng)調(diào)用具有更好的可移植性,通常對(duì)于不同的操作系統(tǒng),其內(nèi)核向應(yīng)用層提供的系統(tǒng)調(diào)用往往都是不同,譬如系統(tǒng)調(diào)用的定義、功能、參數(shù)列表、返回值等往往都是不一樣的;而對(duì)于 C 語(yǔ)言庫(kù)函數(shù)來(lái)說(shuō),由于很多操作系統(tǒng)都實(shí)現(xiàn)了 C 語(yǔ)言庫(kù), C 語(yǔ)言庫(kù)在不同的操作系統(tǒng)之間其接口定義幾乎是一樣的,所以庫(kù)函數(shù)在不同操作系統(tǒng)之間相比于系統(tǒng)調(diào)用具有更好的可移植性。
以上便上它們之間一個(gè)大致的區(qū)別, 從實(shí)現(xiàn)者的角度來(lái)看,系統(tǒng)調(diào)用與庫(kù)函數(shù)之間有根本的區(qū)別,但從用戶(hù)使用角度來(lái)看,其區(qū)別并不重要,它們都是 C 語(yǔ)言函數(shù)。 在實(shí)際應(yīng)用編程中,庫(kù)函數(shù)和系統(tǒng)調(diào)用都會(huì)使用到,所以對(duì)于我們來(lái)說(shuō),直接把它們當(dāng)做是 C 函數(shù)即可,知道你自己調(diào)用的函數(shù)是系統(tǒng)調(diào)用還是庫(kù)函數(shù)即可,不用太過(guò)于區(qū)分它們之間的差別,所以應(yīng)用編程簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是:開(kāi)發(fā) Linux 應(yīng)用程序,通過(guò)調(diào)用內(nèi)核提供的系統(tǒng)調(diào)用或使用 C 庫(kù)函數(shù)來(lái)開(kāi)發(fā)具有相應(yīng)功能的應(yīng)用程序。

為什么不直接使用系統(tǒng)調(diào)用接口了。原因如下:

系統(tǒng)調(diào)用接口功能非常簡(jiǎn)單,無(wú)法滿(mǎn)足程序的要求
不同操作系統(tǒng)的系統(tǒng)調(diào)用接口不兼容,程序移植時(shí)工作量大。
用戶(hù)程序編程接口通俗的解釋就是各種庫(kù)(最重要的就是C庫(kù))中的函數(shù)。為了提高開(kāi)發(fā)效率,C庫(kù)中實(shí)現(xiàn)了很多函數(shù)。這些函數(shù)實(shí)現(xiàn)了常用的功能,供程序員調(diào)用。這樣一來(lái),程序員就不需要自己編寫(xiě)這些代碼。直接調(diào)用庫(kù)函數(shù)就可以實(shí)現(xiàn)基本功能,提高了代碼的復(fù)用率。使用用戶(hù)程序編程接口好友一個(gè)好處就是:程序具有良好的可移植性。幾乎所有的操作系統(tǒng)上都實(shí)現(xiàn)了C庫(kù),所以程序通常只需要重新編譯一下就可以在其它操作系統(tǒng)下運(yùn)行。

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

3.1系統(tǒng)命令
每一個(gè)系統(tǒng)命令其實(shí)就是一個(gè)可執(zhí)行的程序,這些可執(zhí)行程序的實(shí)現(xiàn)調(diào)用了某些系統(tǒng)調(diào)用。并且,這些可執(zhí)行程序又分為普通用戶(hù)可使用的命令和管理員可使用的命令。根據(jù)上述分類(lèi),普通用戶(hù)可用的命令和管理可用的命令分別被存放于/bin和/sbin目錄下。

系統(tǒng)命令相對(duì)于A(yíng)PI更高了一層,它實(shí)際上是一個(gè)可執(zhí)行程序,它的內(nèi)部引用了用戶(hù)編程接口(API)來(lái)實(shí)現(xiàn)相應(yīng)的功能,它們之間的關(guān)系如下圖:

3.2內(nèi)核函數(shù)
內(nèi)核函數(shù)和用戶(hù)空間中函數(shù)并無(wú)兩樣,只不過(guò)內(nèi)核函數(shù)是在內(nèi)核中實(shí)現(xiàn)。雖然系統(tǒng)調(diào)用是用戶(hù)進(jìn)程進(jìn)入內(nèi)核的唯一途徑,但是系統(tǒng)調(diào)用函數(shù)內(nèi)部并不真正實(shí)現(xiàn)其功能,而是通過(guò)對(duì)內(nèi)核函數(shù)的封裝。也就是說(shuō),用戶(hù)程序通過(guò)某個(gè)系統(tǒng)調(diào)用進(jìn)入內(nèi)核后,會(huì)接著去執(zhí)行這個(gè)系統(tǒng)調(diào)用對(duì)應(yīng)的內(nèi)核函數(shù)。這個(gè)內(nèi)核函數(shù)也稱(chēng)為系統(tǒng)調(diào)用的服務(wù)例程。

由于內(nèi)核函數(shù)是在內(nèi)核中實(shí)現(xiàn)的,因此它必須符合內(nèi)核編程的規(guī)則,比如函數(shù)名以sys_開(kāi)始,函數(shù)定義時(shí)候需加asmlinkage標(biāo)識(shí)符等。

四、標(biāo)準(zhǔn)C程序的實(shí)例


首先,C程序調(diào)用API函數(shù)printf;
printf 函數(shù)的調(diào)用引發(fā)了對(duì)應(yīng)的系統(tǒng)調(diào)用write的執(zhí)行;
write執(zhí)行結(jié)束時(shí)的返回值傳遞回用戶(hù)程序;
4.1操作系統(tǒng)的模式
(1)雙重模式(DUAL MODE)

現(xiàn)代計(jì)算機(jī)系統(tǒng)有一個(gè)特殊的硬件,用于劃分系統(tǒng)的運(yùn)行狀態(tài),至少需要兩種單獨(dú)運(yùn)行模式:

用戶(hù)模式(user mode):執(zhí)行用戶(hù)代碼
內(nèi)核模式(kernel mode):執(zhí)行操作系統(tǒng)代碼
目的:確保操作系統(tǒng)正確的運(yùn)行

實(shí)現(xiàn)方式:用一個(gè)硬件模式位來(lái)表示當(dāng)前模式:0表示內(nèi)核模式,1表示用戶(hù)模式

(2)運(yùn)行模式的切換

程序執(zhí)行流剛開(kāi)始在“用戶(hù)模式”運(yùn)行,當(dāng)發(fā)生系統(tǒng)調(diào)用的時(shí)候,需要從“用戶(hù)模式”切換到“內(nèi)核模式”運(yùn)行。
這種模式切換的機(jī)制稱(chēng)為:陷阱(Trap)機(jī)制。
4.2系統(tǒng)調(diào)用的實(shí)現(xiàn)機(jī)制

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9364

    瀏覽量

    155857
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7290

    瀏覽量

    128314
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2031

    瀏覽量

    65974
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    探索操作系統(tǒng)底層關(guān)鍵接口

      在linux中,將程序的運(yùn)行空間分為內(nèi)核空間與用戶(hù)空間(內(nèi)核態(tài)和用戶(hù)態(tài)),在邏輯上它們之間是相互隔離的,因此用戶(hù)程序不能訪(fǎng)問(wèn)內(nèi)核數(shù)據(jù),也無(wú)法使用內(nèi)核函數(shù)。當(dāng)用戶(hù)進(jìn)程必須訪(fǎng)問(wèn)內(nèi)核或使用某個(gè)內(nèi)核函數(shù)時(shí),就得使用系統(tǒng)調(diào)用(System Call)。在Linux中,
    的頭像 發(fā)表于 11-08 12:42 ?97次閱讀

    淘寶商品詳情API接口技術(shù)解析與實(shí)戰(zhàn)應(yīng)用

    出發(fā),系統(tǒng)解析淘寶商品詳情API接口調(diào)用機(jī)制、數(shù)據(jù)結(jié)構(gòu)及典型應(yīng)用場(chǎng)景,并附上基于Python的完整調(diào)用示例,助力開(kāi)發(fā)者高效集成商品數(shù)據(jù)服務(wù)
    的頭像 發(fā)表于 11-04 09:50 ?42次閱讀

    深入了解API:詳解應(yīng)用程序接口的作用和原理

    引言:在現(xiàn)代軟件開(kāi)發(fā)領(lǐng)域中, API(Application Programming Interface,應(yīng)用程序接口)扮演著至關(guān)重要的角色。無(wú)論是在Web開(kāi)發(fā)、移動(dòng)應(yīng)用還是大型軟件系統(tǒng)中,A
    的頭像 發(fā)表于 11-03 09:37 ?90次閱讀

    Python調(diào)用API教程

    兩個(gè)不同系統(tǒng)之間的信息交互。在這篇文章中,我們將詳細(xì)介紹Python調(diào)用API的方法和技巧。 一、用Requests庫(kù)發(fā)送HTTP請(qǐng)求 使用Python調(diào)用
    的頭像 發(fā)表于 11-03 09:15 ?206次閱讀

    教你如何使用API接口獲取數(shù)據(jù)!

    。在網(wǎng)絡(luò)環(huán)境中,API使得應(yīng)用程序能夠彼此交互。在軟件或硬件中,API使得不同的組件能夠互相操作。 在編寫(xiě)代碼調(diào)用API之前,你需要
    的頭像 發(fā)表于 11-03 09:14 ?214次閱讀

    API接口使用全指南:從基礎(chǔ)調(diào)用到實(shí)戰(zhàn)技巧

    一、API接口的基本認(rèn)知 API接口本質(zhì)上是一組預(yù)先定義的規(guī)則,規(guī)定了不同系統(tǒng)之間如何傳遞數(shù)據(jù)。常見(jiàn)的A
    的頭像 發(fā)表于 10-08 09:25 ?287次閱讀

    深度智能 基座躍遷 鴻道Intewell,面向“AI+智造”的新型工業(yè)操作系統(tǒng)

    科東軟件受邀參加“數(shù)字化與智能制造技術(shù)論壇”,帶來(lái)“AI+智造”的精彩分享。在“AI+智造”深度融合的時(shí)代洪流中,工業(yè)操作系統(tǒng)作為底層基座的重要性日益凸顯。鴻道Intewell操作系統(tǒng)已成為驅(qū)動(dòng)中國(guó)制造業(yè)智能化躍遷的
    的頭像 發(fā)表于 07-23 17:02 ?365次閱讀
    深度智能 基座躍遷  鴻道Intewell,面向“AI+智造”的新型工業(yè)<b class='flag-5'>操作系統(tǒng)</b>

    鴻道Intewell操作系統(tǒng):人形機(jī)器人底層操作系統(tǒng)

    操作系統(tǒng)的實(shí)時(shí)性賦能東土科技的鴻道(Intewell)工業(yè)操作系統(tǒng)作為國(guó)內(nèi)唯一通過(guò)汽車(chē)、工業(yè)控制、醫(yī)療、軌道交通四項(xiàng)功能安全認(rèn)證的系統(tǒng),為標(biāo)準(zhǔn)體系中的技術(shù)層架構(gòu)提供了底層支持。其微內(nèi)核
    的頭像 發(fā)表于 05-16 14:44 ?480次閱讀

    KaihongOS操作系統(tǒng):導(dǎo)入接口模塊介紹

    開(kāi)發(fā)者的一套標(biāo)準(zhǔn)化的編程接口,用于構(gòu)建應(yīng)用程序和系統(tǒng)服務(wù)。 接口模塊的特點(diǎn) 1. 封裝性:接口模塊將復(fù)雜的系統(tǒng)功能封裝成簡(jiǎn)單的
    發(fā)表于 04-25 08:16

    KaihongOS操作系統(tǒng):ArkTS語(yǔ)言基礎(chǔ)

    ArkTS語(yǔ)言基礎(chǔ) KaihongOS是面向全場(chǎng)景的萬(wàn)物智聯(lián)技術(shù)底座,在OpenHarmony基礎(chǔ)上技術(shù)創(chuàng)新和系統(tǒng)能力增強(qiáng)的跨設(shè)備的操作系統(tǒng),它支持多種設(shè)備類(lèi)型。ArkTS是KaihongOS
    發(fā)表于 04-23 06:31

    【「鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)」閱讀體驗(yàn)】01-初始華為鴻蒙

    他計(jì)算機(jī)硬件和軟件之間的交互。同理,計(jì)算機(jī)軟件也需要按照操作系統(tǒng)定義的 API(Application Program Interface,應(yīng)用程序接口)完成與操作系統(tǒng)的交互,從而達(dá)成
    發(fā)表于 01-25 11:05

    國(guó)產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

    國(guó)產(chǎn)銀河麒麟操作系統(tǒng)和星光麒麟操作系統(tǒng)都是由中國(guó)電子旗下科技企業(yè)麒麟軟件有限公司(簡(jiǎn)稱(chēng)“麒麟軟件”)開(kāi)發(fā)的國(guó)產(chǎn)自主可控的操作系統(tǒng)。麒麟軟件介紹:麒麟軟件以安全可信操作系統(tǒng)技術(shù)為核心,面
    的頭像 發(fā)表于 01-24 09:14 ?3879次閱讀
    國(guó)產(chǎn)銀河麒麟<b class='flag-5'>操作系統(tǒng)</b>V10和星光麒麟V1.0<b class='flag-5'>操作系統(tǒng)</b>如何選擇?

    鴻道Intewell工業(yè)操作系統(tǒng),三大關(guān)鍵技術(shù),領(lǐng)跑行業(yè)前沿

    鴻道工業(yè)操作系統(tǒng),是軟件定義控制的工業(yè)實(shí)時(shí)操作系統(tǒng),具備三大關(guān)鍵技術(shù):1、確定性計(jì)算與高實(shí)時(shí)響應(yīng)(微秒級(jí)、關(guān)鍵指標(biāo))提供確定性的計(jì)算與高實(shí)時(shí)的系統(tǒng)
    的頭像 發(fā)表于 12-25 14:46 ?749次閱讀

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.53】鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)

    定義和抽象的接口來(lái)設(shè)計(jì)與操作系統(tǒng)的交互,從而完成與其他計(jì)算機(jī)硬件和軟件之間的交互。 同理,計(jì)算機(jī)軟件也需要按照操作系統(tǒng)定義的 API(ApplicationProgram Interf
    發(fā)表于 12-16 15:10

    基于國(guó)產(chǎn)化鴻道Intewell操作系統(tǒng)的高性能實(shí)時(shí)運(yùn)動(dòng)控制解決方案

    目前國(guó)產(chǎn)化高實(shí)時(shí)運(yùn)動(dòng)控制達(dá)到了什么樣的控制水平呢?軟件+操作系統(tǒng)實(shí)時(shí)控制如何實(shí)現(xiàn)呢?下面,讓我們一起看看基于國(guó)產(chǎn)化鴻道Intewell操作系統(tǒng)的高性能實(shí)時(shí)運(yùn)動(dòng)控制解決方案,深入了解這一具有歷史新使命的自動(dòng)化控制技術(shù)。
    的頭像 發(fā)表于 12-05 16:03 ?690次閱讀