# sysprog2018 上課筆記 ###### tags: `sysprog2018` Contributed by <[`aben20807`](https://github.com/aben20807)> ## bit field 的順序 C99 6.7.2.1/10 ## `&*E` §6.5.3.3 ## main 5.1.2.2.1 main 的呼叫 沒有用參數還是可以傳 argv 執行程式(loader)怎麼知道執行哪一種有無參數 ## Misc. https://www.agner.org/optimize/instruction_tables.pdf ## 10/12 Sign-extension 0.1 - 0.01 - 0.1 三進位,不需要1(-0、+0)、2補數 阿貝爾群 浮點數不完全符合阿貝爾群 `=` 繁體不能翻做"賦值" + robust 一字多義 "魯棒" V2火箭 U \--- K TCP/IP -> NIC inturrupt 16、32 -> DSP: 對 cacheline、locality 友善,訊號處理 64 -> float point 128、256 -> SIMD 用 unsigned int 當作 index 可以少一道指令 ## 10/19 EEPROM C90 `%`: 依編譯器實作, `div`: 依據被除數的正負 C99 `%`, `div`: 依據被除數的正負 二補數在數學上更完備,阿貝爾群,加減法溢位會取 % 只有 signed extension 才需要分有號無號 CSAPP:63 CSAPP:97 循環小數 long long long is too long http://csapp.cs.cmu.edu/3e/waside/waside-tmin.pdf ## 10/26 考試 [sizeof(struct { int: -!!(e); }))](https://stackoverflow.com/a/9229793) [What's the difference between GNU99 and C99 (Clang)?](https://stackoverflow.com/a/5331540) + [6 Extensions to the C Language Family](https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions) [最完美的自定義atoi](https://www.smwenku.com/a/5b898b1e2b71775d1ce257b1/) [static struct list_head \*merge()](http://ju.outofmemory.cn/entry/153829) [frexp() - C函數](http://tw.gitbook.net/c_standard_library/c_function_frexp.html) ## 11/2 相對論透過日蝕觀察證明 數學的重要性 SMP 對稱多核 cache (cash, $) ### spinlock 作業系統很多辭彙來自物理 同步機制 舊:鎖定單核可以操作記憶體(獨占資源),其他 busy waiting 現代處理器其他不為 busy waiting 只有單核心運作太沒效率: + 交大書卷獎可以自己一組(獎勵) contention:你死我活的搶 不是要鎖就可以得到:trylock 不可能在沒有理論(數學)基礎下去改進效能 ### 最佳化 #### BS `l + (u - l)/2` -錯誤最佳化-> `(u + l)/2` , u+l overflow misoptimization > 法律、生意、合作(不只分工) #### Optimizing compilers 前端(語言) -> IR -> 後端(產生機械碼) superscalar intel 以色列 海法 side effect 有好有壞 != 副作用 `strlen()` LTO (Link Time Optimization) ICF https://ai.google/research/pubs/pub36912 code motion CSAPP 351 restrict 編譯器可放心最佳化 MMIO PLDI:程式語言設計及實作 法律是法文寫的 "我"和你的貓,"我和你"的貓 CPE CSAPP 345 SIMD AVX512(intel) ## 11/9 P257 數位邏輯 DSL (domain specific language) P256 HCL 太特別,不會用到 P263 edge trigger 專業軟體工程師,效能、功耗,所以要理解 clock > 永遠只看看的懂的人就會被人工智慧取代 ### [Making floating point math highly efficient for AI hardware](https://code.fb.com/ai-research/floating-point-math/) 行車記錄器特製晶片:較省電 integer compression instruction scheduling pipeline 行為:注意stall 順序對調行為不一樣 編譯器緩緩前進,進步幅度不大 AI 對 compiler 需求大,資源使用率 RISC-V "RISC five" > 沒有"純軟" side-channel attack > 寫程式 = 寫作 > 極少數寫出來的有人用 P289 PC SEQ SEQ+ (seqquence + pipeline):PC 動態計算 (30年前的設計 > 再更近的設計要去對的公司才學的到 RISC 每個硬體單元皆可在一個 cycle 完成 P274 > 組合語言很直覺,只是你心中的恐懼 mrmovq mr 方向:mem to reg,ir:imm to reg movq:data move P276 branch predictor:taken、not taken 追蹤狀態變化 P253 指令模擬器 P250 exception 2018q3 第 9 週測驗題 (上) q1 P177 錯誤的優化 [Optimizing Memcpy improves speed](https://www.embedded.com/design/configurable-systems/4024961/Optimizing-Memcpy-improves-speed) + 不同的處理器,由架構下優化 + 現今可能反而變慢 alloca:配置在 stack 不需要 free,不建議使用 [486時代 台灣UMC(聯電)做的CPU](https://www.mobile01.com/topicdetail.php?f=37&t=233298) ## 11/16 6.828 operating system engineering density 2000 手機 1億支 2017 50億支 中低階手機(entry level) 15 美元/支 switch 會變成 goto + 查表格 default 不用加 break; ARMv8.3 javascript 加速器 [Y86-64 instruction](https://www.cs.utexas.edu/~byoung/cs429/slides6-isa1.pdf) andes 台灣自製CPU openmoko 主管 PCBA 特製塑膠擺放元件 Hedy Lamarr http://www.dingding.tv/bbs/simple/?t4824.html 覺得難做的東西沒什麼價值,e.g. 手機、絲襪 Latency 開始到有回應(排定到真正執行) Throughput 時間內完成的工作量 21世紀 又要快又要好,正確性不可少 型式化驗證 邏輯推導 CSAPP 321 big step semantic formal verification isa CSAPP 295 流水線冒險 ## 11/23 https://www.fast.ai/ 論文 Abstract 起手式,沒有寫數據、突破 Summary 懶人包、畫重點 ImageNet ASIC 流片 google成立母公司 > 逃稅不是壞事 M$ armv8 architecture license https://www.fast.ai/2018/08/10/fastai-diu-imagenet/ ![](https://i.imgur.com/1yajZUY.png) > 老美 cost down 是硬體,我們是人 ### 16 pure function: no side effect Scala scala school: OO, FP ### 15 ray tracing ==gprof== 分析工具 ### 14 memset 用 int: https://hackmd.io/s/Sy8pJ0x9G ## 11/30 https://hackmd.io/s/HJDRfVCFG attack lab 處理器 漏電 半導體製程 v86 intel dos windows 中毒後用 dos 跑解毒 奈米製程 環保 AVX 512 IBM mainframe ## 12/07 儲存領域 王安電腦 Netware chunk 軟碟 讀寫窗 測轉速用小圈圈 可控制讀寫/唯讀 Data center資料中心蓋在高原:散熱、不在地震帶、清靜空氣 CDN AMBA NUMA 架構 flash memory: FTL 改變必須要一次改寫整個區塊 ## 12/14 手機 hall sensor P442 快 25 倍 P425 Harvard architecture instruction memory, data memory 分開 Von Neumann architecture 供耗低,設計簡單 整體 throughput 低 現在設計:modified Harvard architecture cache 使用 Harvard architecture 的方式 但是 memory 只有一個 > 我行李都會放毛語錄,畢竟在匪區要懂的保護自己 > + 重做 quiz8 的第 12 到第 13 題 ulimit 得知記憶體大小 ## 12/21 有些即時系統會關閉 MMU 為了效率關閉 MMU 全世界只有一家手機毛利率是正的:apple 其他趨近於零,甚至是負的 其他要靠財務操作 64 位元系統只會定址到 2^48^ 突破定址範圍 再多一層 table 轉換,使得在 32位元系統可以定址到更大範圍 PSE 可以讓 4GB 的定址擴大到 16GB ARM: LPAE CSAPP 602 記憶體配置器 slob(UNIX) -> slab(Linux) -> slub(Linux) slab: cache slub: 針對多核心設計 sysconf C code `_SC_NPROCESSORS_ONLN`: 獲取系統核心數 CSAPP 563 定址範圍比實體記憶體多,Linux 利用 swap 來與硬碟空間轉換 page fault 有很多種 主要三種 Minor: 不需要去硬碟找尋,已經在 DRAM 中,重新載入即可 Major: 考試中,在定址中找不到,去問 OS 是否在硬碟中 Invalid: segmantation fault,針對不可讀的 page 去讀取,e.g., 對 0x0 存取 (null pointer) Exception ARM (EXC) WCET 最差執行情況 GPF (General protection fault) peephole peephole optimization TLB: set associative,加速 CR3 追蹤處理器狀態 Copy on write task_struck mm_struck KSM ## 12/28 P582 LWF https://en.wikipedia.org/wiki/Light-weight_process Page reclaim > 時間到了就要發證書給你,就算什麼屁都沒學到,還是要感謝你繳學費 reclaim:回收、回復 注重已經使用的部份去重新調整 cache line bouncing KSM 需要花費成本去 scan https://www.systutorials.com/docs/linux/man/7-drm-memory/ [從線上售票看作業系統設計議題](https://www.slideshare.net/jserv/ticket-vending) super VGA [可視化的傅里葉變換](https://www.youtube.com/watch?v=spUNpyF58BY) > 位什麼交大有開放課程成大沒有,別人有就好我們不用重造輪子 font rasterizer 只用 CPU 做 丟給 GPU 往返時間成本太大 (roundtrip) # 01/04 NaCL -> WebAssembly [Goodbye PNaCl, Hello WebAssembly!](https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html CH10 Robust I/O 1969 unix, 登月 Project MAC 1965 Multics: "everything is a file" /proc: 虛擬檔案系統 binary GCD W. Richard Stevens https://en.wikipedia.org/wiki/Advanced_Programming_in_the_Unix_Environment tty CH11 intel e1000 ## 01/11 [生日碰撞](https://zh.wikipedia.org/wiki/%E7%94%9F%E6%97%A5%E5%95%8F%E9%A1%8C) number theoretic transform (NTT) leetcode 測試工程師品味 Dijkstra A* path THE OS > 繁體中文是弱勢語言 Concurrency (並行) vs. Parallelism (平行) 70年代翻譯:並行 P 為 C 的一的特例,通常需要硬體支援 ```clike int a = 0, b = 0, c = 0; ``` `,`: sequency point,不保證執行順序 sugar-free: 不是無糖,是沒有砂糖,可是有代糖 lock-free: 還是有lock,但是彼此不打架 hackbench tool Google f1 cockroachdb > 壞掉的鐘一天會對兩次 > 慢分的手錶整天都不會對 > 那要選哪個? spinlock 相當耗能 MESI