系統呼叫的目的是什麼?


程序與作業系統的介面由系統呼叫提供。通常,系統呼叫以組合語言指令的形式提供。它們也包含在彙編級程式設計師使用的手冊中。當用戶模式下的程序需要訪問資源時,通常會進行系統呼叫。然後,它請求核心透過系統呼叫提供資源。

通常,在以下情況下需要系統呼叫:

  • 如果檔案系統需要建立或刪除檔案。從檔案讀取和寫入也需要系統呼叫。
  • 建立和管理新程序。
  • 網路連線也需要系統呼叫。這包括髮送和接收資料包。
  • 訪問硬體裝置(例如印表機、掃描器等)需要系統呼叫。

系統呼叫的型別

系統呼叫主要有五種型別。詳細解釋如下:

程序控制

這些系統呼叫處理諸如程序建立、程序終止等程序。

檔案管理

這些系統呼叫負責檔案操作,例如建立檔案、讀取檔案、寫入檔案等。

裝置管理

這些系統呼叫負責裝置操作,例如從裝置緩衝區讀取、寫入裝置緩衝區等。

資訊維護

這些系統呼叫處理資訊及其在作業系統和使用者程式之間的傳輸。

通訊

這些系統呼叫對於程序間通訊很有用。它們還處理建立和刪除通訊連線。

以下是 Windows 和 Unix 中所有上述型別系統呼叫的示例:

系統呼叫的型別WindowsLinux
程序控制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()

系統呼叫的目的

如上所示,有許多不同的系統呼叫。其中一些系統呼叫的目的是:

open()

open() 系統呼叫用於提供對檔案系統中檔案的訪問許可權。此係統呼叫為檔案分配資源,並提供一個控制代碼,程序使用該控制代碼來引用該檔案。多個程序可以同時開啟一個檔案,也可以限制為一個程序。這完全取決於檔案組織和檔案系統。

read()

read() 系統呼叫用於訪問儲存在檔案系統中的檔案中的資料。要讀取的檔案可以透過其檔案描述符來識別,並且在讀取之前應使用 open() 開啟它。通常,read() 系統呼叫接受三個引數,即檔案描述符、儲存讀取資料的緩衝區以及要從檔案中讀取的位元組數。

write()

write() 系統呼叫將資料從使用者緩衝區寫入裝置(例如檔案)。此係統呼叫是程式輸出資料的方法之一。通常,write() 系統呼叫接受三個引數,即檔案描述符、儲存資料的緩衝區的指標以及要從緩衝區寫入的位元組數。

close()

close() 系統呼叫用於終止對檔案系統的訪問。使用此係統呼叫意味著程式不再需要該檔案,因此緩衝區被重新整理,檔案元資料被更新,並且檔案資源被釋放。

wait()

在某些系統中,程序可能會等待另一個程序完成其執行。當父程序建立子程序並且父程序的執行被掛起直到子程序執行時,就會發生這種情況。父程序的掛起是透過 wait() 系統呼叫發生的。當子程序完成執行時,控制權將返回給父程序。

此係統呼叫在已執行程序的上下文中執行可執行檔案。它替換先前的可執行檔案。這稱為覆蓋。原始程序識別符號保持不變,因為沒有建立新程序,但程序的資料、堆、棧等被新程序替換。

fork()

程序使用 fork() 系統呼叫來建立其自身的副本程序。這是作業系統中主要的程序建立方法之一。當父程序建立子程序並且父程序的執行被掛起直到子程序執行時。當子程序完成執行時,控制權將返回給父程序。

exit()

exit() 系統呼叫由程式用於終止其執行。在多執行緒環境中,這意味著執行緒執行已完成。exit() 系統呼叫後,作業系統會回收程序使用的資源。

kill()

kill() 系統呼叫由作業系統用於向程序傳送終止訊號,敦促程序退出。但是,kill() 系統呼叫並不一定意味著殺死程序,它可以有多種含義。

更新於:2020-06-22

10K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告