首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

操作系統核心概念:進程、線程與進程間通信(IPC)系統性總結

     編輯:關於C語言

第 2 章 進程管理

2.1 進程基礎

程序 vs 進程

維度程序進程
本質靜態指令集合動態執行過程
生命週期永久存儲臨時:創建→執行→消亡
組成指令序列程序+數據+PCB
對應關係1:N 或 N:M一程序可對應多進程
調度單位不可獨立調度獨立調度/並發單位

形象比喻:程序 = 菜譜,進程 = 烹饪過程,數據 = 食材。

進程狀態模型

  • 三態:運行、就緒、阻塞
  • 五態:+ 創建、終止
  • 七態:+ 掛起就緒、掛起阻塞(引入虛存/換出機制)

PCB(進程控制塊)

  • OS 感知進程存在的唯一標識,一進程一 PCB
  • 組織方式:線性表、鏈表、索引表
  • 包含:進程標識、狀態、優先級、程序計數器、內存指針、上下文、I/O 狀態、會計信息等

進程映像(實體)四大組成

  1. 程序段(代碼)
  2. 數據段
  3. 系統/用戶棧
  4. PCB

2.2 線程:輕量級進程

引入動機

進程切換開銷大(上下文切換、地址空間切換),線程共享進程資源,僅保留私有棧/寄存器/TCB,切換極快。

進程 vs 線程 關鍵差異

特性進程線程
資源擁有者是否(僅私有少量資源)
調度單位否(傳統OS)是
通信方式IPC(管道、Socket等)共享內存直接讀寫
同步機制信號量、管程互斥鎖、條件變量、讀寫鎖
安全性隔離性好共享數據易衝突,需同步
切換開銷大小

線程實現級別

  • 用戶級 (ULT):線程管理庫在用戶態實現,切換快;但一線程阻塞(如系統調用)導致整進程阻塞。
  • 內核級 (KLT):內核調度線程,一線程阻塞不影響同進程其他線程;切換需陷入內核,稍慢。
  • 混合模式:N:M 映射,綜合兩者優點(如 Go 語言 Goroutine、Java 虛擬機線程模型)。

TCB(線程控制塊)

包含:線程 ID、狀態/優先級、寄存器上下文、私有棧指針、指向所屬 PCB 的指針。TCB ≪ PCB。

2.3 進程間通信(IPC)與同步互斥

核心問題

  • 互斥:臨界區同一時刻僅允許一進程訪問共享資源
  • 同步:多進程按協調順序推進(如生產者-消費者)

互斥實現手段演進

  1. 關中斷(僅適用單核內核,不靈活)
  2. 鎖變量(忙等待,浪費 CPU)
  3. 嚴格輪換 / Peterson 算法(軟件邏輯複雜)
  4. 硬件原子指令:TSL (Test-and-Set-Lock)、XCHG (Exchange)、CAS (Compare-and-Swap)

信號量 + P/V 原語:經典同步互斥工具

// 互斥信號量 mutex 初值 = 1 (資源數)
P(mutex);  // 申請資源,若不可用則阻塞
// 臨界區
V(mutex);  // 釋放資源,喚醒等待隊列

// 同步信號量 sync 初值 = 0
// 進程 A: 生產數據 -> V(sync)
// 進程 B: P(sync) -> 消費數據

關鍵規則:互斥 P/V 成對同進程,同步 P/V 成對跨進程且初值通常為 0。

管程:高級同步抽象

將共享數據及操作封裝為模塊,編譯器/運行時保證互斥入口,提供 wait/signal 條件變量,簡化應用層同步編程(Java synchronized、C# lock、Python threading.Condition 均為管程思想實現)。

三級調度

  • 高級(長程):作業調入內存(批處理)
  • 中級(中程):換入/換出(掛起/激活)
  • 低級(短程):就緒隊列選進程佔用 CPU

經典調度算法

系統類型算法
批處理FCFS、SJF、SRTN、HRRN
交互式RR、優先級、多級反饋隊列、彩票、公平調度

本文轉載自 “李海川” 博客,原文地址:https://lihaichuan.blog.51cto.com/498079/1304092

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved