操作系統學習筆記_02_系統調用(System Call)簡述與分類



系統調用是獲取操作系統服務的一系列接口,它們通常用C/C++編寫,對於一些底層操作也採用彙編語言編寫。這些接口提供最基本的操作,是面向程序提供的——程序員通過引用一系列的系統調用編寫程序,操作系統在執行程序時按有關描述依次執行系統調用,提供相應的服務。然而,因爲系統調用的操作過於基本,所以即使任務非常簡單,程序也要多次執行系統操作,使用大量的系統調用;另外,系統調用的指令名稱和功能因系統而異,所以直接使用系統調用編寫的程序可移植性差,無法跨平臺實現;同時,真實系統調用對參數傳遞要求很繁瑣。實際中,程序員通常使用對編程更友好的應用程序接口(以下簡稱API)設計程序。API爲應用程序員調用實際的系統調用,所以程序員只需要熟悉並組合運用API中的指令進行編程,以避免上文提到的三種問題。在比較常用的幾種操作系統中,API都被內置在一個庫中,通過系統調用接口進行調用。在用戶程序調用系統調用時,操作系統進入內核態並執行API中相應的函數。執行完畢後,系統轉換回用戶模式,通過系統調用接口把結果返回給用戶。在執行系統調用時,需要爲之傳遞相應的參數,傳遞的方式包括存入寄存器、存入內存和壓入棧中等。

系統調用主要類型包括進程控制、文件管理、設備管理、信息維護、通信和安全保護等六種類型。

 

  1. 進程控制

    進程是計算機任務的基本單元,操作系統通過系統調用對單一或多個進程進行全方面控制。首先,進程的創建和終止由系統調用實現,進程佔用的內存空間由系統調用來分配或釋放。在任務中,操作系統也需要通過系統調用裝入進程並執行。其中,執行一個程序的進程可能需要裝入並執行另一個程序。新進程可能在執行完後將控制權交還給原進程,也可能和原進程併發執行。在前者的情況下,原進程需要暫時掛起,等待新進程的執行。另外,在多進程併發執行時,操作系統通過系統調用獲得並設置進程屬性,以合理調配可用資源,規劃進程的優先級。進程執行中可能出現錯誤,所以系統調用也被要求能正常或非正常地中斷程序。在程序被中斷後,控制權就被交給了命令解釋器。同時,內存向磁盤寫入一條錯誤信息,由調試器解釋問題成因。之後,命令解釋器會採取措施以消除這個錯誤,以繼續執行命令,措施通常包括請求用戶建議或直接跳轉到下一個任務等。

     

  2. 文件和設備管理

    對於文件的大部分基本操作由系統調用執行,主要包括創建、刪除、打開、關閉、讀寫、重定位(解析相對地址)以及取得和設置屬性等。如果文件系統是由目錄結構所組織的,那麼目錄也需要同樣的一套操作。如Windows系統中的文件夾也可以創建、打開和重命名等等。

    設備表示操作系統控制的不同資源,包括實際存在的物理設備和抽象出來的虛擬設備。在多用戶系統中,因爲設備只能被單一用戶使用,所以需要對設備設計請求和釋放操作。用戶通過請求來獲得設備的使用權嗎,在設備被分配給特定用戶之後其他用戶不能使用,被釋放後方可重新被申請。在用戶得到設備之後,可以對設備進行讀寫和重定位操作。

    可以見得,因爲設備和文件都可以視爲爲進程所用的資源(前者實體,後者虛擬),所以他們往往在操作系統表現出相同的特點,對他們的操作有共通之處。很多操作系統把設備和文件視爲相同的對象,用同一套系統調用進行操作。對於一些針對文件或設備的細節操作,操作系統還會給出特定的操作。

     

  3. 信息維護

    雖操作系統中有很多有關信息傳遞的操作,而這些操作也往往由系統調用實現。在操作系統中,當前時間、日期、用戶數、操作系統版本號、空閒內存和磁盤空間等信息都是通過系統調用來訪問和修改的。針對所有進程的信息,也有系統調用對其進行訪問和控制。在調試程序時,和信息維護相關的系統調用發揮了巨大的功能,包括單步執行、內存轉儲和計時等。

     

  4. 通信

    進程在執行中需要相互傳遞信息,以完成協同合作。以下介紹兩種常見的通信模型:消息傳遞模型和共享內存模型。

    消息傳遞模型通過系統調用,在進程之間建立一個連接,以實現信息交換。爲了相互匹配,必須知道進程名和進程所在主機的主機名和IP地址。建立連接之後,通信源(客戶機)和接收方(服務器)通過系統調用來傳遞信息。消息傳遞模型既可用於同一系統下進程的通信,也可用於通過網絡向量的不同主機上的進程。

    共享內存模型通過設立進程的公共區域來傳遞信息。進程所佔據的內存原本不允許互訪。通過系統調用,特定進程所佔用的部分內存訪問權限降低,變爲半公開區域。指定的其他的進程可以訪問此區域,這樣不同的進程就可以在此區域讀寫數據,交換信息。這種機制存在一種變體,稱爲線程,在其中共享內存是默認的。

     

  5. 保護與安全

    針對進程和用戶,保護對計算機各種資源的權限進行了設定,以控制對其的訪問與修改。用戶、進程的訪問需求由系統調用提交,訪問許可由系統調用下達。針對系統攻擊或錯誤操作,安全提供了訪問和修改系統屬性的操作,以保證指令過程收到監督。

     

     

參考文獻:

[1] AbrahamSilberschatz. 操作系統概念:Java實現:7:翻譯版. 高等教育出版社, 2010.1;

[2] AbrahamSilberschatz. Operating System Concepts Essentials: 2nd ed. WileyOnline Library;

[3] 韓其睿. 操作系統原理. 清華大學出版社, 2013.8.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章