chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

答:系統(tǒng)調(diào)用就是一種特殊的接口。通過這個(gè)接口,用戶可以訪問內(nèi)核空間。系統(tǒng)調(diào)用規(guī)定了用戶進(jìn)程進(jìn)入內(nèi)核的具體位置。系統(tǒng)調(diào)用是用戶進(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ù)被稱為系統(tǒng)調(diào)用的“服務(wù)例程”。比如系統(tǒng)調(diào)用getpid實(shí)際調(diào)用了服務(wù)例程為sys_getpid(),或者說系統(tǒng)調(diào)用getpid是服務(wù)例程sys_getpid()的“封裝例程”。
具體步驟:用戶進(jìn)程-->系統(tǒng)調(diào)用-->內(nèi)核-->返回用戶空間。

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

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

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

兩者的區(qū)別

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

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

有時(shí)候,某些API所提供的功能會(huì)涉及到與內(nèi)核空間進(jìn)行交互。那么,這類API內(nèi)部會(huì)封裝系統(tǒng)調(diào)用。而不涉及與內(nèi)核進(jìn)行交互的API則不會(huì)封裝系統(tǒng)調(diào)用。也就是說,API和系統(tǒng)調(diào)用并沒有嚴(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ì)于編程者來說,系統(tǒng)調(diào)用和API都是一組函數(shù),并無什么兩樣,二者關(guān)注的都是函數(shù)名、參數(shù)類型及返回值的含義;但是事實(shí)上,系統(tǒng)調(diào)用的實(shí)現(xiàn)是在內(nèi)核完成的,API則是在函數(shù)庫中實(shí)現(xiàn)的。

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

API是用戶程序直接可以使用的函數(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)用。用戶程序可以通過這組特殊的接口來獲取操作系統(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)用程序通過系統(tǒng)調(diào)用來使用操作系統(tǒng)提供的各種服務(wù)。

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

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

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

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

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

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

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

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

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

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

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

三、用戶編程接口(API)---C庫
前面提到利用系統(tǒng)調(diào)用接口程序可以訪問各種資源,但并不直接與程序員進(jìn)行交互,它僅僅是一個(gè)通過軟中斷機(jī)制向內(nèi)核提交請求以獲取內(nèi)核服務(wù)的接口。但在實(shí)際開發(fā)中程序并不直接使用系統(tǒng)調(diào)用接口,而是使用用戶程序編程接口(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)用來共同完成函數(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 等。編寫應(yīng)用程序除了使用系統(tǒng)調(diào)用之外,我們還可以使用庫函數(shù)。

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

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

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

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

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

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

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

在Linux中,用戶程序編程接口(API)遵循了UNIX中最流行的應(yīng)用編程界面標(biāo)準(zhǔn)———POSIX標(biāo)準(zhǔn)。POSIX標(biāo)準(zhǔn)是由IEEE和ISO/IEC共同開發(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)用編程接口主要是通過C庫(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í)行程序又分為普通用戶可使用的命令和管理員可使用的命令。根據(jù)上述分類,普通用戶可用的命令和管理可用的命令分別被存放于/bin和/sbin目錄下。

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

3.2內(nèi)核函數(shù)
內(nèi)核函數(shù)和用戶空間中函數(shù)并無兩樣,只不過內(nèi)核函數(shù)是在內(nèi)核中實(shí)現(xiàn)。雖然系統(tǒng)調(diào)用是用戶進(jìn)程進(jìn)入內(nèi)核的唯一途徑,但是系統(tǒng)調(diào)用函數(shù)內(nèi)部并不真正實(shí)現(xiàn)其功能,而是通過對(duì)內(nèi)核函數(shù)的封裝。也就是說,用戶程序通過某個(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ù)也稱為系統(tǒng)調(diào)用的服務(wù)例程。

由于內(nèi)核函數(shù)是在內(nèi)核中實(shí)現(xiàn)的,因此它必須符合內(nèi)核編程的規(guī)則,比如函數(shù)名以sys_開始,函數(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í)的返回值傳遞回用戶程序;
4.1操作系統(tǒng)的模式
(1)雙重模式(DUAL MODE)

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

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

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

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

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

審核編輯 黃宇

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

    關(guān)注

    33

    文章

    9350

    瀏覽量

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

    關(guān)注

    37

    文章

    7279

    瀏覽量

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

    關(guān)注

    2

    文章

    2010

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    Python調(diào)用API教程

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

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

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

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

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

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

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

    揭秘LuatOS:實(shí)時(shí)操作系統(tǒng)RTOS核心庫的關(guān)鍵技術(shù)剖析!

    電機(jī)控制、傳感器采集等實(shí)時(shí)數(shù)據(jù)處理場景。 在LuatOS開發(fā)中, 用于實(shí)時(shí)操作系統(tǒng)(RTOS)相關(guān)功能的核心庫 ——提供了定時(shí)器管理、系統(tǒng)控制、內(nèi)存監(jiān)控、路徑配置等底層操作
    的頭像 發(fā)表于 05-21 16:02 ?452次閱讀
    揭秘LuatOS:實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>RTOS核心庫的<b class='flag-5'>關(guān)鍵</b>技術(shù)剖析!

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

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

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

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

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

    ArkTS語言基礎(chǔ) KaihongOS是面向全場景的萬物智聯(lián)技術(shù)底座,在OpenHarmony基礎(chǔ)上技術(shù)創(chuàng)新和系統(tǒng)能力增強(qiáng)的跨設(shè)備的操作系統(tǒng),它支持多種設(shè)備類型。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

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

    國產(chǎn)銀河麒麟操作系統(tǒng)和星光麒麟操作系統(tǒng)都是由中國電子旗下科技企業(yè)麒麟軟件有限公司(簡稱“麒麟軟件”)開發(fā)的國產(chǎn)自主可控的操作系統(tǒng)。麒麟軟件介紹:麒麟軟件以安全可信操作系統(tǒng)技術(shù)為核心,面
    的頭像 發(fā)表于 01-24 09:14 ?3813次閱讀
    國產(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 ?744次閱讀

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

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

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

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