版本 1083804005e8f2323c0c943e52a232237af6c35f
系統軟體課程進度與開放資源
- 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
- 課後學習: 你所不知道的C語言:數值系統篇
- 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 的運算談浮點數
- 你所不知道的C語言: linked
list 和非連續記憶體操作
- 千萬不要小看 Linux
核心的 linked list 實作 (不到 800 行),很多人下載 Linux
核心程式碼後,就急著閱讀
kernel/
和drivers/
目錄,沒多久就被各種「偉大」的程式碼嚇跑- 這些人不懂 C 語言和掌握 Linux 核心的設計概念
- 無法掌握關鍵資料結構,如 linked list
- 千萬不要小看 Linux
核心的 linked list 實作 (不到 800 行),很多人下載 Linux
核心程式碼後,就急著閱讀
- Week3 隨堂測驗: 題目 / 作答表單
進階電腦系統理論與實作 (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 年春季作業說明
- 課程表單 / 推薦閱讀: 因為自動飲料機而延畢的那一年
- 期初測驗
- 作業 (截止日: Mar 4)
第 2 週 (Feb 28): 重新理解電腦結構
- Computer Architecture (NOTE)
- Modern Microprocessors A 90 Minute Guide! (必讀)
- 作業 (截止日: Mar 11)
第 3 週 (Mar 7): 效能改善,從掌握計算機組織開始
第 4 周 (Mar 14): 開發工具和並行程式設計
- 近期活動: 前往新加坡工作的第一手資訊, 手機裡的 ARM 處理器: 系列講座導論
- C 語言演化背景和編譯器原理
- 第 1 週作業回顧
- Toward Concurrency
- 測驗 / 測驗上傳區
- 作業 (截止日: Mar 27)
第 5 周 (Mar 21): 並行程式設計
第 6 週 (3 月 28 日): Memory Model and Consistency
第 7 週 (4 月 4 日): 掃墓,停課一次
第 8 週 (4 月 11 日)
第 9 週 (4 月 18 日)
第 10 週 (4 月 25 日)
第 11 週 (5 月 2 日)
第 12 週 (5 月 9 日)
第 13 週 (5 月 16 日)
第 14 週 (5 月 23 日)
第 15 週 (5 月 30 日): 端午連續假期,停課
第 16 週 (6 月 6 日)
- 新聞: 成大、永豐銀行 成立Atelier Future未來智慧生活工場
- Blockchain: 動畫, The Blockchain and Us, 技術簡介, 市場分析
- 2017 年春季班第二次分組表
進階電腦系統理論與實作 (Fall 2016)
第 1 週 (Sep 23): 誠實面對自己:不是這門課程很操,是你過去欺騙了自己
- 課程簡介和注意須知
- 21 世紀的系統軟體: 「需求」層次: 正確 → 安全 → 可讀 → 優雅 → 利他; Benchmark / Profiling; 運算模式的巨變; Deep Learning 背後的資訊建設: GPU; 軟體品質和安全議題
- 你所不知道的 C 語言: 本週進度為「指標篇」和「物件導向程式設計篇」
- 重新理解數值: integer overflow; 邏輯和算術的差異; 運用 bit-wise operator; Count Leading Zero
- Programming Small: 在小處下功夫,不放棄整體改善的機會
- 本學期作業說明
- 隨堂測驗
- 作業 (截止日: Sep 29)
- phonebook, raytracing, compute-pi, clz
- W1-QA (只有選修課程的學生需要完成這項)
第 2 週 (Sep 30): 並行 + 演算法分析
- 第 1 週作業回顧
- concurrency: Concurrency (並行) vs. Parallelism (平行); POSIX Threads; Thread Pool; Lock-free Thread Pool; 對 Linked-List 排序; Producer-Consumer Problem
- Algorithm Complexity Analysis
- 隨堂測驗: 題目: 將 Linked List Bubble Sort 裡頭的排序演算法從 recursive bubble sort 更換為 recursive merge sort
- 作業: (截止日: 08:00AM
Oct 7)
- introspect, phonebook-concurrent
- W2-QA (只有選修課程的學生需要完成這項)
第 3 週 (Oct 7): 重新理解電腦結構
- 第 2 週作業回顧
- Computer Architecture (NOTE)
- Modern Microprocessors A 90 Minute Guide! (必讀)
- SIMD Programming Introduction
- 在計算機裡頭實踐演算法
- 作業: (截止日: 08:00AM
Oct 14)
- mergesort-concurrent, software-pipelining
- W3-QA (只有選修課程的學生需要完成這項)
第 4 週 (Oct 14): 作業系統概念的實踐
- 2016 年秋季班分組表(第一次)
- 灰姑娘真能穿玻璃鞋跳舞?工程師提出解答
- 1697 年《鵝媽媽的故事》和 1812 年《格林童話》都提到灰姑娘,而灰姑娘穿什麼材質的玻璃鞋,能夠承受她的體重,讓她舒適地走路和跳舞?
- 第 3 週作業回顧
- Operating System Concepts
- 案例探討: 強化 server-framework 效能
- 隨堂測驗: 題目
- 作業: (截止日: Oct 20)
- server-framework, 回顧既有的作業
第 5 週 (Oct 21): 為什麼你該理解編譯器
- 淺談 Microkernel 設計和真實世界中的應用
- 回顧 SIMD 和計算機組織 + 案例分析:轉置矩陣
- 編譯器和最佳化原理
- 動態連結器
- 作業: (截止日: Oct 27; 下方擇一,並且 Week4 的專題要繼續作)
第 6 週 (Oct 28): 你所不知道的記憶體
- 回顧第一次分組成果
- 2016 年秋季班分組表(第二次)
- 羅輯思維: 怎樣成為一個高手: 從 12:08 開始
- Memory Allocation
- How a Rogue Optimization Breaks C11 Memory Consistency
- DTrace for Linux 2016: BPF tracing 是 Linux 效能分析最後一塊拼圖
第 7 週 (Nov 4) 數學總複習:線性代數, 離散數學, 機率統計
第 8 週 (Nov 11): 校慶停課
第 9 週 (Nov 18) 第二次分組成果報告