# 台大 104 硬體 ###### tags: `NTU` `104` `硬體` 1. A. 不知道 B. 幾個需要考慮的因素: - context-switch 成本會大幅增加 - system call、interrupt handling 的成本會大幅增加 - 成本、耗電、存取時間 C. 使用函式的程序會受益,理由如下: 在呼叫函式時,callee 為了避免上一層的函式資料被動到,得將暫存器裡的資料存到 stack 裡。問題來了,有些暫存器裡的資料,其實已經用不到了(dead)。存起來只是在浪費時間。 好,那我反過來,讓 caller 去存總可以了吧?問題又來了,caller 也不知道 callee 會用到哪些暫存器,到頭來還是一樣的問題。 解決辦法就是把暫存器分成 caller-saved 和 callee-saved,然後將優先放在 caller-saved register。使用 caller-saved register 不需要事先把原本在裡面的資料存到 stack 去(因為那是上一層函式的工作),而且因為大部份的資料生命週期短,在呼叫其它函式時,未必需要將其保存起來。 以上。 D. 因為 floating point 的計算很慢,在進行浮點數運算時,也會希望能進行其它的整數運算。暫存器全部混在一起,就達不到這個目的了。 2. A. $1015\times 2^{20}$ B. 0.9375 C. lui D. "?p" E. "?p" :::info ~~究研示顯,endianess 影不響 C string 在記體憶的放擺順序~~ ::: F. a = $2^{127}$, b = $2^{127}$, c = $-2^{127}$ (a+b)+c 會爆掉,a+(b+c) 會 = $2^{127}$ 3. A. backward-taken-forward-not-taken / 2-bit dynamic branch prediction B. - C++ 裡有個東西叫 virtual function,存取virtual function 時需要去 vtable 找到該 function 的位置、load 進暫存器裡,然後用 indirect branch 跳過去 - 函式在 return 時,也是用 indirect branch - 第二個應該更常遇到吧,畢竟不是每種語言都有 virtual function 或類似的機制 C. 像以 vtable 的例子,在地址被 load 進來之前,你什麼也不知道。~~是要預測個洨~~ 4. A. 16 B. 因為 miss-penaly 都一樣所以我猜是...32...吧 5. A. ?? B. 很難,因為最後要寫入 x[i][j] 時一定會有 cache coherency miss。 6. 只要速度夠快、讓把 process 送進 waiting queue 的成本比等待的成本高,採用 polling 的方法就很合理(想想 spinlock v.s. semaphore) 7. A. CPU 大部份的時間都花在 context-switch,真正做功的時間比例降低,turnaround time 自然就會被拉長 B. 如此一來資料就不用在快取間搬來搬去的 8. 9. A. 用 4GB 的記憶體邊打 GTAV 邊開 twitch 直播邊開一堆股票看盤軟體邊開一堆 chrome 分頁在 ptt 上發廢文。 B. 可以,暫止某些 process、降低 multiprogramming degree,可以讓 thrashing 情況改善 C. working-set model 會監測每個 process 的 working-set size,確保整體的記憶體用量不會超標。 D. working-set model 不會讓那些要求過多的 process 執行,理論上是能徹底防止 thrashing? E. disk I/O 會被佔用,導致其它的 virtual machine disk I/O 效能下降。 10. A. system-call 成本降低,原本要分很多次的 write,用一個 writev 就可以解決了。像是瀏覽器要發送大量封包時,就可以用 writev 一次寫入多個封包 B. 資料結構跟 API 要設計好,要不然用起來會很麻煩。