ARMv8 架構範例
以 ARMv8 為例,整理 translation granule、region、四層 hierarchical paging、TTBR 與兩層 TLB 如何共同完成位址轉換。
以 ARMv8 為例,整理 translation granule、region、四層 hierarchical paging、TTBR 與兩層 TLB 如何共同完成位址轉換。
介紹 Client-Server 架構下的兩種高層通訊機制:Socket(以 IP + Port 定址跨機器通訊端點)與 RPC(讓遠端程序呼叫在語意上等同本地呼叫,涵蓋 Stub、Parameter Marshaling、At-Most-Once/Exactly-Once 語意、Port Binding),以及 Android Binder Framework 如何將 RPC 應用於同裝置的 IPC。
介紹 CPU 排程的根本動機、CPU-I/O Burst Cycle 的運作規律、CPU Scheduler 的職責、搶占式與非搶占式排程的差異,以及 Dispatcher 的角色與 Dispatch Latency。
詳解六種 CPU 排程演算法:FCFS、SJF(含指數平均預測與 SRTF)、Round-Robin、Priority Scheduling(含 Starvation 與 Aging)、Multilevel Queue、Multilevel Feedback Queue,並附 Gantt Chart 範例與各演算法的優缺點分析。
介紹評估 CPU 排程演算法的五大標準:CPU 利用率、產能、回覆時間、等待時間、回應時間,以及它們的最佳化方向與彼此之間的取捨關係。
以 IA-32 與 x86-64 為例,整理 segmentation、paging、PAE 與 64-bit 位址格式如何共同完成 logical address 到 physical address 的轉換。
以 POSIX 共享記憶體、Mach Message Passing、Windows ALPC、Pipes 四個具體 IPC 系統為例,說明各實作的 API 設計、通訊建立流程、效能考量與適用場景。
介紹 Java 語言提供的四種執行緒同步化機制:Java Monitor(synchronized、wait/notify)、Reentrant Lock、Semaphore 與 Condition Variable,從 entry set 與 wait set 的底層模型出發,逐步建立完整的 Java 並行程式設計概念。
介紹作業系統 Kernel 中廣泛使用的基礎資料結構:串列、堆疊、佇列、樹、雜湊映射、位元映射,以及它們在 OS 中的實際應用場景。
介紹同步化工具的活性問題(Liveness),涵蓋死結(Deadlock)的成因與 Resource Allocation Graph、優先權反轉(Priority Inversion)與優先繼承協定(Priority-Inheritance Protocol)的 Mars Pathfinder 實例,以及各類同步化工具在不同競爭程度下的效能評估與選用指引。
介紹 Monitor 的設計動機(Semaphore 的易錯性)、Monitor 的語法結構與互斥保證、Condition Variable 的 wait/signal 語義與 Signal-and-Wait 方案、用 Semaphore 實作 Monitor 的完整機制,以及 conditional-wait 與 priority number 的行程喚醒排序。
介紹 Mutex Lock 的結構與 Spinlock 特性、Semaphore 的兩種使用情境(互斥存取與執行順序控制)與兩種實作方式(忙碌等待 vs. 阻塞等待),涵蓋負值語義、原子性保證,以及 FIFO 排隊對 Starvation 的影響。
介紹 POSIX API 在用戶層提供的三種同步工具:Mutex Lock(pthread_mutex_t)、Semaphore(具名與匿名兩類)以及 Condition Variable(pthread_cond_t),並說明各工具的初始化、取得與釋放方式,以及 Condition Variable 與 Mutex 配合使用的完整協議。
介紹主記憶體管理的基本問題、Base/Limit Register 的硬體保護、Address Binding、Logical/Physical Address Space、MMU、Dynamic Loading,以及 Dynamic Linking 與 Shared Libraries。
介紹 swapping 如何用 backing store 擴大可同時存在的 process 總量,並比較 standard swapping、swapping with paging 與 mobile systems 的記憶體壓力處理策略。
深入 Windows 執行緒的三層資料結構(ETHREAD/KTHREAD/TEB)與核心空間、使用者空間的分隔設計,以及 Linux 以 Task 為統一模型、透過 clone() 旗標控制共享程度的設計哲學,並探討 clone() 如何延伸至容器(Container)的實作。
介紹作業系統提供的兩大類服務(對使用者有益的服務與維護系統效率的服務),以及使用者與 OS 互動的三種介面:命令列介面(含 Shell 的兩種實作方式)、圖形使用者介面,以及觸控螢幕介面。
介紹作業系統的核心運作機制,包括多程式處理 (Multiprogramming)、多工 (Multitasking)、雙模式保護 (Dual-Mode)、特權指令,以及計時器防止 CPU 無限占用。
介紹作業系統的三種生成方式(系統建置、模組庫連結、完全模組化),以及從按下電源鍵到出現登入提示的完整開機流程,涵蓋 BIOS 與 UEFI 的差異、GRUB 的角色,以及 Linux 開機的詳細步驟。
從使用者視角與系統視角探討作業系統的功能,釐清 Kernel、System Programs 與 Middleware 的定義與邊界。
介紹設計作業系統的三大核心議題:設計目標(使用者目標與系統目標的分類與模糊性)、機制與策略分離原則(Mechanism vs. Policy,為何分離是靈活性的關鍵)、以及實作語言的演進(Assembly → C/C++,高階語言的優勢與效能的真正來源)。
以 Linux CFS、Windows Dispatcher 與 Solaris 六大排程類別為例,說明排程理論在真實作業系統中的落實方式:vruntime 機制與紅黑樹、Windows 動態優先層級調整、Solaris Dispatch Table 的欄位含義與全域優先層級映射。
介紹 OS 結構設計的五種主要方法:單體結構、分層方法、微核心、可載入核心模組,以及混合式系統(Darwin、Android),並以 UNIX、Linux、macOS、iOS、Android 為實例說明各方法的優缺點與取捨。
介紹作業系統除錯的核心方法:失敗分析(core dump 與 crash dump 的差異與原因)、以計數器工具(ps、vmstat、/proc)與追蹤工具(strace、perf)進行效能監控,以及 BCC/eBPF 動態核心追蹤的機制、工具鏈與應用。
介紹 Paging 如何讓 Process 的 physical address space 不必連續、Page/Frame/Page Table 的基本轉址機制、TLB 的效能問題、Valid-Invalid Bit 的保護機制,以及 Shared Pages。
深入解析即時作業系統的 CPU 排程設計,涵蓋軟性與硬性即時系統的差異、Event Latency/Interrupt Latency/Dispatch Latency 的組成,以及三種核心演算法:Rate-Monotonic(靜態優先權,以週期倒數為基準)、Earliest-Deadline-First(動態優先權,以最早截止時間優先)、Proportional Share(按比例分配處理器時間),以及 POSIX 即時排程 API。
介紹作業系統同步化的三大經典問題:有界緩衝區問題(Bounded-Buffer)、讀者-寫者問題(Readers-Writers)、哲學家用餐問題(Dining-Philosophers),並以 Semaphore 與 Monitor 為工具詳解各問題的成因與解法。
深入介紹三大執行緒函式庫(POSIX Pthreads、Windows Thread API、Java Thread API)的設計原理與實作方式,涵蓋非同步/同步執行緒策略、建立與等待的完整生命週期、Java Executor Framework 的 Callable/Future 機制,以及 JVM 如何將 Java 執行緒對應到底層 OS 執行緒。
深入說明使用者層級執行緒與核心層級執行緒的排程差異、PCS 與 SCS 兩種競爭範圍的機制與原因,以及 POSIX Pthread 排程 API 的實際用法。
介紹執行緒的基本組成與與進程的差異、多執行緒的四大優勢、多核系統的並行性與平行性之別、Amdahl 定律、資料平行與任務平行,以及 Many-to-One、One-to-One、Many-to-Many 三種執行緒模型。
深入探討多執行緒程式設計中的五大核心議題:fork/exec 語意變化、UNIX 信號處理的傳遞策略、執行緒取消的兩種模式與 Pthreads/Java API、執行緒區域儲存 (TLS) 的設計動機,以及 Scheduler Activations 的 LWP 架構與 Upcall 機制。
深入說明多處理器系統的 CPU 排程問題,涵蓋對稱多處理(SMP)、記憶體停頓與多執行緒核心(CMT)、兩層排程架構、負載平衡的推拉遷移、處理器親和性(Soft/Hard Affinity)與 NUMA、以及異質多處理(HMP)與 ARM big.LITTLE。
介紹作業系統的三個重要面向:保護與安全機制 (Protection & Security)、虛擬化技術 (Virtualization) 與虛擬機器管理器 (VMM),以及分散式系統 (Distributed Systems) 的基本概念與網路類型。
介紹評估 CPU 排程演算法的四種方法:確定性建模、排隊模型、模擬、實作,以及各方法的優缺點、Little's Formula 與 Trace-Driven Simulation 的原理。
介紹三種超越傳統鎖(mutex/semaphore)的並行程式設計替代方案:Transactional Memory(交易式記憶體,分為 STM 與 HTM)、OpenMP 的 critical-section 編譯器指令,以及透過不可變狀態從根本上消除 race condition 的函數式程式語言(Erlang、Scala)。
介紹 Windows 與 Linux 作業系統在核心層實作同步機制的方式,涵蓋 Windows 的 Interrupt Mask、Spinlock、Dispatcher Objects、Critical-section Object,以及 Linux 的 atomic_t、Mutex Lock、Spinlock、Semaphore 與 preempt_count 機制。
介紹死結發生的四個必要條件(互斥、持有並等待、不可搶占、循環等待),以及用於形式化描述資源分配狀態的資源分配圖(Resource-Allocation Graph),並說明如何從圖的結構判斷系統是否處於死結狀態。
介紹處理死結問題的三種根本策略(無視、預防/迴避、偵測+復原),並深入分析死結預防(Deadlock Prevention)的四個方向:破壞互斥、持有並等待、不可搶占、循環等待條件,以及各方法在實際系統中的限制與取捨。
深入解析死結迴避(Deadlock Avoidance)的核心概念:安全狀態(Safe State)的定義與安全序列、資源分配圖演算法(RAG Algorithm)的聲索邊(Claim Edge)機制,以及適用於多實例資源的銀行家演算法(Banker's Algorithm)包含安全性演算法與資源請求演算法的完整推導與實例。
介紹死鎖偵測的兩種演算法:針對單一資源實例的等待圖(Wait-for Graph),以及針對多實例資源的偵測演算法,並說明如何決定偵測演算法的調用時機。
介紹偵測到死鎖後的兩種復原策略:行程終止(Abort All vs. Abort One at a Time)與資源搶奪(Resource Preemption),並說明選擇犧牲者的標準、Rollback 的困難,以及如何避免 Starvation。
介紹硬體層級的三種同步原語:記憶體屏障(Memory Barrier)、硬體原子指令(test_and_set、compare_and_swap),以及原子變數(Atomic Variable)。說明各原語解決的問題、運作機制、如何用於實作臨界區互斥,以及其固有的限制。
深入介紹系統呼叫的本質、API 抽象層的設計動機、系統呼叫介面的運作機制、三種參數傳遞方式,以及六大類系統呼叫(行程控制、檔案管理、裝置管理、資訊維護、通訊、保護)的完整解說。
介紹死結的定義、系統資源模型(Request/Use/Release 生命週期)、POSIX mutex 死結具體範例,以及 Livelock 與 Deadlock 的差異比較。
介紹 OS 附帶的七大類系統程式(系統工具)、從原始碼到執行的完整 Compile-Link-Load 流程(含 Relocatable Object、靜態連結與動態連結的差異、ELF/PE/Mach-O 格式),以及跨平台應用程式面臨的根本障礙與三種解決策略(直譯語言、虛擬機器/RTE、移植),最後說明 ABI 的概念。
從生產者-消費者問題出發,介紹競爭條件(Race Condition)的成因,定義臨界區問題(Critical-Section Problem)及其三大正確性需求,並詳細分析軟體解法 Peterson's Solution 的演算法設計、正確性證明,以及在現代架構下因指令重排(Instruction Reordering)而失效的根本原因。
介紹行程的建立與終止機制,包含 PID、行程樹、fork()/exec() 的運作原理、Zombie 與 Orphan 行程、Cascading Termination,以及 Android 行程重要性層次。
介紹行程為何需要合作、IPC 的兩種基本模型(共享記憶體與訊息傳遞)的差異與適用場景,以及以 Producer-Consumer Problem 為核心說明共享記憶體 IPC 的具體實作機制。
介紹訊息傳遞 IPC 的三個核心設計維度:命名(直接 vs 間接通訊、信箱機制)、同步(阻塞 vs 非阻塞、Rendezvous)、緩衝(零容量、有界、無界佇列),以及各種設計選擇如何影響行程間通訊的行為與程式設計模式。
介紹作業系統作為資源管理者的六大職責:Process 管理、記憶體管理、檔案系統管理、大容量儲存管理、快取管理,以及 I/O 系統管理。
介紹 Contiguous Memory Allocation 的基本模型、Relocation/Limit Register 的記憶體保護、Variable Partition、First-Fit/Best-Fit/Worst-Fit 配置策略,以及 External/Internal Fragmentation 與 Compaction。
介紹排程佇列(ready queue、wait queue)的資料結構、CPU 排程器的職責與執行頻率、Swapping 的概念,以及上下文切換(Context Switch)的完整機制與效能代價。
介紹進程的定義與記憶體佈局(text、data、heap、stack)、五種進程狀態與轉換關係、進程控制區塊(PCB)的欄位,以及執行緒的基本概念。
介紹作業系統在六種現代運算環境中的角色:傳統運算、行動運算、主從式運算、點對點運算、雲端運算,以及即時嵌入式系統。
深入介紹五種隱含式執行緒策略:Thread Pool、Fork-Join、OpenMP、Grand Central Dispatch(GCD)、Intel TBB。說明每種方法如何將執行緒建立與管理的責任從開發者轉移到執行期函式庫,解決多核程式設計的複雜性問題。
介紹電腦系統依處理器數量的三種架構分類:單處理器、多處理器(SMP、Multicore、NUMA),以及叢集式系統的組成與高可用性機制。
介紹電腦系統的基本架構、中斷機制的完整運作流程(Interrupt Vector、Raise/Catch/Dispatch/Clear)、儲存體層次結構,以及 DMA I/O 的運作方式。
介紹大型 logical address space 下 page table 過大的問題,以及 hierarchical paging、hashed page tables、inverted page tables 與 Oracle SPARC Solaris 的實作取捨。