System-Calls

系統呼叫、消息傳遞和中斷之間的關係是什麼?

  • July 27, 2018

我正在閱讀有關流程管理的 Wikipedia 文章。我的重點是 Linux。我無法弄清楚系統呼叫、消息傳遞和中斷之間的關係和區別,在它們的概念和目的上。它們都是為了向核心請求資源和服務的程序嗎?

文章中的一些引用和其他一些引用:

  1. >

作業系統有兩種可能的方式在程序執行期間重新獲得對處理器的控制權,以便作業系統執行解除分配或分配:

1. 程序發出系統呼叫(有時稱為軟體中斷);例如,發生 I/O 請求,請求訪問硬碟上的文件。 2. 發生硬體中斷;例如,在鍵盤上按下了一個鍵,或者計時器用完(用於搶先式多任務處理)。

  1. >

在使用者模式下執行的程序可以通過兩種技術請求核心的服務:

* System call
* Message passing
  1. >

中斷是表示需要注意的非同步信號或表示需要更改執行的軟體中的同步事件。

硬體中斷導致處理器保存其執行狀態並開始執行中斷處理程序。軟體中斷通常被實現為指令集中的指令,這會導致上下文切換到類似於硬體中斷的中斷處理程序。

  1. 所有現代作業系統都支持多任務處理。這意味著系統能夠同時執行多個程序;要麼是偽並行(只有一個 CPU 可用),要麼是現在多核 CPU 並行常見(一個任務/核心)。

讓我們以只有一個 CPU 可用的更簡單的情況為例。這意味著如果您同時執行兩個不同的程序(比如一個網路瀏覽器和一個音樂播放器),系統實際上並不能同時執行它們。發生的情況是 CPU 一直在從一個程序切換到另一個程序;但這發生得非常快,因此您永遠不會注意到它。

現在讓我們假設當這兩個程序正在執行時,您按下了重置按鈕(壞男孩)。CPU 將立即停止正在執行的操作並重新啟動系統。恭喜:你產生了一個中斷。

當您正在程式並想向 CPU 請求服務時,情況類似。不同之處在於,在這種情況下,您執行軟體程式碼——通常是執行系統呼叫(例如fopen打開文件)的庫過程。

因此,1 描述了從 CPU 獲得注意力的兩種不同方式。 2. 大多數現代作業系統支持兩種執行模式:使用者模式和核心模式。預設情況下,作業系統在使用者模式下執行。使用者模式非常有限。例如,禁止所有 I/O;因此,您不能從硬碟打開文件。當然,這在現實中永遠不會發生,因為當您打開文件時,作業系統會透明地從使用者模式切換到核心模式。在核心模式下,您可以完全控制硬體。

如果您想知道為什麼存在這兩種模式,最簡單的答案是保護。基於微核心的作業系統(例如 MINIX 3)的大部分服務都在使用者模式下執行,這降低了它們的危害。單片核心(如 Linux)幾乎所有的服務都在核心模式下執行。因此,在 MINIX 3 中崩潰的驅動程序不太可能導致整個系統崩潰,而這在 Linux 中並不罕見。

系統呼叫是單片核心(共享數據模型)中用於從使用者模式切換到核心模式的原語。消息傳遞是微核心(客戶端/伺服器模型)中使用的原語。更準確地說,在消息傳遞中,系統程序員還使用系統呼叫來引起 CPU 的注意。消息傳遞僅對作業系統開發人員可見。使用系統呼叫的單片核心速度更快但可靠性較低,而使用消息傳遞的微核心速度較慢但具有更好的故障隔離。

因此,2 提到了從使用者模式切換到核心模式的兩種不同方式。 3. 修改一下,創建軟體中斷(又稱陷阱)的最常見方法是執行系統呼叫。另一方面,中斷純粹由硬體產生。

當我們中斷 CPU(通過軟體或硬體)時,它需要將其目前狀態保存在某個地方——它正在執行的程序以及它在何時停止——否則它在切換回來時將無法恢復程序. 這稱為上下文切換,這很有意義:在關閉電腦以執行其他操作之前,您首先需要確保已保存所有程序/文件等,以便您可以從停止的點恢復下次你會打開它:)

因此,3 解釋了在執行陷阱或中斷之後需要做什麼以及這兩種情況的相似程度。

引用自:https://unix.stackexchange.com/questions/17917