# 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