1. 程式人生 > >os學習之每日疑問大總結-11.24

os學習之每日疑問大總結-11.24

1。為什麼分段會對記憶體有保護作用?
因為記憶體中每一個段都會對應著一個段描述符,如下圖:
段描述符
其DPL(Descriptor Privilege Level)位規定了記憶體段的特權級,當cpu在訪問記憶體段的時候,嚴格受段定義大小及訪問特權級等資訊的控制,任何越限和越權的訪問都將會被拒絕,並引起異常中斷。

2。GDTR和段選擇子之間的區別
段選擇子是存放在一個暫存器中的,其通過GDT/LDT找到所對應的段描述符,從而得到其段基址,然後於其邏輯地址部分的偏移地址加起來,得到線性地址。

而GDTR是一個硬體的部件,通過其就能知道GDT在記憶體中的位置。GDT本身不是一個段,而是線性地址空間中的一個數據結構。GDT的線性基地址和限長必須被裝載入GDTR暫存器.

3.MMU和分段,分頁之間的關係

MMU由一個或一組晶片組成,其功能是把邏輯地址對映為實體地址,即進行地址轉換。MMU是一種硬體電路,它包含兩個部件,一個是分段部件,一個是分頁部件。

TLB
大部分程式傾向於對較少的頁面進行大量的訪問。因此,只有一小部分頁表項經常被用到,其它的很少被使用。
採取的解決辦法是為計算機裝備一個不需要經過頁表就能把虛擬地址對映成實體地址的小的硬體裝置,這個裝置叫做TLB(翻譯後援儲存器,Translation Lookside Buffer), 有時也叫做相聯儲存器(associative memory)。
它通常在MMU內部,條目的數量較少,80386有32個。每一個TLB暫存器的每個條目包含一個頁面的資訊:有效位,虛頁面號,修改位,保護碼,和頁面所在的物理頁面號,它們和頁面表中的表項一一對應。

當一個虛地址被送到MMU翻譯時,硬體首先把它和TLB中的所有條目同時(並行地)進行比較,如果它的虛頁號在TLB中,並且訪問沒有違反保護位,它的頁面會直接從TLB中取出而不去訪問頁表,如虛頁面號在TLB但當前指令試圖寫一個只讀的頁面,這時將產生一個缺頁異常,與直接訪問頁表時相同。
如MMU發現在TLB中沒有命中,它將隨即進行一次常規的頁表查詢,然後從TLB中淘汰一個條目並把它替換為剛剛找到的頁表項。因此如果這個頁面很快再被用到的話,第二次訪問時它就能在TLB中直接找到。
在一個TLB 條目被淘汰時,被修改的位被複制回在記憶體中的頁表項,其它的值則已經在那裡了。當TLB從頁表裝入時,所有的域都從記憶體中取得。必須明確在分頁機制中,TLB中的資料和頁表中的資料的相關性,不是由處理器進行維護,而是必須由作業系統來維護,快取記憶體的重新整理是通過裝入處理器(80386)中的暫存器CR3來完成的。(見重新整理機制flush_tlb())這裡要還提到命中率,即一個頁面在TBL中找到的概率。一般來說TLB的尺寸大可增加命中率,但會增加成本和軟體的管理。所以一般都採用8–64個條目的數量。假如命中率是0.85,訪問記憶體時間是120那秒,訪TLB時間是15那秒。那麼訪問時間是:0.85*(15+120)+(1-0.85)*(15+120+120)=153那秒。

4。段暫存器的構成
由16位的段選擇子和64位的段描述符構成
段暫存器組成成分