不同型別的系統呼叫
程序與作業系統之間的介面由系統呼叫提供。一般來說,系統呼叫以組合語言指令的形式提供。它們也包含在彙編級程式設計師使用的手冊中。
當用戶模式下的程序需要訪問資源時,通常會進行系統呼叫。然後它請求核心透過系統呼叫提供資源。
系統呼叫的型別
主要有五種型別的系統呼叫。這些將在下面詳細解釋:
以下是系統呼叫的型別:
程序控制
這些系統呼叫處理程序,例如程序建立、程序終止等。
檔案管理
這些系統呼叫負責檔案操作,例如建立檔案、讀取檔案、寫入檔案等。
裝置管理
這些系統呼叫負責裝置操作,例如從裝置緩衝區讀取、寫入裝置緩衝區等。
資訊維護
這些系統呼叫處理資訊及其在作業系統和使用者程式之間的傳輸。
通訊
這些系統呼叫對於程序間通訊非常有用。它們還處理建立和刪除通訊連線。
以下是Windows和Unix中上述所有型別系統呼叫的示例:
系統呼叫的型別 | Windows | Linux |
---|---|---|
程序控制 | CreateProcess() ExitProcess() WaitForSingleObject() | fork() exit() wait() |
檔案管理 | CreateFile() ReadFile() WriteFile() CloseHandle() | open() read() write() close() |
裝置管理 | SetConsoleMode() ReadConsole() WriteConsole() | ioctl() read() write() |
資訊維護 | GetCurrentProcessID() SetTimer() Sleep() | getpid() alarm() sleep() |
通訊 | CreatePipe() CreateFileMapping() MapViewOfFile() | pipe() shmget() mmap() |
如上所示,存在許多不同的系統呼叫。其中一些系統呼叫的詳細資訊如下:
wait()
在某些系統中,程序可能需要等待另一個程序完成其執行。當父程序建立子程序並且父程序的執行掛起直到子程序執行時,就會發生這種情況。父程序的掛起發生在 wait() 系統呼叫中。當子程序完成執行時,控制權將返回給父程序。
exec()
此係統呼叫在正在執行的程序的上下文中執行可執行檔案。它替換了之前的可執行檔案。這被稱為覆蓋。原始程序識別符號保持不變,因為沒有建立新程序,但程序的資料、堆、堆疊等被新程序替換。
fork()
程序使用 fork() 系統呼叫來建立自身的副本程序。這是作業系統中程序建立的主要方法之一。當父程序建立子程序並且父程序的執行掛起直到子程序執行時。當子程序完成執行時,控制權將返回給父程序。
exit()
程式使用 exit() 系統呼叫來終止其執行。在多執行緒環境中,這意味著執行緒執行已完成。exit() 系統呼叫之後,作業系統會回收程序使用的資源。
kill()
作業系統使用 kill() 系統呼叫向程序傳送終止訊號,促使程序退出。但是,kill 系統呼叫並不一定意味著殺死程序,它可以具有多種含義。