--- title: 系統軟體課程進度與開放資源 categories: system programming, linux, performance, security, compiler, kernel toc: no ... - Instructor: [Jim Huang](/User/jserv) (黃敬群) `` * [Facebook 粉絲專頁](https://www.facebook.com/JservFans) (不要擔心提了笨問題,這專門用來和學生互動,可預約一對一討論) - 討論區: [https://www.facebook.com/groups/system.software2019/](https://www.facebook.com/groups/system.software2019/) - 課程信箱: ``, [往年課程進度](/sysprog/schedule-old) 進階電腦系統理論與實作 (Fall 2019) ------------------------------------------------------ * 第 1 週 (Sep 12): 誠實面對自己 - [課程簡介和注意須知](https://docs.google.com/presentation/d/1Wo22s5aYuuyry97-z2MMmUmdxhjD0wKTdhxIW5oqjvo/edit?usp=sharing) * [完整解說錄影](https://youtu.be/KaQvUumu81c) (3 小時) * 每週均安排隨堂測驗,採計其中最高分的 8 次 * 學期評分方式: 隨堂測驗 (25%) + 個人作業 (25%) + 分組報告及專題 (25%) + 自我評分 (25%) - 歷屆修課學生心得: [張家榮](/User/JaredCJR), [陳品睿](/User/ggary9424), [蕭奕凱](/User/Veck) - 分組報告示範: [ARM-Linux](/embedded/arm-linux), [Xvisor](/embedded/xvisor) - [GNU/Linux 開發工具共筆](https://hackmd.io/c/rJKbX1pFZ): 務必 *自主* 學習 Linux 操作, Git, HackMD, LaTeX 語法 (特別是數學式), GNU make, perf, gnuplot - [透過 Computer Systems: A Programmer’s Perspective 學習系統軟體](https://hackmd.io/c/S1vGugaDQ): 本學期教科書 (第 2 週可向助教購書) - [軟體缺失導致的危害](https://hackmd.io/@sysprog/B1eo44C1-) * 1970 年代推出的首款廣體民航客機波音 747 軟體由大約 40 萬行程式碼構成,而 2011 年引進的波音 787 的軟體規模則是波音 747 的 16 倍,約 650 萬行程式碼。換言之,你我的性命緊繫於一系列極為複雜的軟體系統之中,能不花點時間了解嗎? * 軟體開發的安全性設計和測試驗證應獲得更高的重視 - [解讀計算機編碼](https://hackmd.io/@sysprog/rylUqXLsm) * 人們對數學的加減運算可輕易在腦中辨識符號並理解其結果,但電腦做任何事都受限於實體資料儲存及操作方式,換言之,電腦硬體實際只認得 0 和 1,卻不知道符號 + 和 - 在數學及應用場域的意義,於是工程人員引入「補數」以表達人們認知上的正負數 * 您有沒有想過,為何「二補數」(2’s complement) 被電腦廣泛採用呢?背後的設計考量是什麼?本文嘗試從數學觀點去解讀編碼背後的原理 - [圖解傅立葉分析](https://hackmd.io/@sysprog/S1M6kQgiZ) * 傅立葉 (Fourier) 分析不僅是個數學工具,更是種徹底顛覆一個人以前世界觀的思維模式 * 不幸的是,傅立葉分析的公式看起來太復雜,以至於很多人囫圇吞棗,並從此對它深惡痛絕 * 本文在不需要特別熟悉數學工具的狀況下,讓讀者體會到藉由傅立葉分析看到世界的另一個樣貌 - [Bit-wise operations](https://hackmd.io/s/By0MltO_m) / [bit-wise 的應用](https://hackmd.io/s/ByzoiggIb) - [bit-field](https://hackmd.io/s/SJ8y82ZYQ) * [為什麼要深入學習 C 語言?](https://hackmd.io/s/HJFyt37Mx) - C 語言發明者 Dennis M. Ritchie 說:「C 很彆扭又缺陷重重,卻異常成功。固然有歷史的巧合推波助瀾,可也的確是因為它能滿足於系統軟體實作的程式語言期待:既有相當的效率來取代組合語言,又可充分達到抽象且流暢,能用於描述在多樣環境的演算法。」 * [C 語言:記憶體管理、對齊及硬體特性](https://hackmd.io/s/BkuMDQ9K7) * 搭配閱讀: [The Lost Art of Structure Packing](http://www.catb.org/esr/structure-packing/) * [C 語言: 數值系統](https://hackmd.io/s/BkRKhQGae) * [基於 C 語言標準研究與系統程式安全議題](https://hackmd.io/s/S15o_K3cQ) - 藉由研讀漏洞程式碼及 C 語言標準,討論系統程式的安全議題 - 透過除錯器追蹤程式碼實際運行的狀況,了解其運作原理; - 取材自 dangling pointer, CWE-416 Use After Free, CVE-2017-16943 以及 integer overflow 的議題; * [C 語言: 指標](https://hackmd.io/s/HyBPr9WGl) - 解讀 C 語言規格書的 “object” - 重讀 “type” 的定義,並且理解 incomplete type 的意義 - 三位一體: Array, function, pointer types: 都歸類於 derived declarator types - `void *` 的設計考量 - C-style string - [What comes after Moore’s Law?](https://enterprisersproject.com/article/2018/9/what-comes-after-moores-law): 隨著 Moore’s Law 時代的結束, 通用化硬體效能不再如以往快速進步, 因此軟硬體也必須因應如此的變化, 這篇點出 4 個面向: * [Ephemeral](https://www.dictionary.com/browse/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](https://www.nextplatform.com/2019/02/05/the-era-of-general-purpose-computers-is-ending/): 過往是研究員和從業者就設計瓶頸與發熱問題來說明困境,這篇則由製程發展與已發生的現象,討論以下變遷: * 能追上最先進製程的晶圓廠商越來越少 * [TOP 500](https://www.top500.org/) 中使用特殊晶片比例不斷上升 * 特殊化處理器各方面變得更為經濟實惠 - [課程基本資料表單](https://forms.gle/8ix6EpskfjLH4qbR9): **務必填寫,以接收課程資訊** - Week1 隨堂測驗: [題目](https://hackmd.io/@sysprog/HksKVpUIr)/[作答表單](https://forms.gle/zJ54J1HLJZRkBN8u9) - [作業](https://hackmd.io/@sysprog/HJvjIvDIr) * [review](https://hackmd.io/@sysprog/rJM4SPw8S) * 第 2 週 (Sep 19): 課堂測驗 - 測驗時間: 15:10-18:10 - 可翻閱書籍和 Google 搜尋,但在測驗期間,禁止任何形式的討論。 - 作答以「紙筆」進行,請同學們記得攜帶文具。  - [測驗題目](https://hackmd.io/@sysprog/B1cWzRaLB) - [作業](https://hackmd.io/@sysprog/BkZ4h5xPB) * [lab0](https://hackmd.io/@sysprog/HyFQpqgPB), [quiz2](https://hackmd.io/@sysprog/rJn1C5xDS) * 第 3 週 (Sep 26): C 語言程式設計 - [以位元駕馭能量](https://hackmd.io/s/rk2RO0cYX) - [C 語言: linked list 和非連續記憶體操作](https://hackmd.io/@sysprog/SkE33UTHf) / [對 Linked List 進行氣泡排序](https://hackmd.io/s/BklGm1MhZ) - [Count Leading Zero (clz) 的實作](https://hackmd.io/s/Skq6P9bpz) * [clz 應用](https://hackmd.io/s/Bk-uxCYxz), [clz 分析](https://hackmd.io/s/Hyl9-PrjW) * [C 語言: 函式呼叫](https://hackmd.io/s/SJ6hRj-zg) * [C 語言: 遞迴呼叫](https://hackmd.io/s/rJ8BOjGGl) * [C 語言: 前置處理器應用](https://hackmd.io/s/S1maxCXMl) * [C 語言: goto 和流程控制](https://hackmd.io/s/B1e2AUZeM) * [C語言:技巧篇](https://hackmd.io/@sysprog/HyIdoLnjl) * Week3 隨堂測驗: - [題目(上)](https://hackmd.io/@sysprog/ByEP8muwr) / [作答表單](https://docs.google.com/forms/d/e/1FAIpQLSciAcG9dJwldW_5fFj8O_l0J9vjiu7nsBLt5W5SkknfXPp9kA/viewform?usp=sf_link) - [題目(下)](https://hackmd.io/@sysprog/ryu20CKvB) / [作答表單](https://forms.gle/bATLWyPoa6yThs2R9) * [作業](https://hackmd.io/@sysprog/BJCG-HGdS) - [list](https://hackmd.io/@sysprog/rJMNq4zuH), [quiz3](https://hackmd.io/@sysprog/rkw4SBMuH) * 第 4 週 (Oct 3): code review - [回顧 Homework 1 / 2](https://hackmd.io/@sysprog/HJlug8GOS) * [CS:APP 第 2 章重點提示和練習](https://hackmd.io/s/rJoxSsiuG) * 第 5 週 (Oct 10): 停課一次,在家測驗 * 第 6 週 (Oct 17): Code Review * [CS:APP 第 2 章重點提示和練習](https://hackmd.io/s/rJoxSsiuG) * [解讀計算機編碼](https://hackmd.io/s/rylUqXLsm) * [從餘數運算到 RSA 加密演算](https://hackmd.io/s/SyBXfc8i7) * 第 7 週 (Oct 24): ? * 第 8 週 (Oct 31): 程式碼最佳化 * 為何你要掌握數學?即使 Linux 核心內部也大量可見: [從 CPU cache 一致性的角度看 Linux spinlock 的 non-scalable](https://hackmd.io/s/BJ8djgdnm) * [CS:APP 第 5 章重點提示和練習](https://hackmd.io/s/SyL8m4Lnm) * [CS:APP 第 4 章重點提示](https://hackmd.io/s/ByKFm4CFz) * 第 9 週 (Nov 7): Computer Architecture * 人工智慧涉及大量運算,和底層計算機結構及數值表示法高度相關: [Making floating point math highly efficient for AI hardware](https://code.fb.com/ai-research/floating-point-math/), [bfloat16 floating-point format](https://en.wikipedia.org/wiki/Bfloat16_floating-point_format) * [CS:APP 第 5 章重點提示和練習](https://hackmd.io/s/SyL8m4Lnm) * [CS:APP 第 4 章重點提示和練習](https://hackmd.io/s/ByKFm4CFz) * 第 10 週 (Nov 14): Computer Architecture * [CS:APP 第 4 章重點提示和練習](https://hackmd.io/s/ByKFm4CFz) * 第 11 週 (Nov 21): 分組討論 * 李飛飛教授的 TED 演說 [How we teach computers to understand pictures](https://www.youtube.com/watch?v=40riCqvRoMs) - [ImageNet: A Large-Scale Hierarchical Image Database](http://www.image-net.org/papers/imagenet_cvpr09.pdf) - [Now anyone can train Imagenet in 18 minutes](https://www.fast.ai/2018/08/10/fastai-diu-imagenet/) * [CS:APP 第 4 章重點提示和練習](https://hackmd.io/s/ByKFm4CFz) * 第 12 週 (Nov 28): Machine Language * [CS:APP 第 3 章重點提示和練習](https://hackmd.io/s/HJDRfVCFG) * 第 13 週 (Dec 5): Memory Hierarchy * [CS:APP 第 6 章重點提示](https://hackmd.io/s/H1vQ3vu2z) * 第 14 週 (Dec 12): Memory Hierarchy * 2018 年 11 月 16 日新版國際單位制通過,新的公斤定義將改以物理學的普朗克常數為標準 (WTF?!) * 世界上所有的測量結果都可以追溯到「國際單位制」(Système International d'Unités;SI Units) * 國際單位制以七個基本單位為基礎,並由此推導出各種可相互換算的測量單位。多年來,測量的定義 —— 安培(ampere)、燭光(candela)、克耳文(kelvin)、公斤(kilogram)、公尺(meter)、莫耳(mole)以及秒(second) —— 都已重新定義 * 質量測量的標準源於存放在法國巴黎近郊國際度量衡局的單一物件 —— 國際公斤原器 (IPK),自 1884 年被鑄造成為公斤的標準以來一直存放在此,[有什麼問題呢?](https://www.eettaiwan.com/news/article/20181123NT01-The-Kilogram-Has-a-New-Definition) - 根據近年的量測顯示,IPK 重量已減少約 50 微克 - 經過全球國家度量機構數十年的討論和研究,決定捨棄實體的 IPK,改以普朗克常數重新定義公斤單位,其定義比 IPK 至少穩定 100 萬倍 * video: [公斤是如何重新定義?](https://www.youtube.com/watch?v=E-IBVXNHyKc) - 目前的公斤質量是指以地心引力施加特定的力,修訂後的定義改用電磁力取代機械力進行測量 - 未來改以基布爾秤(Kibble balance)測量,後者以電磁力精準量測物體質量,可測量出多少電流產生的電磁力,才等同於作用在給定質量上的力。 * [CS:APP 第 6 章重點提示](https://hackmd.io/s/H1vQ3vu2z) * 第 15 週 (Dec 19): Virtual Memory * [CS:APP 第 9 章重點提示](https://hackmd.io/s/SkCLi8YgN) * 第 16 週 (Dec 26): Virtual Memory + 傅立葉分析 * [CS:APP 第 9 章重點提示](https://hackmd.io/s/SkCLi8YgN) * [圖解傅立葉分析](https://hackmd.io/s/S1M6kQgiZ) * [CS:APP Assign5.18](https://hackmd.io/s/rkdzvWJTX) * 第 17 週 (Jan 2): * [在網頁瀏覽器裡頭執行 MS-DOS 和毀滅戰士遊戲](https://js-dos.com/DOOM/) - [HackerNews 討論](https://news.ycombinator.com/item?id=18817278) - [其他示範](https://github.com/kripken/emscripten/wiki/Porting-Examples-and-Demos) * [CS:APP 第 10 章重點提示](https://hackmd.io/s/H1TtmVTTz) * [CS:APP 第 11 章重點提示](https://hackmd.io/s/ByPlLNaTG) * 第 18 週 (Jan 9): Concurrency + 課程回顧 * [隱藏的傅立葉分析](https://hackmd.io/s/S1jR0mHfN) * [簡單的 FizzBuzz 藏有深度 (Google 面試題)](https://medium.com/@william456821/%E7%B0%A1%E5%96%AE%E7%9A%84-fizzbuzz-%E8%97%8F%E6%9C%89-%E6%B7%B1%E5%BA%A6-google-%E9%9D%A2%E8%A9%A6%E9%A1%8C-f5e66e3a97be) * [Toward Concurrency](https://hackmd.io/s/Skh_AaVix) * Linux: [多核處理器和 spinlock](https://hackmd.io/s/rJbXgzz-4), [RCU 同步機制](https://hackmd.io/s/H19V4eyfV)