??? 漫畫操作系統原理
?? 學習目標:深入理解操作系統核心原理,為Java并發編程和性能優化打下堅實基礎
?? 第一章:操作系統初識篇
?? 什么是操作系統?
想象一下,你是一個大型圖書館的館長…
?? 沒有操作系統 vs 有操作系統沒有操作系統:
讀者1 → 直接找書架 ← 讀者2↘ ↙發生沖突!有操作系統:
讀者1 → 圖書管理系統 → 有序分配 → 書架1
讀者2 → 圖書管理系統 → 有序分配 → 書架2
讀者3 → 圖書管理系統 → 排隊等待 → 書架?操作系統的核心職責:
? 資源管理:CPU、內存、磁盤、網絡
? 進程調度:決定哪個程序先運行
? 內存管理:為程序分配和回收內存
? 文件管理:統一的文件存儲接口
? 設備管理:統一的硬件訪問接口
?? 操作系統特性:
- 并發性:同時處理多個任務
- 共享性:多個程序共享系統資源
- 虛擬性:為每個程序提供獨立的虛擬空間
- 異步性:程序執行順序不可預知
??? 操作系統架構
??? 操作系統分層架構:┌─────────────────────────────────────┐
│ 用戶應用程序 │ ← 用戶態
├─────────────────────────────────────┤
│ 系統調用接口 │ ← 內核態邊界
├─────────────────────────────────────┤
│ 進程管理 │ 內存管理 │ 文件管理 │
├─────────────────────────────────────┤ ← 內核態
│ 設備管理 │ 網絡管理 │ 安全管理 │
├─────────────────────────────────────┤
│ 硬件抽象層 │
└─────────────────────────────────────┘硬件層
?? 第二章:進程與線程管理
?? 進程基礎概念
?? 進程生命周期:創建 → 就緒 → 運行 → 阻塞 → 終止↑ ↓ ↓ ↑└──────┴──────┴──────┘進程狀態轉換:
? 創建→就緒:進程創建完成,等待CPU
? 就緒→運行:獲得CPU時間片
? 運行→阻塞:等待I/O或其他資源
? 阻塞→就緒:所需資源到位
? 運行→就緒:時間片用完
? 運行→終止:進程執行完畢進程控制塊(PCB):
┌─────────────────┐
│ 進程ID(PID) │
│ 進程狀態 │
│ CPU寄存器 │
│ 內存管理信息 │
│ 文件描述符 │
│ 調度信息 │
└─────────────────┘
?? 線程深度解析
?? 進程 vs 線程對比:進程(重量級):
┌─────────────────┐
│ 進程A │
│ ┌─────┐ ┌─────┐ │
│ │線程1│ │線程2│ │
│ └─────┘ └─────┘ │
│ 獨立內存空間 │
└─────────────────┘線程(輕量級):
? 共享進程內存空間
? 擁有獨立的棧和寄存器
? 創建開銷小,切換快
? 通信簡單但需要同步線程實現模型:
1. 用戶級線程:內核不感知,效率高但無法利用多核
2. 內核級線程:內核管理,可利用多核但開銷大
3. 混合模型:結合兩者優勢
?? 進程調度算法
?? CPU調度算法詳解:1. 先來先服務(FCFS):進程: A(24) → B(3) → C(3)時間: 0────24──27─30平均等待時間: (0+24+27)/3 = 172. 最短作業優先(SJF):進程: B(3) → C(3) → A(24)時間: 0─3──6────30平均等待時間: (0+3+6)/3 = 33. 時間片輪轉(RR):時間片=4,進程隊列: A(24),B(3),C(3)A(4) → B(3) → C(3) → A(4) → A(4) → A(4) → A(4) → A(4)4. 優先級調度:┌─────────────────┐│ 優先級隊列 ││ 高 ┌─────┐ ││ ↑ │進程A│ ││ │ └─────┘ ││ │ ┌─────┐ ││ │ │進程B│ ││ │ └─────┘ ││ 低 ┌─────┐ ││ │進程C│ ││ └─────┘ │└─────────────────┘
?? 進程同步與通信
?? 進程同步機制:1. 互斥鎖(Mutex):```javasynchronized(lock) {// 臨界區代碼共享資源訪問}
-
信號量(Semaphore):
Semaphore semaphore = new Semaphore(3); // 允許3個線程 semaphore.acquire(); // P操作,獲取資源 try {// 使用資源 } finally {semaphore.release(); // V操作,釋放資源 }
-
條件變量(Condition):
ReentrantLock lock = new ReentrantLock(); Condition condition = lock