linux核心原始碼學習(1)記憶體映射模式

來源:互聯網
上載者:User
2009-08-11 01:47於百度空間部落格發表,今天移過來
                                                       linux核心原始碼學習(1)記憶體映射模式
                                                                                                                                                               flyli
現在開始好好學習linux核心了,我覺得學習核心最好的方法莫過於是閱讀原始碼了,最近我就一直在讀,不過說實話,因為本人不是電腦專業學生(我 是電子資訊工程專業的)所以讀原代碼的難度還是有一些的,不過呢,我覺得功夫不負有心人,我啃也好啃完《linux核心原始碼情景分析》這本書~
剛開始讀核心確實不知道從何讀起,藉助一本好的書我覺得還是很有必要的,在這裡我買的是《linux核心原始碼情景分析》,這本書,我覺得寫的非常好,希望大家也買本來看看哈,網上也有pdf版本的,不過我還是覺得買本書比較好,而且要買正版的,畢竟人家高手寫這麼好的一本書給我們也不容易,增加點收入也是應該的嘛,嘎嘎。
好了,現在開始說正題,這本書其實我以前也大概翻過一點,想的“好讀書不求甚解”,但是發現假如不完全讀懂的話,讀著獨著後面就讀不動了,於是開始重頭認真看氣。
今天下班終於把這本書關於記憶體映射這一部分完全讀懂了讀到了39頁,不容易啊。。。。假如有兄弟在讀這本書的話歡迎留言探討哈~~~
當然我不想抄書到部落格上來,但是我想把書上的東西連貫起來,這樣比較容易懂。

以上是pentium pro之後的cpu的三層記憶體映射,但是其中的PMD和PI層其實只有一層,linux中定義的是把PMD這一層給刪掉了,為什麼呢?因為在pgtable.h這個標頭檔中定義pmd這個表現只有一個,那麼就相當於沒有什麼選擇的餘地了,也就是為了糊弄一下CPU的模式了,但是為什麼不按照CPU硬體所支援的3層映射呢?原因就是雖然我們的程式有3G的虛擬空間,但是你見過多少程式佔用的記憶體超過1G啊?何況是3G。。。這樣就勢必產生大量的空表項浪費記憶體空間,於是linux便去掉了中介層,通過兩層映射,節約空間。

虛地址和線性映射地址其實是一致的都是從0開始的4G訪問空間,但是對於系統來說,因為linux核心佔用的虛擬記憶體空間其實是1G(不是真的佔用,而是在虛擬位址中佔用的哈),所以當虛地址轉向物理地址是需要減去1G,反之則加上
其中段地址為20位,而頁面表的大小是4k,所以我們可以算出CPU可以訪問4G的線性空間
而每個目錄項(GDT)佔用的是32位的空間,而其PGD,PMD每個佔用了10位的空間,那麼只用到了20位,於是剩下的12位就用來挪作他用,用來什麼標誌位啊,還有一些其保護和校正作用的了
但是線性表(LDT)和目錄項的關係還沒有研究透,明天繼續哈
今天就寫這麼多了,太晚了要不明天起不來上班了,明天繼續看書,繼續寫哈
假如我的文章中有什麼錯誤,希望大蝦指正哈,小弟感激不盡!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.