1.L1 CACHE的Miss和Hit
1.1 Read Miss
見2.1。
1.2 Write Miss
L1D是Read-allocate CACHE,意味着僅在發生Read Miss時才會讀入新的行。如果寫Miss發生,數據通過一個Write Buffer寫到低一級內存,從而把L1D CACHE旁路。寫buffer包含4個entries,每個entry是64位寬。
1.3 Write Hit
發生寫命中,數據被寫到CACHE中,但並不立刻就送到低一級內存。既然CACHE的類型是write-back,那么當CACHE中的數據被CPU寫操作修改后,在以后某個時間會回寫到內存中。為了回寫修改的數據,你必須知道哪個行被CPU修改。為了這個目的,每個行都有一個Dirty狀態,只要CPU寫一個CACHE行,那么這個行的dirty位就設為1。,只有dirty行才會因為被驅逐而回寫到內存,如果行沒有被修改,也就是這一行是Clean,那么它的內容會被廢棄。回寫操作也可以由程序指令來主動觸發。
2.L2 CACHE的Miss和Hit
2.1 Read Miss和Hit
CPU對一個可CACHE的外部內存產生讀請求,如果在L1(可能是L1P或L1D)發生Miss,再如果這個地址在L2 CACHE中也Miss,那么對應行被讀入到L2 CACHE。LRU位決定哪個Way的Line Frame被定位取代,如果這個Line Frame包含Dirty數據,它首先在新的行去進來之前被writeback到外部內存(如果這個Line也包含在L1D中,則L1D中的這個Line首先在L2這一行送到外部內存之前被writeback到L2),形成的L1行(包含請求的地址)被送到L1,L1存儲這行數據,並最終把它送給CPU。之后,如果新的Line代替的是一個Dirty行,則這行寫到L2 CACHE中。從這個過程我們發現L2和L1 CACHE是一致的。
如果L2命中,則對應行直接送到L1
對於不可CACHE的外部內存區域,請求的數據簡單地直接由外部內存送到CPU,不會存儲在任何CACHE中。
2.2 Write Miss和Hit
CPU對外部可CACHE的內存進行寫請求,這個數據地址在L1D中Miss,於是通過Write buffer送到L2,如果L2檢測到這個地址是Miss,對應的L2 CACHE Line從外部內存取進來,然后更新。LRU位決定哪個Way的Line Frame被定位取代,如果這個Line Frame包含Dirty數據,它首先在新的行去進來之前被writeback到外部內存。注意這個行不會存儲在L1D,所以如果在L1D中Miss,因為L1D是僅read-allocate的,絕對不會因為寫操作而修改CACHE內容。當然如果被L1D命中,則直接修改L1D內容。
如果L2命中,直接修改L2。
對於不可CACHE的外部內存區域,請求的數據簡單地直接寫到外部內存,不會存儲在CACHE中。