系統調用(system call),通經常使用c或c++編寫,對底層任務(如需直接訪問硬件)可能以匯編語言指令的情勢提供。
1個系統調用的例子:
編寫1個從1個文件讀取數據并復制到另外一個文件的簡單程序,則需要以下系統調用序列:
獲得輸入文件名:
獲得輸出文件名:
打開輸入文件:
loop:
直到讀取失敗
關閉輸出文件
將完成信息輸出到屏幕
正常結束
但是, 1般程序開發人員根據利用程序接口(API)設計程序,有3種經常使用的API:
1.適用于windows系統的win32 API
2.適用于POSIX系統的POSIX API(包括UNIX、Linux 和Mac OS X 版本)
3.設計運行于java虛擬機程序的java API
在后臺,組成API的函數通常為利用程序員調用實際的系統調用。
向操作系統傳遞參數有3種方法
最簡單的是通過寄存器來傳遞參數
不過有時參數數量會比寄存器多。這時候,這些參數通常存在內存的塊和表中,并將塊的地址通過寄存器來傳遞。linux采取這樣的方法。
參數還可壓入堆棧中,并通過操作系統彈出。
系統調用大致可分5類:進程控制、文件管理、、裝備管理、信息保護、通訊。
運行程序需要能正常或非正常地中斷其履行(end或abort)
如果1個系統調用被用來非正常的中斷履行程序,或程序運行碰到問題引發毛病圈套,那末可能會有內存信息轉儲并產生1個毛病信息。內存信息轉儲通常寫到磁盤上,并被調試器(幫助程序員發現和檢查毛病的系統程序)檢查和肯定問題緣由。操作系統必須將控制權轉交給命令解釋器。命令解釋器緊接著讀取下1個命令。
對交互系統:
命令解釋器簡單的讀取下1個命令,由于假定用戶會采取適合的命令處理毛病
對GUI系統:
1個彈出窗口提示毛病并提個建議
對批處理系統:
命令解釋器終止全部作業并繼續下1個作業。出現毛病時,有的系統允許控制卡指出1個具體的恢復動作。控制卡是1個批處理概念,他是1個管理進程履行的命令。可定義1個毛病級別。更加嚴重的毛病可用更高級的毛病參數來表示。命令解釋器和下1個程序能利用毛病級別自動決定下1個動作。
履行1個程序或作業可能需要裝入另外一個程序。這1點允許命令解釋器來履行1個程序,該命令可通過用戶命令,鼠標單機和批處理命令來表示。當裝入程序終止時:
如果新程序終止時控制權返回到現有程序,那末必須保存現有程序的內存映像。因此,實際上建立1個機制以便1個程序調用另外一個程序。如果兩個程序并發繼續,那末創建了1個新作業和進程以便多道履行。有的系統調用專門用于這1目的(create process 或 submit job)
如果創建新作業和進程,那末應當能夠控制他的履行。這類控制要求能決定和重置進程或作業的屬性,包括優先級、最大允許履行時間等。必要時也要能終止它。
另外一組系統調用有助于調試程序,許多系統提供轉儲內存信息的系統調用,這有助于調試程序,程序trace在履行時能列出所用的每條履行的指令,但是只有少數幾類系統提供。
許多操作系統提供時間表來表示1個程序在某個位置履行的時間。時間表要求具有跟蹤功能或定時 時間中斷。每次定時中斷,會記錄計數器的值。
經常使用的文件管理系統調用:
首先能創建和刪除文件。每一個系統調用需要文件名,可能還會需要1些文件屬性。創建文件滯后,就需要打開并使用,也可能需要讀,寫,重定位,最后需要關閉文件。
使用目錄來組織文件系統中的文件,目錄也需要相同的操作。
另外,還最少需要讀取文件屬性和設置文件屬性,有的操作系統提供更多調用,如文件移動和復制。
其余的,1部份可能提供采取代碼或系統調用完成這些操作的API,另外一部份可能僅提供完成這些任務的系統程序。
如果系統程序被其他程序所調用,則其中每個軍可以被其他系統調用視為1個API
程序在履行時需要用到1些資源才能繼續運行,否則,程序必須等待可用的足夠多的資源。
操作系統控制的不同資源可當作裝備看待,這些裝備有些是物理裝備(磁帶),而其他可當作抽象或虛擬的裝備(如文件)。如果系統有多個用戶,那末用戶必須要求裝備以確保能獨自使用它。在使用完裝備以后,用戶需要釋放它。
1旦要求了裝備(并且得到裝備以后),就可以猶如對待文件1樣對裝備進行讀,寫,重定位。I/O與文件非常類似,以致于許多操作系統(如UNIX)將這二者合并為文件-裝備結構。
許多系統調用用來在用戶程序和操作系統間傳遞信息,調用返回的信息多是系統版本、空閑內存、進程信息等
另外,操作系統保護所有進程的信息,有些操作系統調用可訪問這些信息。
有兩種模型:
消息傳遞模型和同享內存模型。
對消息傳遞模型,通訊進程彼此交換消息來交換信息。
對同享內存模型,進程使用 shared memory create 和 shared memory attach系統調用來取得其他進程所具有的內存區域的訪問權。
計算機的邏輯層次中,最底層是硬件,上面是操作系統,接著是系統程序,最后是利用程序。
系統程序提供了1個方便的環境,以開發程序和履行程序。其中1小部份唆使系統調用的簡單接口沒其他多是相當復雜的。
它們可分為:
文件管理、狀態信息、文件修改、程序語言支持、程序裝入和履行、通訊。