推 yupog2003: 過了一段時間發現沒有人來回答,我把我的理解打出來 01/16 16:51
→ yupog2003: 但還是建議原po要多方求證,因為這塊我也不強 01/16 16:51
→ yupog2003: 先說write-invalid: 01/16 16:52
→ yupog2003: time 1:第一次寫入x1,應該是write miss,要從memory 01/16 16:54
→ yupog2003: 讀block進來寫,所以有bus activity 01/16 16:55
→ yupog2003: 而且要把P2那邊x1所在的block設為invalid 01/16 16:56
→ yupog2003: time 2:P2發現這個block被設為invalid,所以要看看其他 01/16 17:02
→ yupog2003: 應該說其他process會看看自己有沒有這個block,有的話 01/16 17:03
→ yupog2003: 又互斥的話就寫回memory,然後共享 01/16 17:04
→ yupog2003: 此時要用到bus 01/16 17:04
→ yupog2003: time 3:我也是納悶應該會write hit,題目又說是用write 01/16 17:08
→ yupog2003: -back,照理來說不需要用到bus?還是說把其他processor 01/16 17:08
→ yupog2003: 的cache設為無效也要用到bus? 01/16 17:09
→ yupog2003: time 4:因為是read miss,所以要從memory抓資料進來, 01/16 17:09
→ yupog2003: 會用到bus 01/16 17:10
→ yupog2003: time 5:會read hit,所以不用任何動作,不會用到bus 01/16 17:10
→ yupog2003: 這個題目是有說要用write-invalid,沒說我也不知道... 01/16 17:11
→ yupog2003: 我看張凡的圖有寫到:place invalidate on bus,也許 01/16 17:15
→ yupog2003: 將其他cache設為invalid也要用到bus,那time 1會用到 01/16 17:15
→ yupog2003: bus還有這個原因 01/16 17:15
推 Transfat: 我對這個觀念也不是很清楚,我的疑問是在time2的時候, 01/16 17:49
→ Transfat: P2發現自己是invalid, 所以發生Read miss,這時候是P1會 01/16 17:49
→ Transfat: 看我是不是也有這個block嗎?x1,x2應該在同一個block,x3 01/16 17:50
→ Transfat: 在自己一個block,所以P2發現x2在的這個block是invalid, 01/16 17:50
→ Transfat: p1也要去看我的x2 block是不是exclusive,如果是exclusiv 01/16 17:50
→ Transfat: e,就要write back,並改成shared? 01/16 17:50
→ Transfat: 假如time2的時候x2和x1所在的這個block被改成shared, 01/16 17:51
→ Transfat: time3的時候又要write,所以會再把x1,x2這個block改成E 01/16 17:52
→ Transfat: Exclusive,然後用write-invalidate去使P2對應的block無 01/16 17:52
→ Transfat: 效,用wirte-invalidate使對方無效要用到bus這我確定 01/16 17:53
→ Transfat: 還有另外一個不懂的是為什麼time4的時候read3會是read 01/16 17:53
→ Transfat: miss,x3資料不是好端端的在P2的block裡面嗎? 01/16 17:53
→ yupog2003: T大的第一段理解跟我一樣,不過我敘述不好QQ 01/16 18:05
→ yupog2003: time 4 的時候我是假設所有資料一開始都不在cache裡面 01/16 18:06
→ yupog2003: x3所在的block從來也就沒有被access過,所以P2第一次 01/16 18:06
→ yupog2003: read x3的時候就會read miss了 01/16 18:06
→ yupog2003: 阿阿我看到(c)題目的敘述說x1和x2有在cache裡面了 01/16 18:07
→ yupog2003: 但是x3不在裡面,所以還是read miss 01/16 18:08
→ yupog2003: 那我time 1那個講錯了,會有bus activity的原因是因為 01/16 18:08
→ yupog2003: 要把P2的那個block設為invalid 01/16 18:08
推 Transfat: 還有另一個疑問是,Cache block size=32Bytes,他給那個 01/16 18:51
→ Transfat: physical address,是直接除以32嗎?我不確定要怎麼去看 01/16 18:51
→ Transfat: 會在不在同一個block內 01/16 18:52
推 Transfat: 關於time1的敘述也可以從之前103台大電機有一題,就是 01/16 19:31
→ Transfat: 什麼時候要把dirty block寫回,看樣子應該是Read miss的 01/16 19:31
→ Transfat: 時候,因為P1的block是dirty block,P2被改成invalid,p2要 01/16 19:31
→ Transfat: 在Read的時候會Read miss,這時候如果P1是dirty,就要寫回 01/16 19:32
→ Transfat: 以上敘述是我課本上說的 01/16 19:32