1. 程式人生 > >系統呼叫、API之間的關係(圖)

系統呼叫、API之間的關係(圖)

1.為什麼使用者程式不能直接訪問系統核心模式提供的服務?

     在linux中,將程式的執行空間分為核心空間與使用者空間(核心態和使用者態),在邏輯上它們之間是相互隔離的,因此使用者程式不能訪問核心資料,也無法使用核心函式。當用戶程序必須訪問核心或使用某個核心函式時,就得使用系統呼叫(System Call)。在Linux中,系統呼叫是使用者空間訪問核心空間的唯一途徑。

2.什麼是系統呼叫?

答:系統呼叫就是一種特殊的介面。通過這個介面,使用者可以訪問核心空間。系統呼叫規定了使用者程序進入核心的具體位置。

       系統呼叫是使用者程序進入核心的介面層,它本身並非核心函式,但它是由核心函式實現,進入核心後,不同的系統呼叫會找到各自對應的核心函式,這些核心函式被稱為系統呼叫的“服務例程”。比如系統呼叫getpid實際呼叫了服務例程為sys_getpid(),或者說系統呼叫getpid是服務例程sys_getpid()的“封裝例程”。API和系統呼叫的區別


       具體步驟:使用者程序-->系統呼叫-->核心-->返回使用者空間。

系統呼叫就是為了解決上述問題而引入的,是提供給使用者的“特殊介面”。

    系統呼叫規定使用者程序進入核心空間的具體位置。

   1.程式執行空間從使用者空間進入核心空間。

   2.處理完後再返回使用者空間。

3.什麼是API

答:應用程式介面API(Application Programming Interface) ,是程式設計師在使用者空間下可以直接使用的函式介面。是一些預定義的函式,比如常用的read()、malloc()、free()、abs()函式等,這些函式都具有一定功能,說明了如何獲得一個給定的服務,跟核心沒有必然的聯絡。提供應用程式與開發人員基於某軟體或硬體的以訪問一組例程的能力,而又無需訪問原始碼,或理解內部工作機制的細節。

4.兩者的區別。

答:區別:api是函式的定義,規定了這個函式的功能,跟核心無直接關係。而系統呼叫是通過中斷向核心發請求,實現核心提供的某些服務。

      聯絡:程式設計師呼叫的是API(API函式),然後通過與系統呼叫共同完成函式的功能。   因此,API是一個提供給應用程式的介面,一組函式,是與程式設計師進行直接互動的。系統呼叫則不與程式設計師進行互動的,它是根據API函式,通過一個軟中斷機制向核心提交請求,以獲取核心服務的介面。

      有時候,某些API所提供的功能會涉及到與核心空間進行互動。那麼,這類API內部會封裝系統呼叫。而不涉及與核心進行互動的API則不會封裝系統呼叫。也就是說,API和系統呼叫並沒有嚴格的一一對應關係,一個API可能恰好只對應一個系統呼叫,比如read()系統呼叫和read();一個API也可能由多個系統呼叫實現;有時候,一個API的功能可能並不需要核心提供的服務,那麼此時這個API也就不需要任何的系統呼叫,比如abs()。另外,一個系統呼叫可能還被多個API內部呼叫。

       對於程式設計者來說系統呼叫和API都是一組函式,並無什麼兩樣,二者關注的都是函式名、引數型別及返回值的含義但是事實上系統呼叫的實現是核心完成的,API則是在函式庫中實現的

    例如:      在核心中實現了write系統呼叫。

                  在庫函式中通過巨集定義的方式實現write   API。可以在unistd.h中看到write到系統呼叫的轉換。

       API是使用者程式直接可以使用的函式介面,但如果每個作業系統都擁有隻屬於自己的API,那麼應用程式的移植性將會很差。基於POSIX(Portable Operating System Interface)標準的API擁有很好的可移植性,它定義了一套POSIX相容標準,這使得按這個標準實現的API可以在各種版本的UNIX中使用。現如今,它也可以在除UNIX之外的作業系統中使用,比如Linux,Windows NT等。

5、系統命令

       每一個系統命令其實就是一個可執行的程式,這些可執行程式的實現呼叫了某些系統呼叫。並且,這些可執行程式又分為普通使用者可使用的命令和管理員可使用的命令。根據上述分類,普通使用者可用的命令和管理可用的命令分別被存放於/bin和/sbin目錄下。

6.核心函式

       核心函式和使用者空間中函式並無兩樣,只不過核心函式是在核心中實現。雖然系統呼叫是使用者程序進入核心的唯一途徑,但是系統呼叫函式內部並不真正實現其功能,而是通過對核心函式的封裝。也就是說,使用者程式通過某個系統呼叫進入核心後,會接著去執行這個系統呼叫對應的核心函式。這個核心函式也稱為系統呼叫的服務例程

       由於核心函式是在核心中實現的,因此它必須符合核心程式設計的規則,比如函式名以sys_開始,函式定義時候需加asmlinkage識別符號等。

相關推薦

系統呼叫API之間關係

1.為什麼使用者程式不能直接訪問系統核心模式提供的服務?     在linux中,將程式的執行空間分為核心空間與使用者空間(核心態和使用者態),在邏輯上它們之間是相互隔離的,因此使用者程式不能訪問核心資料,也無法使用核心函式。當用戶程序必須訪問核心或使用某個核心函式時,就得使用系統呼叫(System Call

linux下系統呼叫API系統命令,核心函式的區別與聯絡

1.系統呼叫: 應用程式和核心間的橋樑,是應用程式訪問核心的入口點;但通常情況下,應用程式通過作業系統提供的API進行程式設計而不是使用系統呼叫直接程式設計; linux的全部系統呼叫加起來大約只有250個左右。 2.API:   API常以c庫(libc)的形式提供,

系統呼叫的三層機制

2018-2019-120189224 《庖丁解牛Iinux核心分析》第四周學習總結 系統呼叫 含引數的系統呼叫實驗 1.使用庫函式API觸發rename系統呼叫 #include<stdio.c> int main() { int ret; char *oldname="hello.

Java呼叫C++ API完整示例dll

最近有一個和香港的對接專案。在通訊問題上出現了卡殼。港方提供的是一個java庫,需要和我們這邊進行交易策略對接。交易策略是以協議的方式,通過網路通訊傳送到我們的系統。由於我們缺少穩定可靠的java通訊元件,但我們具有一個非常可靠的C++通訊元件。因此就萌發了將現有的C++通訊元件封裝為可供

有關windows系統IP相關API函式學習1——GetAdaptersInfo()

windows系統中有關IP的函式(1):GetAdaptersInfo(): 獲得電腦中的所有是介面卡相關的資訊,比如介面卡的描述(例如:Intel(R) Centrino(R) Advanced-N 6205)、介面卡的名稱AdapterName(例如:{50447B9

Linux核心分析——扒開系統呼叫的三層皮

張瑜 《Linux核心分析》MOOC課程 http://mooc.study.163.com/course/USTC-1000029000 一、實驗內容 1. 通過核心的方式使用系統呼叫 上週是從使用者態來看系統呼叫,這周是從核心方面來看這個問題

UML中類之間的幾種關係小結包括類之間關係符號符號

由於最近這段時間一直在看設計模式,因此接觸了很多類關係圖,發現自己以前對於UML中類之間的關係的基礎知識掌握的不是很牢固,因此,寫一篇博文用來重溫與鞏固一下相關的知識。在面向物件程式設計時,類與類之間的關係主要分為繼承,實現,依賴,關聯,聚合,組合六種關係。其中前兩種理解很簡

OSI七層協議模型TCP/IP四層模型和五層協議體系結構之間關係

一、OSI七層模型 OSI七層協議模型主要是:應用層(Application)、表示層(Presentation)、會話層(Session)、傳輸層(Transport)、網路層(Network)、資料鏈路層(Data Link)、物理層(Physical)。 二、T

Linux 虛擬檔案系統四大物件:超級塊inodedentryfile之間關係

更多嵌入式原創文章,請關注公眾號:一口Linux # 一:檔案系統 ## 1. 什麼是檔案系統? 作業系統中負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。 通常檔案系統是用於儲存和組織檔案的一種機制,便於對檔案進行方便的查詢與訪問。 檔案系統是對檔案儲存裝置的空間進行組織和分配,負責

Zabbix監控tomcat監控代理API操作server被動監控 2

zabbix監控tomcat、監控代理、api操作、server被動監控接上篇配置十一.Zabbix監控tomcat1.在server3上安裝java和tomcat2.配置tomcat采集腳本vim catalina.sh啟動tomcat3.添加zabbix監控jave程序zabbix本身不能監控到jave,

在asp.net中呼叫Office來製作各種3D統計

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

.NET Framework.NET CoreMonoXamarin之間關係

本是同根生 截止2017年7月,這些專案均為微軟.NET Foundataion旗下開源專案,微軟朝著商業和開源兩種途徑,將.NET平臺開源、跨平臺化,以適應雲端計算、移動網際網路時代的要求。2000年左右,隨著Java在PC網際網路時代的流行,微軟釋出了全新的.NET平臺,但是一直遲遲沒有開放

FastDFS的配置部署與API使用解讀1Get Started with FastDFS

版權宣告:本文為博主原創文章,未經博主允許不得轉載。合作請聯絡微信 sinosuperman。 https://blog.csdn.net/Poechant/article/details/6977407 轉載請註明來自:詩商·柳驚鴻CSDN部落格,原文連結:FastDFS的配置、部署

FastDFS的配置部署與API使用解讀8FastDFS多種檔案上傳介面詳解

《Poechant的FastDFS的配置、部署與API使用教程》 FastDFS的配置、部署與API使用解讀——(1)入門使用教程 FastDFS的配置、部署與API使用解讀——(2)Java API:根據InputStream、檔名、檔案長度上傳檔案 FastDFS的配置、部署與API

一個基於Spring Boot的APIRESTful API專案種子骨架

前言 最近使用Spring Boot 配合 MyBatis 、通用Mapper外掛、PageHelper分頁外掛 連做了幾個中小型API專案,做下來覺得這套框架、工具搭配起來開發這種專案確實非常舒服,團隊的反響也不錯。在專案搭建和開發的過程中也總結了一些小經驗,與大家分享一下。

LoRa關鍵引數 1擴頻因子SF 2編位元速率CR 3訊號頻寬BW 4LoRa訊號頻寬BW符號速率Rs和資料速率DR的關係

 LoRa學習:LoRa關鍵引數(擴頻因子,編位元速率,頻寬)的設定及解釋 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係 5、 LoRa訊號頻寬、擴頻

HBuilder基礎上APP呼叫支付寶微信支付PHP

支付寶後端程式碼: /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * 訂單頁面支付(支付寶支付) *

資料庫的例項表空間使用者之間關係

完整的Oracle資料庫通常由兩部分組成:Oracle資料庫和資料庫例項。  1) 資料庫是一系列物理檔案的集合(資料檔案,控制檔案,聯機日誌,引數檔案等);  2) Oracle資料庫例項則是一組Oracle後臺程序/執行緒以及在伺服器分配的共享記憶體區。 在啟動Oracl

Zookeeper C API之監視Watch常量和結構體

1、監視(Watch)簡介 Zookeeper C API的宣告和描述定義在檔案include/zookeeper.h中,大部分的常量、結構體宣告也定義在這個檔案中。 Zookeeper所有的讀操作(包括:getData()、getChildren()和exists())度可以設定Watch

ArcGIS API For JavaScript呼叫GP服務--簡單網路路徑分析

ArcGIS API For JavaScript(五)呼叫GP服務--簡單網路路徑分析 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <