bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

系統調用有什么目的-創新互聯

創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

創新互聯成都網站建設按需策劃設計,是成都網站制作公司,為成都鑿毛機提供網站建設服務,有成熟的網站定制合作流程,提供網站定制設計服務:原型圖制作、網站創意設計、前端HTML5制作、后臺程序開發等。成都網站設計熱線:13518219792

今天就跟大家聊聊有關系統調用有什么目的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

系統調用的目的是:請求系統服務。操作系統不允許用戶直接操作各種硬件資源,因此用戶程序只能通過系統調用的方式來請求內核為其服務,間接地使用各種資源。

由操作系統提供的功能,通常應用程序本身是無法實現的。例如對文件進行操作,應用程序必需通過系統調用才能做到,因為只有操作系統才具有直接管理外圍設備的權限。又如進程或線程間的同步互斥操作,也必需經由操作系統對內核變量進行維護才能完成。

從下到上看一個完整的計算機系統:物理硬件->OS內核->OS服務->應用程序。這里的OS內核起到了“承上啟下”的關鍵作用,向下管理物理硬件,向上為操作系統服務和應用程序提供接口,這里的接口就是系統調用了。

應用程序的進程通常在user模式下運行,當它調用一個系統調用時,進程進入kernel模式,執行的是kernel內部的代碼,從而具有執行特權指令的權限,完成特定的功能。換句話說,系統調用是應用程序主動進入操作系統內核的入口。

一、系統調用和庫函數的區別庫函數

顧名思義是把函數放到庫里,是把一些常用到的函數編完放到一個文件里,供別人用。別人用的時候把所在的文件名用#include<>加到里面就可以了,一般放到lib文件里。

庫函數主要由兩方面提供:一是操作系統提供的;另一類是由第三方提供的。

  • 系統提供的這些函數把系統調用進行封裝或者組合,可以實現更多的功能,這樣的庫函數能夠實現一些對于內核來說比較復雜的操作。比如read函數根據參數,直接就能讀文件,而背后隱藏的文件比如在那個磁道,那個扇區,加載到那個內存,是程序員不必關心的問題。這些操作里面也包含了系統調用。比如write()這個系統函數,會調用同名的系統調用,來完成寫入操作。

  • 對于第三方庫,其實和系統庫一樣,只是他直接利用系統調用的可能性要小一些,而是系統提供的API接口來是實現。比如printf,實際上調用了write()這個系統函數。 第三方庫函數大部分是對系統函數的封裝。

系統調用和庫函數的聯系:

事實上,系統調用所提供給用戶的是直接而純碎的高級服務,如果想要更加人性化,具有更符合特定情況的功能,那么就要我們用戶自己定義,因此衍生了庫函數,它把部分系統調用包裝起來。比如當我們要用C語言打印一句話的時候,如果沒有用到庫函數printf,那么我們就需要自己實現就需要調用putc()和write()等這樣一些系統函數。顯得比較麻煩,所以系統調用是為了方便使用操作系統的接口,而庫函數則是為了人們編程的方便。

例如,在Linux操作系統下,C語言的庫函數printf,實際上使用了write系統調用;而庫函數strcpy(字符串拷貝)卻沒有使用任何系統調用。另外,一個系統的系統調用接口通常是能夠完成所有必需功能的最小集合,可能存在多個庫函數對同一個系統調用進行封裝。例如,在Linux中,malloc、calloc和free三個庫函數底層都是調用brk系統調用完成的。

應用程序、庫函數和系統調用的關系如下圖所示:

系統調用有什么目的

系統調用和庫函數的區別:

庫函數的調用是語言或者應用程序的一部分,而系統調用則是操作系統的一部分。

系統調用是應用程序與內核交互的接口。人們在長期的編程中發現使用系統函數有個重大的缺點,那就是程序的移植性。例如linux提供的系統調用的函數和windows就不一樣。

庫函數調用則是面向應用開發的,相當于應用程序的api,采用這樣的方式有很多原因:

  • 雙緩沖技術;(庫函數和系統調用兩層緩沖,減少系統調用次數)
  • 移植性(封裝了不同操作系統的系統函數,對外接口一致)
  • 底層調用本身存在的一些缺陷;
  • 讓api也可以有了級別和專門的工作面向;

二、CPU的內核模式和用戶模式

通常,處理器設有兩種模式:“用戶模式”與“內核模式”,通過一個標簽位來鑒別當前正處于什么模式。內核模式可以運行所有指令,包括特權指令(主要是一些硬件管理的指令,例如修改基址寄存器內容的指令) ,而用戶模式不能執行特權指令。這樣的設計主要為了安全問題,即由操作系統負責管理硬件,避免上層應用因錯誤設計而導致硬件問題。

既然只有操作系統能直接操作硬件,操作系統有必要提供接口來為應用程序提供使用硬件功能的入口,這些接口就被稱為系統調用。

當操作系統接收到系統調用請求后,會讓處理器進入內核模式,從而執行諸如I/O操作,修改基址寄存器內容等指令,而當處理完系統調用內容后,操作系統會讓處理器返回用戶模式,來執行用戶代碼。

對應CPU的內核模式和用戶模式,進程運行的狀態分為管態(核心態)和目態(用戶態)。具體請看文章:操作系統--用戶態和核心態

四、系統調用和中斷的聯系

中斷(Interrupt)通常是指在CPU內部或外部發生了某個待處理的事件,從而CPU必需改變當前指令的執行順序去處理這類事件。在介紹中斷和系統調用的關系之前,下面先把中斷做一個分類。

中斷可以大體分為兩大類:

  • Asynchronous interrupts(外中斷): 由CPU外部的其它硬件產生,說這類中斷是異步的,意思是中斷信號可以在任意時間發射,與CPU本身的時鐘節拍沒有關系。如時鐘中斷,硬盤讀寫服務請求中斷等。

  • Synchronous interrupts(內中斷/異常):在CPU內部產生,說這類中斷是同步的,意思是中斷信號的發射時間一定在當前指令執行結束之后。一般來自CPU的內部事件或程序執行中的事件,如非法操作碼、地址越界、浮點溢出等。

Synchronous interrupts (異常)又分為以下若干類:

  • Processor-detected exceptions:處理器在執行指令時檢測到的中斷,如除零操作。

  • Faults:發生了某個異常條件,但異常條件被消除后,原來的程序流程可以繼續執行而不受任何影響,如缺頁異常。注意觸發中斷的指令會被重新執行。

  • Traps:由陷入指令引起的中斷,通常用于程序調試。

  • Aborts:CPU內部有重要錯誤發生,例如硬件錯誤或系統表值出現錯誤。一旦這種中斷發生,錯誤將不可恢復,只能將當前進程終止。

  • Programmed exceptions:也稱為 software interrupts (軟中斷) ,由程序員的代碼主動發起的中斷,用來實現系統調用。如在Linux中,就是用int 0x80指令實現系統調用。

至此,我們發現了中斷與系統調用的關系:系統調用是一種特殊的中斷類型(軟中斷)

五、內核對于系統調用的處理

在x86的機器中,用一個8bit的數字(0~255)來區分各種中斷,這個數字被稱為中斷向量(vector)。其中一個中斷向量,即128 (0x80),專門被用于執行系統調用。

在Linux系統中,存有一個系統表,叫做Interrupt DescriptorTable,簡稱IDT。IDT表共有256項,存放了從中斷向量到相應處理例程(interrupt or exceptionhandler)的映射關系。當某個中斷發生時,CPU從IDT表中查找到相應的處理例程的地址來執行。

系統調用的處理例程在IDT表中占有一項。這一項是在trap_init函數中被初始化的,如下:set_system_gate(SYSCALL_VECTOR,&system_call);。如前所述,上面代碼中的SYSCALL_VECTOR的值是128。

當系統調用發生時,通過中斷機制,系統調用例程system_call被調用。它的執行過程大概分為4個步驟:

1、從寄存器中取出系統調用號和輸入參數,然后將這些寄存器的值壓入kernel棧中。根據系統調用號查找系統調用分派表(system call dispatch table),找到系統調用服務例程(一個內核函數)。

2、調用查到的系統調用服務例程。

3、將系統調用服務例程的返回值出棧,重新保存在寄存器中。

上面描述的系統調用例程system_call在kernel空間中執行。在執行前,系統調用號和輸入參數已經存入了寄存器,這個存入過程由user空間的代碼完成。實際上,如同第一節所講,每個真正的系統調用基本上都有一個封裝它的庫函數,一般是在這個庫函數中完成系統調用號和輸入參數的保存動作。當系統調用例程system_call執行完畢后,返回值通過寄存器再傳回user空間的庫函數。

看完上述內容,你們對系統調用有什么目的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯-成都網站建設公司行業資訊頻道,感謝大家的支持。

新聞標題:系統調用有什么目的-創新互聯
轉載來源:http://vcdvsql.cn/article28/eihjp.html

成都網站建設公司_創新互聯,為您提供網站設計公司靜態網站標簽優化網站內鏈微信小程序商城網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發