作者BenLinus (班)
看板Grad-ProbAsk
標題Re: [理工][OS]台大97 Cache
時間Tue Feb 15 02:02:23 2011
※ 引述《charliejack (charliejack)》之銘言:
: (1)
: 有TLB
: Cache 使用virtually memory but phisical tagged cache
: 請問他是怎麼做Logic -> Phisical的轉換的
(1)
virtually indexed, physically tagged cache
virtual address
┌──────────────────┐
└──────────────────┘
↓
virtual page number | page offset
┌───────────┬──────┐
└───────────┴──────┘
| |
↓ ↓
TLB tag, TLB index
cache index, block offset
┌───────┬───┐ ┌────┬─┐
└───────┴───┘ └────┴─┘
| |
↓ |
TLB |用
virtual address的這段cache
index
用上面這段資訊, |可找到要讀取cache的哪一個entry
(HIT時)可在TLB的某entry找到 |
對應的data 就是 ↓
physical address tag —————→
CACHE
↑
把上面這個 tag 拉去跟 cache 的 tag field 比較,
由
virtual index, physical address tag 來取得真正的 data。
優點就是這樣只要一產生 virtual address 就可以
馬上去讀 cache 的某 entry,
然後再用 TLB 查得的 physical address tag 來看 cache 是否 hit。
缺點呢, 如果說 cache 是用 direct-mapped, 那很明顯cache的size會有限制,
就是不能超過 page offset (即page size的大小) 的 bit 數,
畢竟它是用來找 cache entry 的, 超過的話後果可以想像吧 XD 找不到 entry;
(似乎特意用 virtual 和 physical address 都相同的 page offset 部分?)
但如果用 >1 associativity 又可以解決這個缺點,
因為 entry 總數不變的情況下, 2way-associative CACHE size 可以變兩倍。
而下面法2, 就是白算盤裡的方法,
要等到 TLB 把 physical address 轉出來才能去 cache 讀 data,
效能就差了一點。
: (2)普通狀況下的TLB是指
: logic page 到TLB -> change to phisical address
: 在到 cache 裡面 尋找 phisical address -> 找到相對應的Data
: So 在這裡的TLB 是Virtual->Physical cache是 Phisical->Data
: 這樣應該沒錯吧@@?
: Sorry 之前問過
: 還是不是很懂~"~
: 有沒有人願意解答0.0......
順便再補充一下 virtually addressed, virtually tagged cache;
它在讀取資料的過程中就不需要 TLB 的存在了...
TLB 的用意就是 page table 的 cache, 現在沒 address translation 所以...
優點:
超快, virtual address 一出來馬上可以去 cache 找 data 看有沒有 hit
缺點:
1) page-level protection:
就少了原本從 virtual address translatoin 到 physical address 的保護機制,
(如limit register), 要克服這個問題就要想辦法增加額外的記錄資訊了。
2) 恐龍本裡有提到, 這樣在 process switch 時, cache 都要 flush 掉,
因為不同的 processes 可能用到相同的 virtual address,
但實際上要對到的是不同個 physical addresses; 解決方法是加上 pid。
3) 就是 aliasing, OS 跟 user program 可能用了兩個不同的 virtual addresses,
不過卻是對到同一筆 physical address 的資料,
因此 virtual cache 裡可能會有兩個 copy, 假設 OS 去修改這筆實體資料,
user program 就會讀到錯誤的資料; 解決方法就是用 physical cache。
以上是我的心得 @@ 希望沒有誤導到人 XD
有錯請指正 ^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.160.131.80
推 max1147:推用心 02/15 02:18
※ 編輯: BenLinus 來自: 1.160.131.80 (02/15 06:33)
推 charliejack:感謝 我懂了概念了XD 02/15 10:10
推 dy957:請問virtually memory but phisical tagged cache 的 02/15 22:35
→ dy957:TLB沒有被移除嗎? 02/15 22:36
→ BenLinus:沒有喔, 全virtual才不會用TLB 02/15 22:54
→ dy957:喔喔! 謝謝~ 02/15 23:04
推 karaokstar:原PO超強 整理得很好 推 02/15 23:10