系統軟體課程進度與開放資源
- Instructor: Jim Huang (黃敬群)
<jserv.tw@gmail.com>
- 課程信箱:
<embedded.master2015@gmail.com>
進階電腦系統理論與實作 (Fall 2019)
- 第 1 週 (Sep 12): 誠實面對自己
- 課程簡介和注意須知
- 完整解說錄影 (3 小時)
- 每週均安排隨堂測驗,採計其中最高分的 8 次
- 學期評分方式: 隨堂測驗 (25%) + 個人作業 (25%) + 分組報告及專題 (25%) + 自我評分 (25%)
- 歷屆修課學生心得: 張家榮, 陳品睿, 蕭奕凱, 方鈺學
- 分組報告示範: ARM-Linux, Xvisor
- GNU/Linux 開發工具共筆: 務必 自主 學習 Linux 操作, Git, HackMD, LaTeX 語法 (特別是數學式), GNU make, perf, gnuplot
- 透過 Computer Systems: A Programmer’s Perspective 學習系統軟體: 本學期教科書 (第 2 週可向助教購書)
- 軟體缺失導致的危害
- 1970 年代推出的首款廣體民航客機波音 747 軟體由大約 40 萬行程式碼構成,而 2011 年引進的波音 787 的軟體規模則是波音 747 的 16 倍,約 650 萬行程式碼。換言之,你我的性命緊繫於一系列極為複雜的軟體系統之中,能不花點時間了解嗎?
- 軟體開發的安全性設計和測試驗證應獲得更高的重視
- 解讀計算機編碼
- 人們對數學的加減運算可輕易在腦中辨識符號並理解其結果,但電腦做任何事都受限於實體資料儲存及操作方式,換言之,電腦硬體實際只認得 0 和 1,卻不知道符號 + 和 - 在數學及應用場域的意義,於是工程人員引入「補數」以表達人們認知上的正負數
- 您有沒有想過,為何「二補數」(2’s complement) 被電腦廣泛採用呢?背後的設計考量是什麼?本文嘗試從數學觀點去解讀編碼背後的原理
- 圖解傅立葉分析
- 傅立葉 (Fourier) 分析不僅是個數學工具,更是種徹底顛覆一個人以前世界觀的思維模式
- 不幸的是,傅立葉分析的公式看起來太復雜,以至於很多人囫圇吞棗,並從此對它深惡痛絕
- 本文在不需要特別熟悉數學工具的狀況下,讓讀者體會到藉由傅立葉分析看到世界的另一個樣貌
- Bit-wise operations / bit-wise 的應用
- bit-field
- 為什麼要深入學習 C 語言?
- C 語言發明者 Dennis M. Ritchie 說:「C 很彆扭又缺陷重重,卻異常成功。固然有歷史的巧合推波助瀾,可也的確是因為它能滿足於系統軟體實作的程式語言期待:既有相當的效率來取代組合語言,又可充分達到抽象且流暢,能用於描述在多樣環境的演算法。」
- C 語言:記憶體管理、對齊及硬體特性
- C 語言: 數值系統
- 基於 C 語言標準研究與系統程式安全議題
- 藉由研讀漏洞程式碼及 C 語言標準,討論系統程式的安全議題
- 透過除錯器追蹤程式碼實際運行的狀況,了解其運作原理;
- 取材自 dangling pointer, CWE-416 Use After Free, CVE-2017-16943 以及 integer overflow 的議題;
- C 語言: 指標
- 解讀 C 語言規格書的 “object”
- 重讀 “type” 的定義,並且理解 incomplete type 的意義
- 三位一體: Array, function, pointer types: 都歸類於 derived declarator types
void *
的設計考量- C-style string
- What comes after Moore’s Law?: 隨著 Moore’s Law 時代的結束, 通用化硬體效能不再如以往快速進步, 因此軟硬體也必須因應如此的變化, 這篇點出 4 個面向:
- Ephemeral applications (短暫的軟體): 這點是以企業軟體來談,許多組織的觀點認為軟體壽命比運作其的硬體來得長久。在許多大企業依然如此,然而後續將大量導入 mobile, web, analytics 與其他軟體,更趨向快速轉變以符合客戶與市場所需;
- New workloads, such as machine learning: 呼應諸多計算架構大師所說的 Domain-Specific Architecture (DSA);
- Cloud platforms: 對於雲端應用而言,使用者不會在意它是在哪種處理器與加速器上運作的;
- Open source software: 主要在於特定的軟體開發商因人力與成本而減少支援硬體的範圍,開放原始碼軟體這時能夠作為考慮方案。儘管無法消弭對硬體的相依性,但不像軟體開發商對硬體平台支援或不支援的要求;
- The Era of General Purpose Computers is Ending: 過往是研究員和從業者就設計瓶頸與發熱問題來說明困境,這篇則由製程發展與已發生的現象,討論以下變遷:
- 能追上最先進製程的晶圓廠商越來越少
- TOP 500 中使用特殊晶片比例不斷上升
- 特殊化處理器各方面變得更為經濟實惠
- 課程基本資料表單: 務必填寫,以接收課程資訊
- Week1 隨堂測驗: 題目/作答表單
- 作業
- 課程簡介和注意須知
- 第 2 週 (Sep 19): 課堂測驗
- 第 3 週 (Sep 26): C 語言程式設計
- 第 4 週 (Oct 3): code review
- 公告
- 10 月 10 日 15:10-23:10 安排在家測驗,請留意助教的信件通知以得知進行方式;
- 10 月 17 日安排課堂 code review,請及早更新 Homework 3 / Homework 4 共筆和程式碼;
- 回顧 Homework 1 / 2
- CS:APP 第 2 章重點提示和練習
- 作業
- Week 4 隨堂測驗:
- 公告
- 第 5 週 (Oct 10): 停課一次,在家測驗
- 第 6 週 (Oct 17): Code Review
- Making C Less Dangerous in the Linux Kernel / 錄影
- Linux 核心中各式 C 語言程式設計的安全和正確議題
- Variable Length Arrays are bad and slow
- Explicit switch case fall-through
- Always-initialized automatic variables
- Arithmetic overflow detection
- Hope for bounds checking
- Control Flow Integrity: forward edges
- Control Flow Integrity: backward edges
- 也提供了 gcc/clang 相關的編譯參數
- 解說1, 解說2
- 回顧 Homework 1 / 2
- 回顧 Homework 3 / 4
- Making C Less Dangerous in the Linux Kernel / 錄影
- 第 7 週 (Oct 24): 機器內部表示法
- CS:APP 第 2 章重點提示和練習
- CS:APP 第 3 章重點提示和練習
- 從餘數運算到 RSA 加密演算
- 隱藏在字典裡的數學
- 回顧 Homework 3 / 4
- C 語言: 未定義行為: C 語言最初為了開發 UNIX 和系統軟體而生,本質是低階的程式語言,在語言規範層級存在 undefined behavior,可允許編譯器引入更多最佳化
- C 語言: 編譯器和最佳化原理
- C 語言: 連結器與程式行為
- C 語言: 動態連結器
- C 語言: 執行階段程式庫 (CRT)
- C 編譯器原理和案例分析
- C 語言: Stream I/O, EOF 和例外處理
- 作業
- Week 7 隨堂測驗:
- 第 8 週 (Oct 31): 程式碼最佳化
- Snap: a Microkernel Approach to Host Networking
- 來自 Google 的研究成果,發佈於 SOSP 2019 / Hacker News 討論
- Google’s user land networking system achieves “over 3x Gbps/core improvement for RPC workloads, RDMA-like perf of up to 5M IOPS/- core.”
- 淺談 Microkernel 設計和真實世界中的應用
- 為何你要掌握數學?即使 Linux 核心內部也大量可見:
- CS:APP 第 5 章重點提示和練習
- CS:APP 第 4 章重點提示
- 回顧 Homework 3 / 4
- Week 8 隨堂測驗:
- Snap: a Microkernel Approach to Host Networking
- 第 9 週 (Nov 7): Computer Architecture
- 人工智慧涉及大量運算,和底層計算機結構及數值表示法高度相關: Making floating point math highly efficient for AI hardware, bfloat16 floating-point format
- CS:APP 第 4 章重點提示和練習
- CS:APP 第 5 章重點提示和練習
- Week 9 隨堂測驗:
- 第 10 週 (Nov 14): Memory Hierarchy
- 第 11 週 (Nov 21): Virtual Memory
- 佳句偶得:「寫程式就可以讓機器做事,當你會使用機器的時候,你就不用把人當機器用。但學校偏偏是個把學生訓練成機器的地方。」(出處)
- 最佳化來自對系統的掌握
- Clang-format tanks performance
- Slow:
C #include <algorithm> #include <ctype.h>
- Fast:
C #include <ctype.h> #include <algorithm>
- Slow:
- Performance speed limits
- Beating up on qsort
- Clang-format tanks performance
- CS:APP 第 9 章重點提示
- Week 11 隨堂測驗:
- 分組表: 請在 12 月 3 日前執行選定的任務
- 第 12 週 (Nov 28): 記憶體管理
- 第 13 週 (Dec 5): 重新探討 Process
- 5G 晶片大廠新品對決
- 有好規格就有話語權
- 「高通推出最新旗艦款處理器 S865 晶片需外掛數據晶片,整套開出 120-150 美元,符合市場價格,但今年特別的是,針對中高階的 5G 單晶片,聯發科天璣 1000採用台積電 7 奈米製程,以無敵貴的 75 美元至 80 美元,硬是比高通 5G S765 70 美元還來的高」
- Linux: 不僅是個執行單元的 Process
- Linux: 不只挑選任務的排程器
- UNIX 作業系統裡頭 fork/exec 的前世今生
- Malloc Bootcamp
- Week 13 隨堂測驗:
- 5G 晶片大廠新品對決
- 第 14 週 (Dec 12): 數學基礎 + 分組報告重點提示
- 2018 年 11 月 16 日新版國際單位制通過,新的公斤定義將改以物理學的普朗克常數為標準 (WTF?!)
- 世界上所有的測量結果都可以追溯到「國際單位制」(Système International d’Unités;SI Units)
- 國際單位制以七個基本單位為基礎,並由此推導出各種可相互換算的測量單位。多年來,測量的定義 —— 安培(ampere)、燭光(candela)、克耳文(kelvin)、公斤(kilogram)、公尺(meter)、莫耳(mole)以及秒(second) —— 都已重新定義
- 質量測量的標準源於存放在法國巴黎近郊國際度量衡局的單一物件 —— 國際公斤原器 (IPK),自 1884 年被鑄造成為公斤的標準以來一直存放在此,有什麼問題呢?
- 根據近年的量測顯示,IPK 重量已減少約 50 微克
- 經過全球國家度量機構數十年的討論和研究,決定捨棄實體的 IPK,改以普朗克常數重新定義公斤單位,其定義比 IPK 至少穩定 100 萬倍
- video: 公斤是如何重新定義?
- 目前的公斤質量是指以地心引力施加特定的力,修訂後的定義改用電磁力取代機械力進行測量
- 未來改以基布爾秤(Kibble balance)測量,後者以電磁力精準量測物體質量,可測量出多少電流產生的電磁力,才等同於作用在給定質量上的力。
- Week9 提過碎形,現在來思考 希爾伯特曲線與豪斯多夫維度
- 分組報告重點提示
- Linked list comparison
# Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz, 24 cores list : 0.534s, speedup 1.00 array list (4) : 0.293s, speedup 1.82 array list (8) : 0.160s, speedup 3.33 SIMD array list (4) : 0.263s, speedup 2.03 SIMD array list (8) : 0.140s, speedup 3.80
- 2018 年 11 月 16 日新版國際單位制通過,新的公斤定義將改以物理學的普朗克常數為標準 (WTF?!)
- 第 15 週 (Dec 19): I/O 和開發典範
- CS:APP 第 8 章重點提示: C 語言: Stream I/O, EOF 和例外處理
- CS:APP 第 10 章重點提示
- Linux: 中斷處理和現代架構考量
- C 語言: 物件導向程式設計
- Functional Programming 風格的 C 語言實作
- 是種 programming paradigm (開發典範),不是 design pattern 也不是 framework,更不是 language。簡單來說,FP 是種以數學函數為中心的「思考方式」與「程式風格」;
- 透過 C 語言程式提供若干案例,如列舉數值、(不需要動態配置記憶體的) 反轉 linked list 元素、對 Linked List 元素進行合併排序;
- An Introduction to Cache-Oblivious Data Structures
- 「自動快取資料結構」,特性是無視硬體特定的快取大小,可能達到接近最優化快取的效能;
- 在現代 CPU 多層多種大小的快取架構下,它的理論宣稱其能自動優化在所有層的快取的存儲效率。傳統上電腦科學做偏理論的不太重視實作上的效能,而做實作或硬體優化的則不太重視理論分析。這個學門卻是橫跨了相當理論的演算法分析(需要相當多的進階數學工具),以及相當低階的硬體效能理解;
- 影片: Memory Hierarchy Models
- Google Research 強者的心得: 關於變強這檔事(九)
- Skip List: 置放大量數字並進行排序的資料結構。不用樹狀結構,而改用高度不同的 List 來連接資料。資料結構在概念上可以表示成 Left Child-Right Sibling Binary Tree 的模式。是 Cache-oblivious Algorithm 的經典範例,時間複雜度與空間複雜度與 Binary Search Tree 皆相同,但是實際運作效率比 Binary Search Tree 還要好。
- 第 16 週 (Dec 26): Networking
- CS:APP 第 11 章重點提示
- 分組表
- Week 16 隨堂測驗:
- 第 17 週 (Jan 2):
- CS:APP 第 11 章重點提示
- Xor Filters: Faster and Smaller Than Bloom Filters
- 應用案例: 你可能有個希望屏蔽的 Web 地址列表,當有人輸入新的網址時,你可能需要檢查一下它是否位列你的黑名單之中。或者,也許你有份包含大量已用過密碼的清單,而你希望核對建議的新密碼是否屬於此洩露密碼之列;
- xf8: 用 Ubuntu Linux 系統內的
/usr/share/dict/american-english
來測試,後者約有 10 萬筆紀錄,透過 8-bit Xor Filter 建立的表格約佔 123 KB
- Toward Concurrency
- Linux: 多核處理器和 spinlock, 淺談同步機制, RCU 同步機制
進階電腦系統理論與實作 (Fall 2018)
- 第 1 週 (Sep 14): 誠實面對自己
- 課程簡介和注意須知
- 注意: 每週均安排測驗,取出其中最高分的 6 次採計
- 歷屆修課學生心得: 張家榮, 陳品睿, 蕭奕凱
- 21 世紀的系統軟體: 「需求」層次: 正確 → 安全 → 可讀 → 優雅 → 利他; Benchmark / Profiling; 運算模式的巨變; Deep Learning 背後的資訊建設
- 軟體缺失導致的危害
- GNU/Linux 開發工具共筆: 務必 自主 學習 Linux 操作, Git, HackMD, LaTeX 語法 (特別是數學式), GNU make, perf, gnuplot
- 透過 Computer Systems: A Programmer’s Perspective 學習系統軟體
- Bit-wise operations
- 作業 (截止日: Sep 25)
- 雖然不用繳交程式碼,但有大量需要細讀的材料,請務必投入超過 35 小時
- 課程基本資料表單 務必填寫,以接收課程資訊
- Week1 隨堂測驗: 題目 / 作答表單
- 第 2 週 (Sep 21): C 程式設計和協作
- linked list 題目分析
- bit-field
- 從 C 語言規格看資訊安全漏洞
- Git commit message 撰寫和改進
- 作業 (截止日: Oct 7)
- Week2 隨堂測驗: 題目
- 第 3 週 (Sep 28): C 程式設計效能
- 以位元駕馭能量
- 對 Linked List 進行氣泡排序
- Count Leading Zero (clz) 的實作
- C 語言:記憶體管理、對齊及硬體特性
- 課後閱讀: What comes after Moore’s Law?: 隨著 Moore’s Law 時代的結束, 通用化硬體效能不再如以往快速進步, 因此軟硬體也必須因應如此的變化, 這篇點出 4 個面向:
- Ephemeral applications (短暫的軟體): 這點是以企業軟體來談,許多組織的觀點認為軟體壽命比運作其的硬體來得長久。在許多大企業依然如此,然而後續將大量導入 mobile, web, analytics 與其他軟體,更趨向快速轉變以符合客戶與市場所需;
- New workloads, such as machine learning: 呼應諸多計算架構大師所說的 Domain-Specific Architecture (DSA);
- Cloud platforms: 對於雲端應用而言,使用者不會在意它是在哪種處理器與加速器上運作的;
- Open source software: 主要在於特定的軟體開發商因人力與成本而減少支援硬體的範圍,開放原始碼軟體這時能夠作為考慮方案。儘管無法消弭對硬體的相依性,但不像軟體開發商對硬體平台支援或不支援的要求;
- 作業 (截止日: Oct 17)
- Week3 隨堂測驗: 題目 / 作答表單
- 第 4 週 (Oct 5): code review
- 第 5 週 (Oct 12): CS:APP
- CS:APP 第 2 章重點提示和練習
- 基於 C 語言標準研究與系統程式安全議題
- Week5 隨堂測驗: 題目 / 作答表單
- 第 6 週 (Oct 19): Code Review
- CS:APP 第 2 章重點提示和練習
- 解讀計算機編碼
- 從餘數運算到 RSA 加密演算
- Week6 隨堂測驗: 題目 / 作答表單
- 作業 (截止日: Oct 31)
- 第 7 週 (Oct 26): 測驗 + 分組
- 第 8 週 (Nov 2): 程式碼最佳化
- 為何你要掌握數學?即使 Linux 核心內部也大量可見: 從 CPU cache 一致性的角度看 Linux spinlock 的 non-scalable
- CS:APP 第 5 章重點提示和練習
- CS:APP 第 4 章重點提示
- 任務分配: 分組表
- 第 9 週 (Nov 9): Computer Architecture
- 人工智慧涉及大量運算,和底層計算機結構及數值表示法高度相關: Making floating point math highly efficient for AI hardware, bfloat16 floating-point format
- CS:APP 第 5 章重點提示和練習
- CS:APP 第 4 章重點提示和練習
- Week9 隨堂測驗(上): 題目 / 作答表單
- 第 10 週 (Nov 16): Computer Architecture
- CS:APP 第 4 章重點提示和練習
- Week9 隨堂測驗(中): 題目 / 作答表單
- Week9 隨堂測驗(下): 題目 / 作答表單
- 第 11 週 (Nov 23): 分組討論
- 第 12 週 (Nov 30): Machine Language
- CS:APP 第 3 章重點提示和練習
- 分組討論
- Week12 隨堂測驗:題目 / 作答表單
- 第 13 週 (Dec 7): Memory Hierarchy
- CS:APP 第 6 章重點提示
- Week13 隨堂測驗:題目 / 作答表單
- 第 14 週 (Dec 14): Memory Hierarchy
- 2018 年 11 月 16 日新版國際單位制通過,新的公斤定義將改以物理學的普朗克常數為標準 (WTF?!)
- 世界上所有的測量結果都可以追溯到「國際單位制」(Système International d’Unités;SI Units)
- 國際單位制以七個基本單位為基礎,並由此推導出各種可相互換算的測量單位。多年來,測量的定義 —— 安培(ampere)、燭光(candela)、克耳文(kelvin)、公斤(kilogram)、公尺(meter)、莫耳(mole)以及秒(second) —— 都已重新定義
- 質量測量的標準源於存放在法國巴黎近郊國際度量衡局的單一物件 —— 國際公斤原器 (IPK),自 1884 年被鑄造成為公斤的標準以來一直存放在此,有什麼問題呢?
- 根據近年的量測顯示,IPK 重量已減少約 50 微克
- 經過全球國家度量機構數十年的討論和研究,決定捨棄實體的 IPK,改以普朗克常數重新定義公斤單位,其定義比 IPK 至少穩定 100 萬倍
- video: 公斤是如何重新定義?
- 目前的公斤質量是指以地心引力施加特定的力,修訂後的定義改用電磁力取代機械力進行測量
- 未來改以基布爾秤(Kibble balance)測量,後者以電磁力精準量測物體質量,可測量出多少電流產生的電磁力,才等同於作用在給定質量上的力。
- CS:APP 第 6 章重點提示
- 分組討論
- 2018 年 11 月 16 日新版國際單位制通過,新的公斤定義將改以物理學的普朗克常數為標準 (WTF?!)
- 第 15 週 (Dec 21): Virtual Memory
- CS:APP 第 9 章重點提示
- Week15 隨堂測驗: 題目 / 作答表單
- 第 16 週 (Dec 28): Virtual Memory + 傅立葉分析
- 公告:
- 本學期最後一次上課時間為 2019 年 1 月 11 日;
- 分組報告應在 2019 年 1 月 18 日前更新共筆並準備解說錄影 (放在 YouTube 上,設定為公開存取以利評分),預計 1 月 20 日遞交學期評分
- CS:APP 第 9 章重點提示
- 圖解傅立葉分析
- CS:APP Assign5.18
- 分組討論
- 公告:
- 第 17 週 (Jan 4): I/O + TCP/IP + sockets
- 第 18 週 (Jan 11): Concurrency + 課程回顧
作業系統設計與實作 (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 隨堂測驗: 題目 / 作答表單
第 10 週 (May 1): Memory hierarchy + code review
- CS:APP 第 6 章重點提示
- 檢視 分組狀況
- 回顧 Homework2 及 Homework3
- 預習: 淺談 Semaphore 與 Mutex
第 11 週 (May 8)
- Linux 原始程式碼總是充斥大量背景知識
- CS:APP 3/e 第 10 章重點提示
- CS:APP 3/e 第 11 章重點提示
- Synchronization: 搭配學習 Toward Concurrency (有錄影)
- Week11 隨堂測驗:
第 12 週 (May 15): 停課一次
第 13 週 (May 22): Linux 執行單元和同步機制
- 如何貢獻開源專案?
- 以 Linux 為分析對象
- Week13 隨堂測驗: 題目 / 作答表單
第 14 週 (May 29): Linux 執行單元和同步機制
- 以 Linux 為分析對象
- Toward Concurrency
- Concurrency in glibc
- Week14 隨堂測驗: 題目 / 作答表單
第 15 週 (Jun 5): Linux 執行單元和同步機制
- 5 bullet-points of IOTA Qubic
- 以 Linux 為分析對象
- Toward Concurrency
- C11 atomic variables and the kernel / Linux Documentation: Circular Buffers
- Toward a Better Use of C11 Atomics: Part 1, Part 2
- Part 1: Mutex Locks
- Part 2: Counting Semaphores
- Part 3: Working with Mutexes And Semaphores
- Part 4: The Critical Section Problem
- Part 5: Condition Variables
- Part 6: Implementing a barrier
- Part 7: The Reader Writer Problem
- Part 8: Ring Buffer Example
- Part 9: Synchronization Across Processes
- Week15 隨堂測驗: 題目 / 作答表單
第 16 週 (Jun 12): Linux 排程
- 公告: 及早預約補考和一對一討論,發訊息到 jserv 與他愉快的小夥伴
- 6 月 12 日 19:30- (在資訊系舊館一樓 4216)
- Introduction to Kernel Programming
- Effectively Measure and Reduce Kernel Latency for Real-time Constraints
- Linux Locking Mechanisms
- Deterministic Memory Allocation For Mission Critical Linux
- Week16 隨堂測驗: 作答表單
- 公告: 及早預約補考和一對一討論,發訊息到 jserv 與他愉快的小夥伴
第 17 週 (Jun 19): 課程回顧
- 分組報告
- 區塊鏈發展資源 / 6 月 21 日在成大資訊系: 藏身在區塊鏈的特製程式語言執行環境
- video: 為什麼要學數學?
- 倖存者偏差: 只考慮到偏頗的統計數據
- 用線性思維來思考所有事物導致的謬誤
- 黑天鵝事件
- 萬物都有對應的數學模型,而掌握數學就是掌握一種認知的工具,得以更清晰地認識世界
進階電腦系統理論與實作 (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) 第二次分組成果報告