作業系統中的系統呼叫是什麼?


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

下圖顯示了系統呼叫的執行過程:

System Calls

從該圖可以看出,程序在使用者模式下正常執行,直到系統呼叫中斷它。然後,系統呼叫在核心模式下優先執行。系統呼叫執行完畢後,控制權返回使用者模式,可以恢復使用者程序的執行。

一般來說,在以下情況下需要系統呼叫:

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

系統呼叫的型別

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

程序控制

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

檔案管理

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

裝置管理

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

資訊維護

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

通訊

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

下面列出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() 系統呼叫用於終止對檔案系統的訪問。使用此係統呼叫意味著程式不再需要該檔案,因此緩衝區將被重新整理,檔案元資料將被更新,並且檔案資源將被釋放。

更新於:2023年11月1日

39K+ 瀏覽量

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.