linux核心原始碼學習(2)記憶體映射模式終於搞清楚了__linux

來源:互聯網
上載者:User
2009-08-12 00:38我發表於百度空間,今天移過來
linux核心原始碼學習(2)記憶體映射模式終於搞清楚了
                                                                                                                                           ------flyli 今天通過不斷的讀《linux核心代碼情景分析》和在網上查閱資料,終於把記憶體映射的總得機理高清楚了
下面是我參考的一篇文章( cttnbcj兄弟在csdn上發的一篇文章,具體地址為http://topic.csdn.net/u/20081011/07/a3d92bd2-19d5-4e25-89c3-bf8f7308bcef.html)
=====================================
段xxxx:位移yyyyyyyy 
首先,xxxx是無法表示段的基址的,對於這個地址,首先要看xxxx的TI位是否為0(即xxxx的第二位),如果是,則從GDTR中擷取GDT的基 址,然後在GDT中以段選取器xxxx的高12位得出索引,根據索引位移找到相應的段描述符,段描述符包括段的基址,限長,優先順序各種屬性,這就得到了段 的起始地址,加上yyyyyyyy即是要找的記憶體的線性地址zzzzzzzz。  如果TI位為1,則表示段描述符放在LDT中,第一步的操作還是從GDTR中擷取GDT的基址,然後從LDTR寄存器獲得索引(非XXXX的高十二位), 注意,這時根據索引位移得到得並不是段描述符,而是得到LDT段的位置,然後根據xxxx的高十二位從LDT段中獲得段描述。再以這個段描述符資訊得到段 基址,再加上位移yyyyyyyy得到要找的線性地址zzzzzzzz。可以寫個簡單的類比程式來表示:
if( xxxx的第二位==1 ) //段描述符的位置在GDTR中
{
A1=(GDTR的前三十二位); //把GDTR的基址給A1
段描述符=A1+(xxxx的高12位);  //可獲得段描述符
線性地址 = 段描述符中的基址+yyyyyyyy;
}
else  //TI位為0,表示在段描述符在LDT中
{
A1=(GDTR的前三十二位);
A2=A1+LDTR;  //A2即是LDT描述符表的入口,註:LDTR是16位的 (自己注釋:GDTR只有一張表,而且基地址(在核心中)確定的,任務切換時候,也不會改變。每個LDTR又是指向自己任務的,所以任務切換時候,只是改 變LDTR寄存器中的內容(改變在GDT中的索引),找到另一個LDT段的描述符(包含了LDT的開始基地址和界限),然後加上段選擇子的索引,找出地址 中的位置。),還要要注意的是LDT表的基地址和界限是在LDT的快取中,任務不切換的話,v快取快取的內容不會變。
段描述符=A2+(xxxx的高十二位) //LDT描述符表入口加上位移,即是相應的段描述符 自己注釋:書上寫的A2(應該是表示從LDT的開始基地址吧)LDT的基地址+索引才是局部描述符正確的位置
線性地址 = 段描述符中的基址+yyyyyyyy;
}
========================================

原來GDT和LDT之所以一個叫Global(全域)一個叫Local(局部)是因為其實局部的描述表LDT僅僅是GDT的一個引索而已,
為什麼要有一個 GDTR,並且 GDTR的結構和LDTR不一樣呢。

這主要是因為系統只有一個GDT,而GDT的描述符有不能存放在GDT中(LDT的描述符都存放在GDT中),所以就需要一個 GDTR來指示GDT在記憶體中的位置。因為 GDTR是直接指示記憶體位址,而LDTR主要指示LDT描述符在GDT中的位置和屬性,所以 GDTR和LDTR的結構也不同。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.