電腦從開機加電到作業系統main函數之前執行的過程

來源:互聯網
上載者:User

標籤:linux   核心   

總的來說在作業系統加電啟動之後到main函數執行之前作業系統經曆了以下3個大步驟 1.啟動BIOS。這個時候位於實模式下,載入中斷向量和中斷服務程式 2.載入作業系統核心並為保護模式做準備。這個時候作業系統一共載入了3部分代碼:引導程式bootsect,核心代碼setup,核心代碼system模組 3.從實模式轉換為32位保護模式。這個過程要做大量重建工作,並且持續工作到作業系統main函數的執行過程。細說的話,主要包括開啟32位定址空間,開啟保護模式,建立保護模式下的中斷相應機制與保護模式配套的相關工作,建立記憶體分頁機制。
名詞說明:實模式:20位的儲存空間地址空間,可以直接軟體訪問BIOS及周邊硬體,沒有硬體支援的分頁機制和即時多任務概念。從80286開始,所有的80x86CPU開機狀態都是實模式。中斷向量表:實模式下用於記錄所有中斷號對應的中斷服務程式的記憶體位址。中斷服務程式:用於指示中斷髮生後該怎麼辦的程式。SS:棧基底位址暫存器,SP:棧頂指標,兩者一起構成棧在記憶體中的位置。壓棧方式為高地址向地地址。根檔案系統裝置:linux 0.11使用Minux OS的檔案系統管理方式,要求系統必須存在一個根檔案,其他檔案系統掛在其上。因此Linux 0.11在啟動時需要兩部分資料,即系統核心鏡像和根檔案系統。GDT(通用描述元表):在系統中唯一的存放段寄存器內容的數組,配合程式進行保護模式下的段定址。其可理解為所有進程的總目錄表,其中存放每一個task局部描述符表(LDT)地址和任務狀態段(TSS)地址,完成進程中各段的定址,現場保護與現場恢複。IDT(中段描述符表):儲存保護模式下所有中斷服務程式的入口地址,類似於實模式下的中斷向量表。GDTR,IDTR:分別為以上描述符表的基地址寄存器CR0寄存器:0號32為控制寄存器,存放系統控制標誌。第0位為PE標誌,置1時CPU工作在保護模式下,置0時為實模式。設定段寄存器指令:該組指令的功能是把記憶體單元的一個“低字”傳送給指令的指定16寄存器,然後把“高字”傳給相應的段寄存器。命令格式:LDS/LES/LFS/LGS/LSS Mem, Reg
說明:我學的是linux 0.11核心,目前有的核心版本是3.6,雖然差好多,但是適合學習。注意:開始階段的BIOS與作業系統無關

1.啟動BIOS,準備實模式下的中斷向量表和中斷服務程式電腦啟動後,CPU邏輯電路被設計為只能運行記憶體中的程式,沒有能力直接運行存在於磁碟片或硬碟中的作業系統,如果想要運行,必須要載入到記憶體(RAM)中。 BIOS是如何啟動的:CPU硬體邏輯設計為在加電瞬間強行將CS值置為0XF000,IP為0XFFF0,這樣CS:IP就指向0XFFFF0這個位置,這個位置正是BIOS程式的入口地址。 BIOS在記憶體中載入中斷向量表和中斷服務程式    BIOS程式被固化在電腦主機板上的一塊很小的ROM晶片裡。現在CS:IP已經指向了0XFFFF0這個位置,意味著BIOS開始啟動。隨著BIOS程式的執行,螢幕上會顯示顯卡的資訊,記憶體的資訊……說明BIOS程式在檢測顯卡,記憶體……期間,有一項對啟動作業系統至關重要的工作,那就是BIOS在記憶體中建立中斷向量表和中斷服務程式。    BIOS程式在記憶體最開始的位置(0x00000)用1KB的記憶體空間(0x00000~0x003FF)構建中斷向量表,在緊挨著它的位置用256KB的記憶體空間構建BIOS資料區(0x00400~0x004FF),並在大約57KB以後得位置(0x0e05b)載入了8KB左右的與中斷向量表相應的若干中斷服務程式。    中斷向量表有256個中斷向量,每個中斷向量佔4個位元組,其中兩個位元組是CS值,兩個位元組是IP值。每個中斷向量都指向一個具體的中斷服務程式。
2.載入作業系統核心並為保護模式做準備現在開始電腦要分三批逐次載入OS的核心代碼。分別是引導程式bootsect,核心代碼setup,核心代碼system模組 載入引導程式bootsect    首先對CPU發送int 0x19中斷,使CPU運行int 0x19中斷對應的中斷服務程式,這個中斷服務程式的作用就是把磁碟片第一個扇區的程式載入到記憶體的指定位置。總結來說就是:找到磁碟片並載入第一扇區。這個第一扇區的內容就是bootsect,第一扇區稱為開機磁區。    至此,第一批代碼bootsect已經載入進記憶體了,下面的工作就是執行bootsect把磁碟片的第二,三批代碼載入入記憶體。 載入第二部分程式setup    bootsect首先對記憶體進行規劃:包括之後將要載入的setup程式的扇區數,被載入到的位置,開機磁區被BIOS載入的位置等等。總之就是規劃好之後記憶體分布,方便之後使用。    bootsect接著複製自身代碼。從記憶體0x07c00複製到記憶體0x90000處。這個時候說明OS開始根據自身的需求安排記憶體了。    最後,bootsect將setup載入至記憶體。其中載入過程需要藉助BIOS提供的int 0x13中斷向量指向的中斷服務程式來完成。該程式將磁碟片第二個扇區開始的4個扇區,即setup.s對應的程式載入至記憶體的SETUPSEG(0x90200)處。 載入第三部核心代碼--system模組    載入第三批代碼仍然用int 0x13中斷向量。    這次載入的扇區數是240個,為了讓使用者覺得不是機器故障,Linus在螢幕上設計了打出一行字串:"Loading system ... "    載入完畢後再確定一下根裝置號。
3.從實模式轉換為32位保護模式    至此,3部分代碼已經載入完畢,開始轉變進入保護模式。 關中斷並將system移動到記憶體位址起始位置0x00000    關中斷是為了不響應外部中斷,直到保護模式下的中斷服務體系被構建完畢才會開啟中斷。    回顧一下,0x00000這個位置原來存放著由BIOS建立的中斷向量表級BIOS資料區。這個複製會覆蓋原地區。這樣的好處是:        a)廢除BIOS的中斷向量表。        b)記憶體空間回收        c)讓核心代碼佔據記憶體物理地址最開始的有利位置 設定中斷描述附表和通用描述元表    設定並初始化這兩個表 開啟A20,實現32位定址    A20為第21根地址線,實模式下啟用前20根(A0~A19),保護模式將開啟A20~A31,標誌32位定址。 為保護模式下執行head.s做準備    為了建立保護模式下的中斷機制,setup程式將對可程式化插斷控制器8259A進行重新編程,重新對應中斷號。    接著執行代碼:    ...    mov ax,#0x0001   ! protected mode bit    lmsw ax    jmpi 0,8                 ! jmp offset 0 of segment 8 (cs)    ...    其中8代表1000,最後兩位表示核心特權級,11則表示使用者權級;第三位0表示GDT,1則表示LDT;1表示選擇表中的第1項(從0開始),這個用來確定為程式碼片段(cs)的段基址和段限長等資訊。如下:    

head.s開始執行    head.s的載入方式與之前的bootsect,setup有所不同,大致過程是:先將head.s彙編成目標代碼,將用C語言編寫的核心程式編譯成目標代碼,然後連結成system模組。也就是在記憶體既有核心程式,又有head程式。兩者是緊挨著的。         head程式除了做一些調用main之外的工作之外,還主要用程式的自身代碼在程式自身所在的記憶體空間建立了記憶體分頁機制。    head程式將L6標號和main函數入口地址壓棧,棧頂為main函數地址,目的是使head程式執行完後通過ret指令就可以直接執行main函數。正常來說main函數是不應該退出的,但如果main函數異常退出,就會返回這裡標號L6處繼續執行,防止系統崩潰。    這些壓棧操作完成後,head執行setup_paging:去執行,開始建立分頁機制。先要將頁目錄表和4個頁表放在實體記憶體的起始位置。    4個頁表分別映射0x0000到0xFFF000的所有頁面,一個頁面大小為4KB        head程式設定完的記憶體分布 

至此,開機到main函數執行之前的過程結束。


參考:Linux核心設計的藝術

電腦從開機加電到作業系統main函數之前執行的過程

聯繫我們

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