---
# System prepended metadata

title: 清大 106 硬體
tags: [硬體, '106', NTHU]

---

# 清大 106 硬體
###### tags: `NTHU` `106` `硬體`
1.
monolithic OS: kernel 集大權於一身，專制獨裁
microkernel: kernel 還政於民
iOS: microkernel
Android: monolithic

service that may  be external subsystem to a microkernel: File system/device driver/network stack

2.
transaction atomicity: 所有的交易、行為，要不一次不被干擾地執行完成，要不什麼都沒有做

3.
(a)
| State \ Events  | admitted |timeout|completion|I/O|dispatch|exit|
| ----------------|:---------|:------|:---------|:--|:-|:-|
| new             | ready    |       |          |   ||exit|
| ready           |          |       |          |   |running|exit|
| blocked         |          |       | ready    |   ||exit|
| running         |          | ready |          |blocked||exit|
| suspend         |          |       | ready    |||exit|
| exit            |          |       |          |||exit|

(b)
admitted 只適用於 new；timeout 只適用於正在執行的 process；completion 只適用於 blocked & suspend；I/O 只適用於正在執行的 process；dispatch 則是適用於在 ready 的 process
:::info
一頭霧水...所以要怎樣才能進入 suspend ?，沒有 OOM 這個 event 阿
:::
\(c\) ...
:::info
整題我都寫得很心虛...
:::

4. n(k-1)+1
5. 不可能，optimal page replacement 需要知道未來的 page reference 情形，那是不可能百分之百精準預測的。可以用 temporal locality 這個性質來判斷該 replace 哪個 page
6. 可以，在 page table 註記這個 page 是 data 還是 code，或是用 address 去區分也可以。將兩者區分開來，理論上就可以維護兩個 working set。
7. serial port 太慢了，用 polling 效率太差；hign perf. NIC 因為速度很快，讓 interrupt 所需的 context switch 成本被放大，所以採用 polling 就是很合理的作法。
8. 243
9. 3072000
10. F000800C/f0008010
11.
```c=
ldr x4, [x3, 2]
add x4, x4, x2
ldr x1, [x4]
sub x1, x1, 4
```
:::info
MIPS 已經下台一鞠躬了啦，誰還在學這個過時的東西
:::

12.
(a)
(b) 3
\(c\) 消失了
(d)
1,2,3
5,7,8
4,6,11
9,10,13
12,14
15
16
17
18
(e) 6
(f)
1,2,3,5,7,8
4,6,10,11
9,12,13,14
15
16
17
18

13.
(a) 3
因為 branch 需要 stall 兩個 clock，考慮最糟的情況：所有 thread 都在 branch，需要額外兩個 thread 來填滿。
(b) 3
flow depencence 會導致兩個 clock stalls。
\(c\) YES，一樣是兩個 stall，所以需要額外兩個 thread
(d) NO，需要額外 10 個，總共 11 個 thread

14.
(a) 密度比 DRAM 高
(b) 便宜
\(c\) 放在 Main Memory 的下面
MagicRAM 相較 DRAM 的唯一優勢，是他的單位容量價錢比 DRAM 便宜，以及非揮發。
如果當成主記憶體來用，寫次數太頻繁，很容易就壞掉。因此把他當次級記憶體來用，會是合理的作法
:::info
不就是 SSD...
:::
(d) 或許可以把他跟 DRAM 並行使用，將不常被更動的資料，像是 process binary、dynamic library、kernel binary 等等，放在 MagicRAM，至於 heap、stack 等經常被寫入的區塊，就放在 DRAM。

15.
(a) 0.2
:::info
$\frac{1}{S+\frac{1-S}{16}}=4\rightarrow S=0.2$
:::
(b) Y
X: $\frac{1}{S+\frac{1-S}{16}}=4$
Y: $\frac{1}{\frac{S}{2}+\frac{1-S}{8}}=5$
Z: $\frac{1}{\frac{S}{4}+\frac{1-S}{4}}=4$
\(c\) 6
$\frac{1}{\frac{S}{2}+\frac{1-S}{12}}=6$
(d) c
a: 6.4
b: 6.4/6.15/4
c: 8
(e) 平行化的機會難以被發覺/大部份的 basic block 都不會太大，分支會影響平行化的可能性/記憶體/快取頻寬與容量負荷不了高度平行化的運算

