iT邦幫忙

1

【小白馬的OS筆記】(4)避免二次存取記憶體浪費時間- Translation Look-aside Buffers (TLB)

【小白馬的OS筆記】(3)中,我們講述了Paging的觀念,
paging就是將使用者程式在logical memory上的地址,
轉換到真實記憶體(physical memory)的地址。
而記錄logical memory的page對應到physical memory的哪個frame的表,
我們稱之為Page Table,如示意圖:

https://ithelp.ithome.com.tw/upload/images/20191104/20117114aDuJPi9tDY.png

二次存取記憶體的時間浪費

然而,Page Table它也是放在記憶體裡面的,
如果我們想透過logical address去到physical address的話,
就需要兩次的記憶體存取,
一次用來查詢Page Table,
另一次用來進入physical memory的地址。

快速查詢表-TLB

假如我們有一張比較小的表格呢?
這張表記錄幾個比較常用的page對應的frame,
但是查詢的速度比一般的page table快很多,
如果要查的page不在TLB上面,
我才去查詢page table,
那麼便可以達到省時間的效果了。
這張可以快查的表就稱為TLB(Translation Look-aside Buffers)。

你可能會說,Page Table必需放在記憶體裡面,
難道TLB就不在記憶體裡面嗎?
憑什麼TLB可以有快速查詢的效果?
這…小馬也不知道,
但總之小馬就先當做「這是TLB的特殊能力」來解釋了。

Effective Memory Access Time(EMAT)

總之,我們談到說發動TLB的特殊能力可以節省存取記憶體的時間,
那麼到底省多少呢?
EMAT計算平均一次查page而存取記憶體的時間。
這邊實際給個數據計算看看:

  • 假設每次TLB search的時間為20ns (ns是奈秒,時間單位,為10^(-9)秒)
  • 假設每次memory access的時間為100ns
  • 假設TLB hit ratio為70%

那麼此時EMAT是多少呢?
所謂的「TLB hit ratio」指的是透過TLB查詢page時,真的能夠查到對應的frame機率。

  1. 如果透過TLB查到資料了,那麼我們就直接去physical memory就好,
    此時需要的時間為 20+100=120ns。
  2. 如果透過TLB查不到資料,我們要額外花一次時間查page table再去physical memory,
    此時需要的時間為 20+100+100=220ns

此例中,EMAT= 0.7*120ns + (1-0.7)*220ns= 84+66 = 150ns。
那假如沒有TLB的話,我們永遠都需要先查page table再去physical memory,
永遠都是 100+100=200ns。

從數字上來看,TLB真的能夠節省時間。

啃考古題時間

下面以一題關於TLB的考古題作結吧:
【清大2018春季博士班資格考-OS】
Answer the following questions related to TLB(Translation Lookaside Buffer).
(a) Why TLB can improve system performance?
(b) Why TLB might need to be flushed after context switch?

認為的答案:
(a) 因為查詢TLB比查詢page table還要來的省時間,一旦在TLB查到page與frame之間的對應,可以節省一次查詢page的時間。因此只要TLB hit ratio夠好,便能提升系統效能。

然後是(b)小題,目前小馬真的不知道答案。第一步要先弄懂「context switch」是什麼。
flushed這個單字我想應該是刷新。
由題意得到線索好像是說每做了一次「context switch」,TLB就會被刷新?
待問到答案後再告訴大家吧…

(11/5補充…)
終於問到為什麼每做一次context switch,TLB就會被刷新了。
首先說一下context switch大概是什麼:
因為電腦不會只有跑一支程式,
電腦可能會同時跑多支程式(process)輪流交替執行,
這樣交換process稱為「context switch」。
那TLB的作用是為了存下常用的地址
使得查找logical address到physical address的速度可以快一點。
因此,對每支不同的process來說,它們的TLB都不會一樣,
所以每次context switch後,TLB就會刷新。

認為的答案:
(b) 因為「context switch」會交換不同的process工作,每支process的TLB都不會一樣,因此需要在context switch後刷新。


尚未有邦友留言

立即登入留言