系統呼叫的概念和型別
系統呼叫提供了使用者程式和作業系統核心間的介面。
1.系統態和使用者態
在實際執行過程中,處理機會在系統態和使用者態間切換。相應地,現代多數OS將CPU的指令集分為特權指令和非特權指令兩類。
(1)特權指令。特權指令是指在系統態執行的指令,它對內部空間的訪問範圍基本不受限制,不僅能訪問使用者空間,也能訪問系統空間。
(2)非特權指令。非特權指令是執行在使用者態的指令。應用程式所使用的都是非特權指令,它只能完成一般性的操作和任務,不能對系統中的硬體和軟體直接進行訪問,對記憶體的訪問範圍也侷限於使用者空間。
2.系統呼叫
系統呼叫本質上是應用程式請求OS核心完成某功能時的一種過程呼叫,它與一般的過程呼叫的幾個差別:
1.執行在不同的系統狀態。一般的過程呼叫其呼叫程式和被呼叫程式執行在相同的狀態——系統態或使用者態,而系統呼叫最大的差別是:呼叫程式是執行在使用者態,而被呼叫程式是執行在系統態。
2.狀態的轉換。由於系統呼叫的呼叫和被呼叫過程是工作在不同的系統狀態,因而不允許由呼叫過程直接轉向被呼叫過程,需要通過軟中斷機制,先由使用者態轉換為系統態,經核心分析後,才能轉向相應的系統呼叫處理程式。
3.返回問題。在採用了搶佔式(剝奪)排程方式的系統中,在被呼叫過程執行完成後,要對系統中所有要求執行的程序做優先權分析。當呼叫程序仍具有最高優先順序時,才返回到呼叫進行繼續執行;否則,將引起重新呼叫,以便優先權最高的程序優先執行。
4.巢狀呼叫。像一般過程一樣,系統呼叫也可以巢狀進行,即在一個被呼叫過程的執行期間,還可以利用系統呼叫命令去呼叫另一個系統呼叫。
3.中斷機制
系統呼叫是通過中斷機制實現的,並且一個作業系統的所有系統呼叫,都通過同一個中斷入口來實現。
4.系統呼叫的型別
對於一般通用的OS而言,系統呼叫分為三大類:
1.程序控制類系統呼叫
主要用於對程序控制的系統呼叫有:
(1)建立和終止程序的系統呼叫。
(2)獲得和設定程序屬性的系統呼叫。程序的屬性包括有程序識別符號,程序優先順序,最大允許執行時間等。
(3)等待某事件出現的系統呼叫。
2.檔案操縱類系統呼叫
(1)建立和刪除檔案
(2)開啟和關閉檔案的系統呼叫
(3)讀和寫檔案的系統呼叫
3.程序通訊類系統呼叫
在單機處理系統中,OS經常採用訊息傳遞方式和共享儲存區方式。
當採用訊息傳遞方式時,通訊前需先開啟一個連線。為此,應由源程序發出一條開啟連線的系統呼叫,而目標程序則應利用接受連線的系統呼叫表示同意進行通訊;然後,在源和目標程序之間便開始通訊。可以利用傳送訊息的系統呼叫或者用接收訊息的系統呼叫來交換資訊。通訊結束後,還須再利用關閉連線的系統呼叫結束通訊。
使用者在利用共享儲存區進行通訊之前,須先利用建立共享儲存區的系統呼叫來建立一個共享儲存區,再利用建立連線的系統呼叫將該共享儲存區連線到程序自身的虛地址空間上,然後便可以利用讀和寫共享儲存區的系統呼叫實現相互通訊。