端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
生活随笔
收集整理的這篇文章主要介紹了
端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】寫在前面-為什么需要虛擬存儲器?
0.1)定義:虛擬存儲器其實就是借用了磁盤地址空間,還記得當初我們安裝CentOS,劃分的swap 文件系統嗎?
0.2)VM簡化了鏈接和加載、代碼和數據共享,以及應用程序的存儲器分配:(摘自CSAPP)
- (1) 簡化鏈接: 每個進程都擁有獨立的虛擬地址空間, 且空間范圍一致;(它是可重定向目標文件使用相對物理地址的前提)
- (2) 簡化加載: 加載器從不實際拷貝任何數據從磁盤到存儲器。每個頁初次被調用哦時, 要么是CPU取指時引用, 要么是一條正在執行的指令引用一個存儲器位置時引用,VM系統會按需自動調入數據頁;
- (3) 簡化共享: 多個虛擬頁面可以映射到同一個共享物理頁面上;
- (4) 簡化存儲器分配: 當需要額外的堆空間, os分配連續的虛擬存儲器頁面,這些VP可以映射都任意的物理頁面,這些物理頁面可以任意分散在存儲器中;
0.3)我還想多問一句,為什么有了高速緩存,還需要TLB-translation lookaside buffer,翻譯后備緩沖器呢?
Reason:
引入局部性原則: (摘自CSAPP)
局部性原則保證了在任意時刻, 程序將往往在一個較小的活動頁面集合上工作,這個集合 叫做工作集(working set)或者常駐集(resident set)。換句話說, 局部性原則揭示了一個現象:在一段時間內,我們會反復調入或調入同一個或 幾個虛擬頁頁面;而且,每次CPU產生一個VA時, MMU就必須查閱PTE, 以便將VA翻譯為PA, 注意是每次,所以開銷很大;解決方法: 為了消除這樣的開銷,在MMU中包括了一個關于PTE的小緩存,稱為翻譯后備緩沖器;
關鍵點: 所有的地址翻譯步驟都是在芯片上的MMU中執行的, 因此執行速度非常快;
你要知道計算機中共有7級存儲結構,訪問CPU中的存儲空間(MMU)的速度比訪問緩存的速度可是快了幾個數量級的。
【1】說了這么多,看個荔枝(以下TLB + 頁表 + 高速緩存 是我們手動模擬的)(圖片摘自CSAPP):
【2】題目:說有虛擬地址 0x03d7, 虛擬存儲器系統如何將其翻譯成物理地址和訪問緩存的。
【3】解答:將以上虛擬地址用二進制表示,如下:
我們看到: VPN=bit13~bit6 =0x0f; VPO=bit5~bit0 = 0x17; TLBT(行索引or標記)=bit13~bit8=0x03; (這里,為什么我管標記叫做行索引,說到本質,叫其行索引,并沒有什么不妥, 因為本實例中,cache采用的是直接映射,即每個組就只有一行,所以行索引在此處無意; 但若cache是采用組相聯映射或全相聯映射的話,每組就有多行,行索引就起到作用了);TLBI(組索引)=bit7~bit6=0x3;相關聲明declaration寫在前面:
- d1) 我們這里是考慮命中的情況,當然,如果不命中, MMU需要從主存中取出相應的PTE;
- d2) PS: 命中與否,是看TLB中是否有請求的PTE;
- d3)虛擬地址14位,而物理地址12位;
翻譯過程: (干貨)
- (1) MMU(MMU存在于CPU中,是硬件)從虛擬地址中抽取VPN=0x0f;
- (2) 再從VPN中抽取出TLBT(行索引)=0x03, TLBI(組索引)=0x3,用于索引翻譯后備存儲器TLB;
- (3) 帶著TLBT和TLBI 查看TLB,發現第3組, 有標記位03(當然,這是手動設置的,便于模擬),且有效位=1,故命中;
- (4) 命中后,將PPN=0D返回給MMU;
- (5) MMU將PPN=0x0D=bit11~bit6 和 虛擬地址的VPO=0x17=bit5~bit0 連接起來,形成物理地址PA 》》 0x357
- (6) 如上圖所示:我們得到了CT-Cache Tag=0x0D, CI-Cache Index=0x5, CO-Cache Offset=0x3;即得到了緩存標記CT=0x0d,緩存組索引CI=0x5,緩存偏移CO=0x3;
- (7) 依據CT、CI、CO,查詢高速緩存(c圖), 第5組的標記位-0x0D, 故命中;
- (8) 在看緩存偏移是0x3,所以取出塊3字節0x1D;
(Attention)
對于CT + CI + CO, 我再說的明白一點: CT就是行索引, CI就是組索引, CO就是塊索引;
Bingo!
總結
以上是生活随笔為你收集整理的端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux递归创建目录命令(linux
- 下一篇: (实模式+保护模式)模式切换的过程步骤(