Linux系統編程——Linux系統調用

來源:互聯網
上載者:User

標籤:啥叫系統調用

系統調用概述

系統調用,顧名思義,說的是作業系統提供給使用者程式調用的一組“特殊”介面。使用者程式可以通過這組“特殊”介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的調用請求系統開啟檔案、關閉檔案或讀寫檔案,可以通過時鐘相關的系統調用獲得系統時間或設定定時器等。


從邏輯上來說,系統調用可被看成是一個核心與使用者空間程式互動的介面——它好比一個中間人,把使用者進程的請求傳達給核心,待核心把請求處理完畢後再將處理結果送回給使用者空間。


系統服務之所以需要通過系統調用來提供給使用者空間的根本原因是為了對系統進行“保護”,因為我們知道 Linux 的Runspace分為核心空間與使用者空間,它們各自運行在不同的層級中,邏輯上相互隔離。所以使用者進程在通常情況下不允許訪問核心資料,也無法使用核心功能,它們只能在使用者空間操作使用者資料,調用使用者空間函數。比如我們熟悉的“hello world”程式(執行時)就是標準的使用者空間進程,它使用的列印函數 printf 就屬於使用者空間函數,列印的字元“hello word”字串也屬於使用者空間資料。

但是很多情況下,使用者進程需要獲得系統服務(調用系統程式),這時就必須利用系統提供給使用者的“特殊介面”——系統調用了,它的特殊性主要在於規定了使用者進程進入核心的具體位置;換句話說,使用者訪問核心的路徑是事先規定好的,只能從規定位置進入核心,而不準許肆意跳入核心。有了這樣的陷入核心的統一訪問路徑限制才能保證核心安全無誤。我們可以形象地描述這種機制:作為一個遊客,你可以買票要求進入野生動物園,但你必須老老實實地坐在觀光車上,按照規定的路線觀光遊覽。當然,不準下車,因為那樣太危險,不是讓你丟掉小命,就是讓你嚇壞了野生動物

系統調用的實現

系統調用是屬於作業系統核心的一部分的,必須以某種方式提供給進程讓它們去調用。CPU 可以在不同的特權層級下運行,而相應的作業系統也有不同的運行層級,使用者態和核心態。運行在核心態的進程可以毫無限制的訪問各種資源,而在使用者態下的使用者進程的各種操作都有著限制,比如不能隨意的訪問記憶體、不能開閉中斷以及切換啟動並執行特權層級。顯然,屬於核心的系統調用一定是運行在核心態下,但是如何切換到核心態呢


答案是軟體中斷。軟體中斷和我們常說的中斷(硬體中斷)不同之處在於,它是通過軟體指令觸發而並非外設引發的中斷,也就是說,又是編程人員開發出的一種異常(該異常為正常的異常)。作業系統一般是通過軟體中斷從使用者態切換到核心態。
        

中斷有兩個重要的屬性,中斷號和中斷處理常式。中斷號用來標識不同的中斷,不同的中斷具有不同的中斷處理常式。在作業系統核心中維護著一個中斷向量表(Interrupt Vector Table),這個數組儲存了所有中斷處理常式的地址,而中斷號就是相應中斷在中斷向量表中的位移量。更多詳細說明請看《系統調用的實現原理》。


系統調用和庫函數的區別

Linux 下對檔案操作有兩種方式:系統調用(system call)和庫函數調用(Library functions)。


庫函數由兩類函數組成:

1)不需要調用系統調用

不需要切換到核心空間即可完成函數全部功能,並且將結果反饋給應用程式,如strcpy、bzero 等字串操作函數。

2)需要調用系統調用

需要切換到核心空間,這類函數通過封裝系統調用去實現相應功能,如 printf、fread等。



系統調用是需要時間的,程式中頻繁的使用系統調用會降低程式的運行效率。當運行核心代碼時,CPU工作在核心態,在系統調用發生前需要儲存使用者態的棧和記憶體環境,然後轉入核心態工作。系統調用結束後,又要切換回使用者態。這種環境的切換會消耗掉許多時間。


庫函數訪問檔案的時候根據需要,設定不同類型的緩衝區,從而減少了直接調用 IO 系統調用的次數,提高了訪問效率。緩衝區詳情請看《淺談標準I/O緩衝區》。



這個過程類似於快遞員給某個地區(核心空間)送快遞一樣,快遞員有兩種方式送:

1)來一件快遞就馬上送到目的地,來一件送一件,這樣導致來回走比較頻繁(系統調用

2)等快遞攢著差不多後(緩衝區),才一次性送到目的地(庫函數調用


轉自:http://blog.csdn.net/tennysonsky/article/details/45101303

Linux系統編程——Linux系統調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.