程式與執行緒(Process Management)

更新於 2024/12/09閱讀時間約 8 分鐘

上篇著重於作業系統在硬體的角色還有記憶體 硬體運作的基本機制(資料處理流程)

本篇學習目標:了解作業系統如何管理程式

Process、Thread 和 Process Control Block(PCB)

在作業系統裡,程式的執行涉及三個重要概念:ProcessThreadProcess Control Block(PCB)

  • Program:還沒執行時,它只是靜態的檔案,比如 .exe 檔案或某個應用程式。
  • Process:當你打開程式時,程式被載入記憶體,成為一個 Process,這時它已經開始消耗記憶體和 CPU 資源了。每個 Process 都是獨立的,擁有自己的記憶體空間和執行狀態。舉例:你同時開啟音樂播放器和文字編輯器,這兩個程式就是兩個 Process。
  • Thread:一個 Process 可以包含多個 Thread,這些 Thread 共享 Process 的資源(如記憶體)。執行緒是「真正在跑任務」的單位。一個 Process 有多個 Thread 時,可以同時執行不同的任務。舉例:在音樂播放器裡,一個 Thread 處理播放音樂,另一個 Thread 處理下載歌曲。

簡單來說,Process 像是一個運作中的工廠,而 Thread 是工廠裡的工人,他們各司其職,但又共享同一套資源。

Process Control Block(PCB)

  • PCB 是作業系統用來管理 Process 的資料結構,每個 Process 都有一個 PCB,記錄它的所有資訊,包括:
    • Process 的狀態(運行中、等待中等)。
    • 分配的記憶體和資源。
    • CPU 的寄存器狀態(暫停執行時,CPU 的暫存資料)。

舉例:當你暫停一個遊戲時,作業系統會把遊戲的狀態存到 PCB,等你重新開始遊戲時,PCB 的資料可以幫助遊戲從中斷的地方繼續運行。

以工廠來比喻,PCB 是像是「生產進度報告表」記載訂單資訊、生產狀態(待料、生產中等等)。

raw-image



Context Switch 的運作方式

當 CPU 需要從執行一個 Process 切換到另一個 Process 時,會進行以下步驟:

  1. 保存當前 Process 的上下文(Context)
    • 把這個 Process 的執行狀態存到 Process Control Block(PCB)裡,包括 CPU 的寄存器內容、記憶體位置、程序計數器(Program Counter,記錄下一條指令的位置)等。
  2. 切換到新 Process 的上下文
    • 從新 Process 的 PCB 中讀取已保存的上下文,恢復它的執行狀態。
  3. 繼續執行新 Process
    • CPU 開始執行新 Process 的指令,這樣看起來就像兩個程式在「同時運行」。

舉例:像寫作業被打斷

  • 你正在寫作業(Process A)。
  • 電話響了,你得接電話(Process B),所以你先把作業的進度記錄好(保存 A 的上下文)。
  • 接完電話後,你看回作業進度(讀取 A 的上下文),然後繼續寫作業。

為什麼需要 Context Switch?

Context Switch 的存在是為了讓多個 Process 和 Thread 能公平分享 CPU 資源。例如:

  • 你在聽音樂(Process 1)。
  • 你同時用瀏覽器上網(Process 2)。
  • 作業系統會快速在這兩個 Process 之間切換,讓音樂不會中斷,網頁也能即時顯示。

raw-image

圖片來源:FANG Interview Question | Process vs Thread


Process state 行程狀態(Process state)

行程狀態(Process State):程式是怎麼「跑起來」的?

圖片來源

AppWorks School Batch #16 Front-End Class 學習筆記&心得(Week 17)

raw-image

Process 的運作就像我們做作業的流程:先準備資料、再執行計算,最後交作業完成。同樣,行程的狀態大致分為五種:NewReadyWaitingRunningTerminated


五大狀態解釋

1. New(新生狀態)

新生狀態就像剛剛被老師分配作業的時候,還沒動手,只是程式剛開始被建立,還沒準備好運行。

例子:假設我們開啟了一個遊戲,這時候遊戲的程式還在載入,它的狀態就是 New。

2. Ready(準備狀態)

程式已經準備好了,資源也分配好了,就等 CPU 調度它去執行。

注意!

Ready 並不會直接到 Running!因為 CPU 會優先處理其他更急的任務。所以,Ready 的程式要先排隊進入 Waiting 狀態,等到時機成熟再執行。

例子:好比我們準備好了筆記本和筆,但老師(CPU)還在幫其他同學改作業,我們只能先坐著等。


3. Waiting(等待狀態)

到了這裡,有些同學可能會想:「老師,為什麼程式準備好還要等?」

原因是什麼?因為它還需要其他的條件才能執行!

例如:

  • 它可能在等資料讀取完成(比如讀硬碟上的檔案)。
  • 或者在等網路連線(像下載檔案時)。
    等這些資源準備好,它才有機會進一步執行。

4. Running(執行狀態)

終於輪到這個程式了!CPU 開始執行它的指令。這時候,程式處於「工作進行中」的狀態,正式使用 CPU 資源。

例子:像是在玩遊戲的時候,CPU 一直處理你的操作指令,比如控制角色移動、戰鬥等。


5. Terminated(終止狀態)

當程式執行完畢,或因為其他原因被終止,程式就會進入這個狀態。它已經完成任務,釋放資源,從作業系統的排程中消失。

例子:遊戲結束,畫面關閉,程式完成它的使命。


Ready 為什麼不直接到 Running?來畫圖搞清楚!

行程的狀態變化,其實是有一定順序的:

New → Ready → Waiting → Running → Terminated
  1. New → Ready
    程式剛建立,載入必要資料後,準備好等待執行。
  2. Ready → Waiting
    雖然 Ready 表示程式準備好了,但因為 CPU 資源有限,還需要等到它排到隊,才能進一步執行。
  3. Waiting → Running
    當程式的資源(如 I/O 資料)到位、CPU 空閒時,才會切換到 Running。
  4. Running → Waiting(有時候會這樣):
    如果程式在執行中需要其他額外資源,例如等待硬碟讀取,會暫時被中斷,重新回到 Waiting。
  5. Running → Terminated
    執行完成,或因錯誤而終止,正式結束。

小結一下!

Ready 不會直接跳到 Running,因為作業系統還需要進行「資源調度」和「等待」步驟,確保所有資源都到位,CPU 才能開始工作!

留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本文探討記憶體(Memory)和儲存裝置(Storage)之間的主要差異,並解釋它們各自的功能與特性。此外,文章還深入介紹 Process、Thread 及其對 CPU 運作的影響,並結合可視化圖表幫助讀者理解這些複雜概念,特別適合對計算機科學有興趣的讀者。
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
本文深入探討 NoSQL 資料庫的特性及優勢,並將其與傳統 SQL 資料庫進行比較。NoSQL 資料庫因其結構靈活、擴展性強而適合儲存變化多端的數據,特別是在社交媒體和電商平臺等高需求場景。CAP 理論也被提出,解釋了分散式系統的能力取捨問題,幫助讀者瞭解在不同需求下如何選擇合適的資料庫技術。
本文探討 SQL 注入(SQL Injection)的攻擊原理及其防護措施。透過具體範例,解釋駭客如何利用應用程式漏洞進行資料庫攻擊,並提供有效的防範方法,包括使用參數化查詢、ORM 框架和輸入驗證等技術,確保應用程式的安全性。最後還簡介資料庫分區與分片的概念,讓讀者更全面理解如何管理和保護資料庫。
本文介紹了資料庫索引的基本原理、類型以及其在資料查詢中的重要性。索引類似於書的目錄,不僅可以提高查詢效率,還有助於組織資料。文章詳細說明瞭主索引、密集索引、稀疏索引、叢索引和非叢索引的定義與特點,並提供了實際的比喻和例子。透過深入瞭解索引的運作,讀者可以更好地設計和優化資料庫,並提升查詢效能。
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
本文探討記憶體(Memory)和儲存裝置(Storage)之間的主要差異,並解釋它們各自的功能與特性。此外,文章還深入介紹 Process、Thread 及其對 CPU 運作的影響,並結合可視化圖表幫助讀者理解這些複雜概念,特別適合對計算機科學有興趣的讀者。
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
本文深入探討 NoSQL 資料庫的特性及優勢,並將其與傳統 SQL 資料庫進行比較。NoSQL 資料庫因其結構靈活、擴展性強而適合儲存變化多端的數據,特別是在社交媒體和電商平臺等高需求場景。CAP 理論也被提出,解釋了分散式系統的能力取捨問題,幫助讀者瞭解在不同需求下如何選擇合適的資料庫技術。
本文探討 SQL 注入(SQL Injection)的攻擊原理及其防護措施。透過具體範例,解釋駭客如何利用應用程式漏洞進行資料庫攻擊,並提供有效的防範方法,包括使用參數化查詢、ORM 框架和輸入驗證等技術,確保應用程式的安全性。最後還簡介資料庫分區與分片的概念,讓讀者更全面理解如何管理和保護資料庫。
本文介紹了資料庫索引的基本原理、類型以及其在資料查詢中的重要性。索引類似於書的目錄,不僅可以提高查詢效率,還有助於組織資料。文章詳細說明瞭主索引、密集索引、稀疏索引、叢索引和非叢索引的定義與特點,並提供了實際的比喻和例子。透過深入瞭解索引的運作,讀者可以更好地設計和優化資料庫,並提升查詢效能。
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
IC設計流程大致如下 每個步驟都是必經過程,走完整個過程後輸出一版real chip |-----------------------| | 定SPEC | --- 決定 Function/clk period/製程liberary .
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
IC設計流程大致如下 每個步驟都是必經過程,走完整個過程後輸出一版real chip |-----------------------| | 定SPEC | --- 決定 Function/clk period/製程liberary .
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護