版本 d04e1d859607e7bbb2d95f59d0d2cc9e819eddeb
系統軟體課程進度與開放資源
- Instructor: Jim Huang (黃敬群)
<jserv.tw@gmail.com>
- Facebook 粉絲專頁 (不要擔心提了笨問題,這專門用來和學生互動,可預約一對一討論)
- 討論區: https://www.facebook.com/groups/system.software2018/
- 課程信箱:
<embedded.master2015@gmail.com>
作業系統設計與實作 (Spring 2018)
- 第 1 週 (Feb 27): 誠實面對自己
- 課程簡介和注意須知
- Bit-wise operations
- CS:APP 學習指引 (1)
- 歷屆修課學生心得: 張家榮, 陳品睿, 蕭奕凱
- GNU/Linux 開發工具共筆: 務必 自主 學習 Linux 操作, Git, HackMD, LaTeX 語法 (特別是數學式), GNU make, perf, gnuplot
- 作業 (截止日: Mar 12)
- phonebook, 因為自動飲料機而延畢的那一年 (記錄心得和啟發)
- 課後學習: 你所不知道的C語言:數值系統篇, 你所不知道的C語言:指標篇, 你所不知道的C語言:遞迴呼叫篇
- 課程基本資料表單
- Week1 隨堂測驗: 題目 / 作答表單
- 第 2 週 (Mar 6): 數值系統
- CS:APP 第 2
章重點提示和練習
- 冼鏡光教授的 使用浮點數最最基本的觀念
- Bitwise Algorithms, bit-reverse, multiplier
- Git commit message 撰寫和改進
- Week2 隨堂測驗: 題目 / 作答表單
- CS:APP 第 2
章重點提示和練習
- 第 3 週 (Mar 13): 數值運算
- 從根號 2 的運算談浮點數
- 對應 CS:APP 3/e 的 2.3.6 (Page 70-74), 2.4.5 (Page 85-87)
- Code Review Guidelines, Jonathan Maltz, Software Engineer at Yelp
- 你所不知道的C語言: linked
list 和非連續記憶體操作
- 千萬不要小看 Linux
核心的 linked list 實作 (不到 800 行),很多人下載 Linux
核心程式碼後,就急著閱讀
kernel/
和drivers/
目錄,沒多久就被各種「偉大」的程式碼嚇跑- 這些人不懂 C 語言和掌握 Linux 核心的設計概念
- 無法掌握關鍵資料結構,如 linked list
- 千萬不要小看 Linux
核心的 linked list 實作 (不到 800 行),很多人下載 Linux
核心程式碼後,就急著閱讀
- 作業: (截止日: Mar 27)
- Week3 隨堂測驗: 題目 / 作答表單
- 從根號 2 的運算談浮點數
- 第 4 週 (Mar 20): 協同開發和計算機結構
- 公告:
- Apr 3 配合校際活動週暫時實體授課,當天用 YouTube 補課,當週也會有對應的作業,請留意
- 每週二 19:30 安排在資訊系舊館一樓 4217 室 (系圖書館) 一對一討論
- Video: George Dyson: The birth of the computer (有中文字幕,但品質不佳,之後會重新翻譯)
- Git commits 案例探討: dcurl // 趣聞
- CS:APP 第 3 章重點提示
- CS:APP 第 4 章重點提示
- 回顧 Homework1 和 Homework2
- 作業: (截止日: Apr 2)
- Week4 隨堂測驗: 題目 / 作答表單
- 公告:
- 第 5 週 (Mar 27): 計算機結構
- CS:APP 第 4 章重點提示
- 課後預習: 手機裡頭的 ARM 處理器 的「系列講座導論」、「架構和指令集」和「基礎指令和開發環境」
- Week5 隨堂測驗:
- 第 6 周 (Apr 3): 停課一次 + 自學
- 第 7 週 (Apr 10): 學習檢討
- 第 8 週 (Apr 17): Memory hierarchy
- 淺談 Microkernel 設計和真實世界中的應用
- Effect of CPU caches
- CPU caches by Ulrich
Drepper (前任 GNU glibc 維護人)
- 「有沒有 glibc 的八卦?」: 比較 Linus Torvalds (Linux 核心) 和 Ulrich Drepper (glibc) 管理風格的差異,不能把開放原始碼專案當作「單一文化」看待
- software pipelining, 現代處理器設計: Cache 原理和實際影響
- Week8 隨堂測驗: 題目 / 作答表單
- 填寫 分組表
- 第 9 週 (Apr 24): Memory hierarchy + Virtual Memory
- CPU caches by Ulrich Drepper
- CS:APP 第 6 章重點提示
- intrusive vs. non-intrusive data structure
- Week9 隨堂測驗: 題目 / 作答表單
進階電腦系統理論與實作 (Fall 2017)
第 1 週 (Sep 22): 誠實面對自己
- 課程簡介和注意須知
- 注意: 第 2 週安排測驗,請準時參加。參考 春季班考題
- 近期活動: 矽谷工作經驗談, 協助準備研究所推薦甄試和撰寫推薦信
- 21 世紀的系統軟體: 「需求」層次: 正確 → 安全 → 可讀 → 優雅 → 利他; Benchmark / Profiling; 運算模式的巨變; Deep Learning 背後的資訊建設
- 軟體缺失導致的危害
- GNU/Linux 開發工具共筆: 務必 自主 學習 Linux 操作, Git, HackMD, LaTeX 語法 (特別是數學式), GNU make, perf, gnuplot
- 重新理解數值: 2 進位, 3
進位 (?!), 數值表達方式和阿貝爾群, integer overflow; 邏輯和算術的差異;
運用 bit-wise operator; 算術和數位邏輯的關聯
- 對應 CS:APP3e 的第 2 章: 2.3 整數運算, 2.4.2 IEEE 浮點數表示, 2.4.5 浮點運算
- Programming Small: 對應
CS:APP3e 的第 5 章: 5.13
效能提高技術
- 案例探討: bit-reverse
- 案例探討: multiplier
- 2017 年秋季作業說明
- 選修/旁聽的學生請協助填寫 課程表單
- 作業 (截止日: Oct 8)
- 歷屆修課學生心得: 張家榮, 陳品睿, 蕭奕凱
第 2 週 (Sep 29): 期初測驗
- 時間: 09:10-14:10 (可中途離席,不要在電腦教室飲食)
- 總分 300 分,全部是程式設計題目 (主要用 C 語言),只要能得 60 分以上,就具備本學期課程所需要的基礎
- 期初測驗試題
第 3 週 (Oct 6): 計算機組織與結構
- Computer Architecture (NOTE)
- Modern Microprocessors (A
90-Minute Guide!) 重點提示和解說
- 錄影: 現代處理器原理和關鍵特徵 (上) / 現代處理器原理和關鍵特徵 (下)
- 對應 CS:APP3e 的第 4 章
- 作業 (截止日: Oct 16)
第 4 週 (Oct 13): Code Review
- Homework 1 講評
- 作業: introspect (截止日: Oct 26)
第 5 週 (Oct 20): Code Review
第 6 週 (Oct 27): 現代處理器設計
第 7 週 (Nov 3): Blockchain & Sandboxing
- Don
Tapscott 闡述為何區塊鏈是改變現有生態的關鍵技術 [有繁體中文字幕]
- Don Tapscott 著有 “Blockchain Revolution : How the Technology Behind Bitcon Is Changing Money, Business and the World” 一書,在這個時間點,區塊鏈 + 數位內容 + 共享經濟平台疊合的效應不容小覷,革命性地跳脫中間抽成和交易成本
- How Merkle trees enable the decentralized Web
- 虛擬機器設計與實作
- 第 2 週作業回顧
- Don
Tapscott 闡述為何區塊鏈是改變現有生態的關鍵技術 [有繁體中文字幕]
第 8 週 (Nov 10): Sandboxing & Formal Verification
- 注意: 請在 11:10AM 前完成 分組登錄
- 若你沒打算退選,請在 11 月 15 日前發信到
<jserv.tw@gmail.com>
,標題是[sysprog] 你的姓名
(中間有空格),說明以下:- 自我評價前 8 週的學習狀況
- 導致學習進度落後的因素
- 預計補救的措施
- 隔離執行環境的建構與應用:
加密貨幣領域的系統軟體
- Trusted Execution Environment (TEE)
- Trusted Platform Module (TPM)
- Moxie 處理器架構
- Ledger 公司推出 BOLOS (Blockchain Open Ledger Operating System) 作為區塊鏈處理的作業系統
- Ledger 公司透過特製的 Moxie 虛擬機器,作為 TEE 的基礎
- Intel 的 Software Guard Extensions (SGX)
- 採用 Moxie 架構一來確保極小的處理器和 ISA 實作,二來又保證 GNU Toolchain 的支援
- 使用 GNU profiler 来提高程式碼執行速度
- 支援遠端除錯
- 形式化驗證
- 第 6 週作業回顧
- 作業 (截止日: Nov 23)
第 9 週 (Nov 17): CS:APP
第 10 週 (Nov 24)
- 近期活動:半導體製造的第一手資訊
- nand2tetris: 運用數位邏輯的概念,使用基本閘組出一台電腦
- CS:APP 學習指引 (1)
- 第 8 週作業回顧
第 11 週 (Dec 1): SPS IPC Drives 展覽,停課一次
第 12 週 (Dec 8): 分組報告
第 13 週 (Dec 15)
第 14 週 (Dec 22):
- 荷蘭能源公司 ElaadNL 發布使用 IOTA 的動畫,很精緻又淺顯地探討分散式帳本技術在智慧充電的關鍵,特別是可靠的結算
第 15 週 (Dec 29):
- Fog computing & P2P CDN
- Web Ledger Protocol: W3C 的草案,DLT 大範圍的落實
- 密碼貨幣與區塊鏈原理 / 東京電力公司高層參訪成大 開啟交流第一步
- 分組報告
- CS:APP Page 726 : 為何以下程式碼不能輸出
Hello, world!
呢?
void *thread(void *vargp);
int main() {
pthread_t tid;
pthread_create(&tid, NULL, thread, NULL);
exit(0);
}
void *thread(void *vargp) {
sleep(1);
printf("Hello, world!\n");
return NULL;
}
- 第 16 週 (Jan 5):
- Virtual Memory: Making Virtual Memory Fast, TLB example
- Kernel-memory-leaking
Intel processor design flaw forces Linux, Windows redesign
- Reading privileged memory with a side-channel, Project Zero, Google Inc.
- KASLR is Dead: Long Live KASLR, TU Graz
- Vulnerability of Speculative Processors to Cache Timing Side-Channel Mechanism, Arm
- Twitter 上的討論
- Reactions to Meltdown and Spectre exploits
- “Exploiting Speculative Execution via Javascript” is possibly one of the most terrifying lines of text I’ve ever seen, especially since this implies DUMPING KERNEL MEMORY from JAVASCRIPT.
- P5 microarchitecture. That means ORIGINAL PENTIUM, not PENTIUM PRO, which is P6. Pentium II and later are all P6 CPUs, and are vulnerable.
- Using #Meltdown to steal passwords in real time
- not an Intel problem but an entire chipmaker design problem
- 第 17 週 (Jan 12):
- Meltdown 的攻擊方式, Meltdown 與 Spectre 都有用到的 FLUSH+RELOAD
- Why Raspberry Pi isn’t Vulnerable to Spectre or Meldown
- 延伸閱讀:
- The Last MileAn Empirical Study of Timing Channels on seL4
- Speculative execution considered harmful in 1995: “Prefetching may fetch otherwise inaccesible instructions in Virtual 8086 mode.”: source
- Quiz: Bubble sort in ARM assembly
作業系統設計與實作 (Spring 2017)
- 第 1 週 (Feb 21): 誠實面對自己:不是這門課程很操,是你過去欺騙了自己
(第 1
週課程錄影)
- 課程簡介和注意須知
- 21 世紀的系統軟體: 「需求」層次: 正確 → 安全 → 可讀 → 優雅 → 利他; Benchmark / Profiling; 運算模式的巨變; Deep Learning 背後的資訊建設: GPU; 軟體品質和安全議題
- 重新理解數值: integer overflow; 邏輯和算術的差異; 運用 bit-wise operator; Count Leading Zero
- Programming Small
- 2017 年春季作業說明
- 課程表單 / 推薦閱讀: 因為自動飲料機而延畢的那一年
- 期初測驗
- [作業](https://hackmd.io/s/Hy