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