| scaling | main question | resource allocation | ideal state | math model | main challenge |
|---|---|---|---|---|---|
| Strong Scaling | 「增加處理器能讓這件事快多少?」 | 總量固定,處理器越多,每個分到的越少 | \(Speedup = N\) (處理器數量) | Amdahl's Law \(Speedup = \frac{1}{s + \frac{1-s}{N}}\) |
Communication Overhead,導致效率邊際遞減 |
| Weak Scaling | 「增加處理器能讓我多做多少事?」 | 人均固定,處理器越多,總量隨之膨脹 | \(Efficiency = 100\%\) | Gustafson's Law \(speedup=s+(1-s) \times N\) |
Memory Bandwidth & Global Synchronization |
| 原因 | 說明 |
|---|---|
| 1️⃣ 管理方便 | 作業系統配置實體記憶體時以「頁 (page)」為最小單位。若每個頁表剛好佔一頁,則建立、釋放與置換都能以整頁為單位進行,管理簡單且不浪費空間。 |
| 2️⃣ 位址切割整齊 | 若每頁表剛好一頁,則「每層索引 bits」=log₂(頁內可放的表項數)。這讓虛擬位址可整齊分為: ‧ 第1層索引 bits ‧ 第2層索引 bits ‧ offset bits |
| 3️⃣ 查表邏輯簡化 | 每層頁表的每個表項剛好對應下一層page table的一個「整頁起始位址」。硬體 (MMU) 查表時不需考慮跨頁問題。 |
| 4️⃣ 對齊整潔 (alignment) | 所有page table都與實體記憶體的frame邊界對齊,運算中只需簡單位元偏移計算。 |
| 5️⃣ 效能與硬體實作簡化 | 若page table可跨頁,硬體必須處理跨page邊界,邏輯與記憶體取用會更複雜、速度更慢。 |
| 狀況 | 是否要查 Page Table(主記憶體) | 是否要取資料(主記憶體) | 總次數 |
|---|---|---|---|
| TLB hit + cache hit | ❌ | ❌ | 0 次主記憶體存取(全cache命中) |
| TLB hit + cache miss | ❌ | ✅ | 1 次(從 memory 取資料) |
| TLB miss + cache hit | ✅ | ❌ | 1 次(查 page table) |
| TLB miss + cache miss | ✅ | ✅ | 2 次(最糟情況) |
| 類型 | 觸發來源 | 性質 | 目的 |
|---|---|---|---|
| Interrupt(中斷) | 由 硬體裝置 或 外部事件 觸發 | 非同步 (asynchronous) | 告訴 CPU 某件外部事件需要立即處理,如鍵盤輸入、磁碟 I/O 完成 |
| Trap(陷阱) / System Call(系統呼叫) | 由 使用者程式 主動執行軟體指令觸發 | 同步 (synchronous) | 讓使用者程式請求作業系統服務(如開檔、寫檔、分配記憶體) |
Interrupt ──► 硬體事件觸發 → 進入核心處理 → 回到使用者程式
Trap ──► 軟體事件觸發 → 進入核心處理 → 回到使用者程式
└── System Call = 使用者主動呼叫作業系統服務的 Trap
1.事件發生 (trap or interrupt issued)
→ 當使用者程式執行異常、發出系統呼叫 (trap),或外部裝置產生中斷 (interrupt) 時,會觸發此流程。2.控制權轉移 (control transfer)
CPU 透過中斷向量表 (Interrupt Vector Table) 或陷阱向量表 (Trap Vector),跳轉到作業系統對應的中斷/陷阱服務常式 (Service Routine)。3.模式切換 (mode bit switch)
● CPU 將模式位元 (Mode Bit) 設為 Kernel Mode。4.執行服務程式 (Interrupt/Trap Service Routine)
● Service routine是作業系統的一部分。5.保存與恢復狀態 (Save and Restore Context)
● 核心會先儲存當前的 CPU 狀態(暫存器、程式計數器等),以便事件處理結束後能恢復原執行狀態。6.執行相應的服務或例外處理 (Service or Exception Handling)
● 若為系統呼叫 → 執行對應的核心服務。7.返回使用者程式 (Return to User Program)
● 處理完成後,控制權傳回被中斷或陷阱發生前的程式位置。1.使用者程式發出 Trap 指令(issue a trap)
→ 用來「呼叫 (invoke)」系統呼叫。2.控制權轉移 (control transfer)
CPU 透過 Interrupt Vector 或 System Call Vector,跳轉至作業系統對應的 Service Routine(服務常式)。3.模式切換 (mode bit switch)
● CPU 將 Mode Bit 設為 Kernel Mode。4.執行系統呼叫服務程式 (System Call Service Routine)
● Service routine 是作業系統的一部分。5.解析與檢查參數 (Parameter Passing)
● 系統呼叫參數 (system call parameters) 說明使用者想請求的服務。6.kernel檢查請求是否合法
● 若參數正確 → 執行請求的服務。7.完成服務後返回
● kernel完成系統呼叫的動作後, 將控制權 (control) 傳回到「系統呼叫指令的下一條指令」。| P | Q | Conjunction AND P∧Q | Disjunction OR P∨Q | Negation NOT ~P |
|---|---|---|---|---|
| T | T | T | T | F |
| T | F | F | T | F |
| F | T | F | T | T |
| F | F | F | F | T |
Minkowski distance:
Euclidean distance: (Minkowski distance → p is 2)
Manhattan distance: (Minkowski distance->p is 1)
Chebyshev distance: (Minkowski distance->p is ∞)
Hamming distance:
| 類型 | 核心概念 | 典型例子 | 優點 | 缺點 |
|---|---|---|---|---|
| DAC (Discretionary Access Control) | Owner decides | UNIX 檔案權限 | 易用 | 容易被濫用 |
| MAC (Mandatory Access Control) | 系統強制 policy | SELinux, Bell-LaPadula | 高安全 | 管理麻煩 |
| RBAC (Role-Based Access Control) | Role → Permission | 大企業角色管理 | 易管理 | 角色設計難 |
| Rule / Capability-Based AC | 持有能力或符合規則 | Process / App / Resource,Apple entitlements | 精確控制 | 規則複雜 |
| 類型 | 圖的性質 | 主要演算法 | 找到的東西 | 時間複雜度 |
|---|---|---|---|---|
| SCC(Strongly Connected Components) | 有向圖 (Directed Graph) | Kosaraju's Algorithm、Tarjan's SCC Algorithm | 強連通分量 | O(V + E) |
| BCC(Biconnected Components) | 無向圖 (Undirected Graph) | Tarjan's BCC Algorithm | 雙連通分量(邊或點) | O(V + E) |
| 優先順序 | 運算子 | 關聯性 | 說明 |
|---|---|---|---|
| 1 | () [] a->b a.b a++ a-- | 左至右 | 括號、陣列、成員存取、遞增、遞減 |
| 2 | !a、 ~a、 +a -a、 *a &a、 (type)a、 sizeof | 右至左 | 邏輯非、位元非、正負號、指標解參考/取址、型態轉換、sizeof |
| 3 | a*b a/b a%b | 左至右 | 乘法、除法、餘數 |
| 4 | a+b a-b | 左至右 | 加法、減法 |
| 5 | a<<b a>>b | 左至右 | 左移、右移 |
| 6 | a<b a<=b a>b a>=b | 左至右 | 小於、小於或等於、大於、大於或等於 |
| 7 | a==b a!=b | 左至右 | 等於、不等於 |
| 8 | a&b | 左至右 | bitwise AND |
| 9 | a^b | 左至右 | bitwise XOR |
| 10 | a|b | 左至右 | bitwise OR |
| 11 | a&&b | 左至右 | logical AND |
| 12 | a||b | 左至右 | logical OR |
| 13 | a ? b : c | 右至左 | 條件運算子 |
| 14 | a=b a+=b a-=b a*=b a/=b a%=b a&=b a^=b a|=b | 右至左 | 賦值、複合賦值 |
| 15 | a, b | 左至右 | 逗號運算子 |
#include <stdio.h>
int main() {
char s[] = "01234";
char *p = s;
printf("%c\n", *p++);
printf("%c\n", *++p);
printf("%c\n", *(++p));
printf("%c\n", *(p++));
printf("%c\n", (*p)++);
return 0;
}
output:
0
2
3
3
4
| 特性 | 觸發方式 | 安全性 | 典型範例 | 主要功能 |
|---|---|---|---|---|
| Promotion (提升) | 編譯器自動執行(Implicit) | 高(通常從小空間轉大空間,不遺失資料) | char \(\rightarrow\) int or float \(\rightarrow\) double | 確保算術運算能順利進行(對齊型別) |
| Cast (強制轉型) | 程式設計師手動撰寫 (Explicit) | 中/低(可能導致精度遺失、截斷或溢位) | (double)5/2 or (int)3.14 | 改變變數的解讀方式或強制改變運算行為 |