• Operating System Video Tutorials

作業系統 - 程序操作



什麼是作業系統中的程序?

程序是正在執行的程式,在其生命週期中會經歷多個狀態。在每個狀態下,程序都會經歷某些操作,這些操作使程序能夠執行到完成。

程序的狀態

程序的不同狀態如下:

  • 新建 - 程序被建立。
  • 就緒 - 程序已準備好所有資源分配,並等待 CPU 分配。
  • 執行 - 程序中的指令正在 CPU 中執行。
  • 等待 - 程序正在等待輸入/輸出或任何其他事件的完成。
  • 終止 - 程序完成執行並退出系統。

下圖描述了程序狀態:

States of a Process

作業系統中的不同程序操作

當程序處於特定狀態時,或者當程序從一個狀態轉換到另一個狀態時,就會發生程序操作。程序主要有四種操作:

  • 程序建立
  • 程序排程
  • 程序搶佔
  • 程序阻塞
  • 程序終止

程序建立

程序進入系統時經歷的第一個操作是程序建立。它涉及程序的形成,並與程序的“新建”狀態相關聯。程序建立是由於以下任何事件引起的:

  • 系統初始化 - 當計算機啟動時,會建立許多系統程序和後臺程序。
  • 使用者請求 - 使用者可以啟動程式的執行,從而建立程序。
  • 子程序系統呼叫 - 執行中的程序可以透過程序建立系統呼叫建立子程序。
  • 批處理系統 - 批處理系統可以啟動批處理作業。

程序可以使用 fork() 函式由另一個程序建立。建立程序稱為父程序,建立的程序稱為子程序。子程序只有一個父程序,但父程序可以有多個子程序。父程序和子程序具有相同的記憶體映像、開啟的檔案和環境字串。但是,它們具有不同的地址空間。

下圖演示了使用 fork() 建立程序:

Process Creation

程序排程

當處於就緒狀態的程序被排程程式選中執行時,就會發生程序排程操作。程序排程是根據使用的排程演算法啟動的。當 CPU 空閒且就緒佇列中有程序時,為正在執行的程序分配的時間片到期時,高優先順序程序進入系統或發生硬體中斷時,可能會發生這種情況。當新的程序被分配到 CPU 時,其狀態將從其程序控制塊 (PCB) 中載入。

程序搶佔

程序搶佔是一種操作,透過該操作,正在執行的程序的執行被掛起,並且 CPU 選擇另一個程序執行。當正在執行的程序的時間片到期時,高優先順序程序進入就緒佇列或發生硬體中斷時,可能會發生程序搶佔。

CPU 中正在執行的程序的搶佔會導致稱為上下文切換的現象。在這裡,即將離開程序的上下文或狀態儲存在其 PCB 中,以便在需要時可以重新載入它,並且可以從與之前相同的點恢復執行。

下圖演示了程序排程和程序搶佔:

Process Preemption

程序阻塞

如果正在執行的程序需要發生某些事件才能繼續執行,則該程序將被阻塞並置於“等待”狀態,並從 CPU 中交換出來。此事件可能是輸入/輸出系統呼叫,因為 I/O 事件在主記憶體中執行,不需要處理器。

在這裡,當程序本身需要時,作業系統會阻塞程序。事件完成後,程序再次進入就緒狀態。

下圖演示了程序阻塞:

Process Blocking

程序終止

程序終止是結束程序並釋放程序已持有的所有資源的操作。程序終止後將不復存在。

與程序建立類似,程序終止可能有多個原因,如下所示:

  • 程序已完成其最後一條指令的執行,因此作業系統將其終止。
  • 如果其任務不再相關,則父程序可以終止子程序。子程序在其終止之前將其狀態資訊傳送給父程序。此外,當父程序終止時,其子程序也會終止,並且如果父程序終止,則子程序無法執行。
  • 如果存在服務錯誤,則作業系統可以終止程序。
  • 硬體故障也可能導致程序終止。

在大多數情況下,程序終止發生在程序執行完成時。所涉及的步驟如下:

  • 父程序向子程序發出 SIGTERM 訊息作為啟動終止的訊號。
  • 接收到此訊號後,子程序將執行清理過程,例如釋放已分配的資源、關閉共享檔案、放棄對共享變數和表的訪問等。
  • 然後子程序退出,控制權返回給父程序或作業系統。
廣告