資料處理 (Data Manipulation)

CPU(中央處理器,Central Processing Unit)

介紹

CPU(中央處理器,Central Processing Unit)是計算機的核心元件,被稱為「計算機的大腦」。它負責執行計算機中的所有指令,處理數據並控制其他硬體元件的運行。

CPU 是整台計算機系統中的關鍵元件,負責解釋並執行所有的程式指令,決定系統的性能和運行效率。

CPU 的主要功能

  • 指令執行:CPU 從記憶體中取出程式指令,逐一執行,這些指令通常包括數學運算、資料移動、邏輯判斷等。

  • 數據處理:CPU 進行各種數學和邏輯運算,如加法、減法、乘法、除法、比較等,是程式運行的基礎。

  • 控制與協調:CPU 透過控制訊號,協調各個硬體元件工作,如告訴記憶體何時存取數據,與輸入輸出設備交換資料。

CPU 的主要組成部分

  • 算術邏輯單元 (ALU, Arithmetic Logic Unit):執行數學運算和邏輯比較。

  • 控制單元 (CU, Control Unit):負責解讀指令並協調其他部分執行。

  • 暫存器 (Registers):用來儲存臨時的數據和指令。

  • 快取記憶體 (Cache):CPU 內部記憶體,儲存經常使用的數據,提高處理速度。

CPU 的運作過程

  • 取指令 (Fetch):從記憶體取得下一個要執行的指令。

  • 解碼 (Decode):解釋指令,確定需執行的操作。

  • 執行 (Execute):根據解碼結果進行運算或其他操作。

  • 寫回 (Writeback):將運算結果寫回暫存器或記憶體。

CPU 的特性

  • 時脈速度 (Clock Speed):通常以 GHz(千兆赫)為單位,表示每秒能處理的指令數。時脈速度越高,CPU 處理速度越快。

  • 核心數 (Cores):現代 CPU 多核心設計,每核心獨立處理指令,提升多工處理能力。

  • 執行緒 (Threads):執行緒是執行指令的路徑,部分 CPU 核心支援多執行緒,進一步提升效率。

Machine cycle(機器週期)

機器週期是 CPU 執行一條指令所經歷的一系列步驟,是 CPU 處理指令的基本過程。通常分為以下四個階段:

  • 取指令 (Fetch):
    CPU 從記憶體讀取下一條指令,位置由程式計數器(Program Counter, PC)指示,指令暫存於指令暫存器(Instruction Register, IR)。

  • 解碼 (Decode):
    控制單元解讀指令,判斷需執行操作及數據來源。

  • 執行 (Execute):
    根據指令執行運算、數據搬移或邏輯操作。

  • 寫回 (Writeback):
    將結果寫回暫存器或記憶體。

機器週期可細分為時脈週期(Clock Cycle),某些指令可能需多個時脈週期完成單一步驟。CPU 的效能與每秒完成的機器週期數直接相關。

位移(Shift)

位移是一種位元操作,用來將數字的二進位表示向左或向右移動。

  1. 左移 (Left Shift)

    • 左移將位元向左移動,右側補零,每左移一位相當於數值乘以 2。

    範例(C/C++、JavaScript):

    ​​​​a << n
    

    例:5(0000 0101)左移 1 位成 10(0000 1010)。

  2. 右移 (Right Shift)

    • 右移將位元向右移動,左側依類型補位元:
      • 算術右移 (Arithmetic Right Shift):根據符號補符號位(正數補 0,負數補 1),保留符號。
      • 邏輯右移 (Logical Right Shift):無條件補 0。

    範例(C/C++、JavaScript):

    ​​​​a >> n  // 算術右移
    ​​​​a >>> n // JavaScript 的邏輯右移
    

    例:10(0000 1010)右移 1 位為 5(0000 0101)。

位移常用於快速乘除法、位元操作、資料編碼與加密解碼。

DMA(Direct Memory Access,直接記憶體存取)

DMA 是一種允許外部設備直接與記憶體交換數據的技術,無需 CPU 逐筆處理,提高系統效率。

  • 工作原理
    CPU 設定 DMA 控制器後,DMA 自行完成數據傳輸並通知 CPU,減輕 CPU 負擔。

  • 運作步驟

    1. CPU 設置傳輸參數(來源、目標地址與數據量)。
    2. DMA 控制器接管數據傳輸。
    3. 傳輸完成後 DMA 發送中斷通知 CPU。
  • DMA 類型

    • 記憶體至記憶體
    • 外設至記憶體
    • 記憶體至外設
  • 優點

    • 減少 CPU 負擔
    • 提高系統效率
    • 支援高速大量數據傳輸
  • 應用場景

    • 多媒體處理
    • 磁碟存取
    • 網路通訊
  • 中斷機制
    傳輸完成後由 DMA 發送中斷信號,讓 CPU 繼續其他工作。


作業系統(Operating System,OS)

介紹

作業系統是管理與控制計算機硬體與軟體資源的核心軟體,提供使用者與應用程式介面。它協調系統運行,確保軟硬體協同工作,並為使用者提供簡化操作的環境。

作業系統的主要功能

  1. 處理器管理:分配 CPU 時間,多工排程與優先級管理。

  2. 記憶體管理:分配與釋放記憶體,防止衝突,提供虛擬記憶體。

  3. 檔案系統管理:管理檔案讀寫與存取控制。

  4. 設備管理:管理輸入輸出設備,透過驅動程式操作硬體。

  5. 進程管理:創建、執行、暫停與終止進程,管理進程通訊與同步。

  6. 網路管理:提供網路通訊功能與協議管理。

  7. 使用者介面:提供 CLI 或 GUI 介面供使用者互動。

作業系統的類型

  1. 批次作業系統:程式批次執行,完成後通知使用者。

  2. 分時作業系統:允許多使用者同時操作,快速切換任務。

  3. 即時作業系統(RTOS):保證即時回應,適用於工控、醫療等。

  4. 多使用者作業系統:多使用者共用同一系統並同時運行程式。

  5. 嵌入式作業系統:專為特定硬體設計,輕量高效。

常見的作業系統

  • Windows:微軟桌面系統,圖形介面廣泛使用。

  • macOS:蘋果桌面系統,穩定且界面優雅。

  • Linux:開源系統,多種發行版,伺服器與嵌入式常用。

  • Unix:多使用者、多工系統,Linux 和 macOS 的基礎。

  • Android:基於 Linux 的行動裝置系統。

  • iOS:蘋果行動裝置系統,封閉且安全。


核心(Kernel)

介紹

核心是作業系統中最重要的部分,管理硬體資源並為應用程式提供基礎服務。核心直接與硬體互動,負責資源管理與系統調度,決定系統的性能、穩定性與安全性。

核心的主要功能

  1. 記憶體管理:分配記憶體、虛擬記憶體管理。

  2. 處理器管理:進程排程與 CPU 資源分配。

  3. 設備驅動程式:管理硬體與應用程式的介面。

  4. 檔案系統管理:處理檔案讀寫與安全。

  5. 進程管理:創建、調度與終止進程。

  6. 系統安全與穩定:控制存取權限與防護。

核心的類型

  1. 單核心(Monolithic Kernel):所有功能整合於一體,高效但錯誤影響大。如 Linux。

  2. 微核心(Microkernel):僅保留基本功能,其他服務放在用戶空間,擴展性高。如 Minix。

  3. 混合核心(Hybrid Kernel):結合單核心效率與微核心擴展性。如 Windows NT。

  4. 外核心(Exokernel):資源管理盡量交給應用,核心只負責保護。

核心的運作模式

  1. 核心模式(Kernel Mode):CPU 特權模式,允許直接控制硬體。

  2. 用戶模式(User Mode):應用程式運行模式,透過系統調用間接存取硬體。


Shell

介紹

Shell 是作業系統的介面,允許使用者透過命令列與系統互動,是使用者與核心間的橋樑,負責指令解釋與執行。

Shell 的類型

  1. 命令列 Shell:文字介面,常見如 Bash、Zsh、sh、csh、PowerShell。

  2. 圖形使用者介面 Shell(GUI Shell):圖形化介面,如 Windows Explorer、GNOME、KDE。

Shell 的功能

  1. 指令解釋:將使用者輸入指令轉為系統調用。

  2. 腳本執行:執行 Shell 腳本,自動化任務。

  3. 程式管理:啟動、暫停、終止程式,支援背景執行。

  4. 管道與重定向:將輸出串接或重定向至檔案或裝置。

  5. 環境變數管理:控制系統與 Shell 行為。

Shell 的使用情境

  1. 日常系統管理:伺服器管理、系統配置、檔案操作。

  2. 自動化任務:備份、同步、更新等。

  3. 程式開發:編譯、測試、部署、版本控制。

  4. 遠端系統操作:SSH 遠端管理。

程序(Process)

臨界區(Critical Region)

Critical Region(臨界區)指在多執行緒或多進程環境中,某段程式碼區域只能被一個執行緒或進程獨占執行的區域。這是為避免多個執行緒同時訪問共享資源(如變數、檔案、記憶體區域)時,產生資料競爭或資料不一致的問題。

臨界區的概念在多執行緒或多進程系統中非常重要,透過適當的同步機制(如鎖、信號量等)確保共享資源被正確訪問,保護程式執行的正確性及系統穩定性。

概念

  1. 共享資源
    多個執行緒或進程同時需要存取的資源(如變數、物件或檔案)稱為共享資源。若未妥善控制,可能導致多執行緒同時修改該資源,產生錯誤結果。

  2. 臨界區問題
    在多執行緒系統中,執行緒可能隨時被中斷並切換。若多個執行緒同時進入臨界區並操作共享資源,會造成不一致的結果或資料競爭。臨界區的目標是確保每次僅有一個執行緒能進入該區域。

臨界區的解決方案

為避免臨界區問題,常用同步機制確保多個執行緒不會同時進入臨界區。常見工具有:

  1. 鎖(Locks)
    鎖用於保護臨界區,執行緒必須先獲得鎖才能進入臨界區,持有鎖期間其他執行緒無法進入。

    • 互斥鎖(Mutex):一次只有一個執行緒持有。
    • 自旋鎖(Spinlock):等待執行緒會持續檢查鎖狀態,直到獲得鎖。
  2. 信號量(Semaphore)
    信號量是一種計數同步工具,允許設定同時進入臨界區的最大執行緒數量。可用於控制多個資源的使用,或實現互斥。

  3. 條件變數(Condition Variables)
    允許執行緒在臨界區內等待某個條件達成,當條件滿足時由其他執行緒通知,繼續執行。

  4. 屏障(Barrier)
    用於多執行緒同步,強制所有執行緒達成某個階段後才繼續執行。

臨界區的設計原則

  1. 最小化臨界區範圍
    臨界區應只涵蓋存取共享資源的關鍵程式碼,減少執行緒等待時間,提高效率。

  2. 避免死結
    設計同步邏輯時需避免死結(多個執行緒互相等待釋放資源,導致無限等待)。

互斥(Mutual Exclusion)

互斥是確保同一時間只有一個執行緒或進程能進入臨界區,操作共享資源的基本同步概念。其目的是避免「競爭條件」(Race Condition),確保資料的一致性與正確性。

在多工系統中,若未使用互斥,執行緒可能同時修改共享變數,造成資料不一致或錯誤。

互斥可透過互斥鎖、信號量、自旋鎖等機制實現,但需注意避免死結和飢餓等問題。

互斥的挑戰

  1. 死結(Deadlock)
    多個執行緒互相等待對方釋放資源,造成無限等待。

  2. 飢餓(Starvation)
    某些執行緒長時間無法取得鎖,可能因優先權或資源分配不公平導致。

  3. 競爭條件(Race Condition)
    缺乏適當同步導致多執行緒同時存取修改共享資源,產生不可預期錯誤。


Deadlock(死結)

說明

Deadlock 是多執行緒或多進程系統中,兩個或多個執行緒因互相等待資源而無法繼續執行,陷入無限等待狀態。死結會使系統部分或全部執行緒無法運作,導致系統資源耗盡或效率下降。

死結的四個必要條件

  1. 互斥條件(Mutual Exclusion)
    資源為不可共享狀態,每次只能被一個執行緒使用。

  2. 保持並等待(Hold and Wait)
    執行緒持有至少一個資源,同時等待其他執行緒持有的資源。

  3. 不剝奪條件(No Preemption)
    資源不能被強制剝奪,只能由執行緒自行釋放。

  4. 循環等待(Circular Wait)
    存在一個執行緒等待資源的循環鏈,如 A 等待 B,B 等待 C,C 又等待 A。

預防和避免死結的方法

  1. 資源順序法(Resource Ordering)
    為所有資源設定全局順序,執行緒必須依序申請資源,避免循環等待。

  2. 死結避免(Deadlock Avoidance)
    使用演算法(如銀行家演算法)檢查資源分配請求是否安全,若不安全則拒絕請求。

  3. 死結檢測與恢復(Deadlock Detection and Recovery)
    允許死結發生,系統檢測到死結後強制終止部分執行緒或回收資源恢復運行。

  4. 避免持有與等待(Hold and Wait)
    執行緒須一次性請求所有資源,避免同時持有部分資源等待其他資源。

  5. 允許資源剝奪(Resource Preemption)
    當執行緒長時間持有資源阻塞他人時,可強制剝奪資源分配給其他執行緒。

死結的例子分析:銀行家演算法

銀行家演算法是一種死結避免策略,系統在資源分配前判斷是否會使系統處於不安全狀態,若會則拒絕分配。安全狀態意味著系統能保證所有執行緒最終完成工作,避免死結發生。