Linux記憶體初始化(彙編部分)__Linux

來源:互聯網
上載者:User

之前有幾篇部落格詳細介紹了Xen的記憶體初始化,確實感覺這部分內容蠻複雜的。這兩天在看Linux核心啟動中記憶體的初始化,也是看的雲裡霧裡的,想嘗試下邊看邊寫,在寫部落格的過程中慢慢思考,最後也能把自己的思考分享給其它人。

這個系列主要分為兩個部分,彙編部分和C語言部分。

這篇博文主要介紹的是彙編部分。

註:這兩篇博文介紹的都是64位系統。 核心解壓縮過程

這個過程就不詳述了,整個Linux核心是作為一個壓縮過的鏡像提供的,在執行核心代碼之前,首先需要bootloader對其進行一個解壓縮,對這部分有興趣可以參看這篇部落格。 最初的頁表什麼樣。

解壓結束後,會進行一個對elf格式的parse,然後對核心進行載入,最後進入arch/x86/kernel/head_64.S中的startup_64。

startup_64主要完成分頁功能啟用,最後跳入C代碼x86_64_start_kernel。在開始分析代碼之前,我們要先來看看在核心的資料區段中,初始化頁表是長怎麼樣的。

12345678910111213141516171819202122232425262728293031
  __INITDATANEXT_PAGE(early_level4_pgt)  .fill 511,8,0  .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLENEXT_PAGE(early_dynamic_pgts)  .fill 512*EARLY_DYNAMIC_PAGE_TABLES,8,0  .dataNEXT_PAGE(init_level4_pgt)  .fill 512,8,0NEXT_PAGE(level3_kernel_pgt)  .fill L3_START_KERNEL,8,0  /* (2^48-(2*1024*1024*1024)-((2^39)*511))/(2^30) = 510 */  .quad level2_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE  .quad level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLENEXT_PAGE(level2_kernel_pgt)  PMDS(0<
相關文章

聯繫我們

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