iT邦幫忙

2

【小黑馬作業系統教室】(10) (Ch8) 查找真實地址的加速- Translation Look-aside Buffers (TLB)

大家好,我是心原一馬,
今天要繼續講講paging的概念。

上一篇: 【小黑馬作業系統教室】(9) (Ch8) 記憶體管理,OS決定使用者寫程式的變數存在記憶體的哪個位置

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)。

因為TLB屬於cache(快取記憶體)的一種,
查詢TLB的時間比查詢記憶體上的page table還要來的快。

重點- TLB在context switch後必順刷新

先複習下context switch是什麼?
電腦不會只有跑一支程式,
而可能會同時跑多支程式(process)輪流交替執行,
這樣交換process稱為「context switch」。

對不同的process來說,
它們有各自的page table,
但TLB是共用的,
TLB的存在是為了使查找process裡的logical address到physical address的轉換可以快一點。
因為TLB是共用的,如果process交換了,
應該先清空TLB,把下一個要執行的process需要的資料(他的page table)跟著拿進來,
否則便會讀到別人page table的資訊,而查詢到錯誤的地址。

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真的能夠節省時間。


尚未有邦友留言

立即登入留言