Linux0.11從開機到準備執行main函數的啟動學習
最近一直在看操作系統以及內核設計的東西,不確定自己有能力會參與到類似的開發之中,但是爭取能自己改造這內核玩一下,然後按照Linux From Scratch那樣的把改造後的系統編譯運行就心滿意足了。正在看的書是《Linux內核設計的藝術》之"圖解Linux操作系統架構設計與實現原理",自己看的時候有種恍然大明白的感覺。這本書的特色是圖很豐富,看著很爽的感覺,內存地址都畫得非常清楚,但是我怕自己只看不動手分析的話,看了很容易遺忘。這裏寫這篇博客希望能夠邊看,邊學,邊分析,邊領悟,最好能夠提問。
從開機到main函數的執行分為三步完成,其目的是實現從啟動盤加載操作系統程序,完成執行main函數
- 第一步,啟動BIOS,準備實模式下的中斷向量表和中斷服務程序;
- 第二步,從啟動盤加載操作系統程序到內存,加載操作系統程序的工作就是利用第一步準備的中斷服務程序實現的;
- 第三步,為執行32位的main函數做過渡工作。
啟動盤
如果你有裝過操作系統或者玩過BIOS設置的話,會設置操作系統啟動的優先順序,類似下圖這樣的:
這裏我們可以選擇多種啟動方式,比如,網絡,硬盤,軟盤或者U盤,當然現在最多的還是從硬盤啟動,那麽你所設置的第一個就是啟動盤。
main函數
main函數這裏理解為程序的入口,這裏要拿出來說是因為,首先不要想到Linux多麽龐大,多麽復雜,它就是一個從main函數(不一定叫main)開始執行的程序而已。
BIOS
"基本輸入輸出系統"(Basic Input/Output System),簡稱為BIOS,你可以把這裏理解為一個提供了很多基本操作的工具程序,util。假設把操作系統比喻為飛奔在高速公路的小汽車,那麽BIOS可以看成是把小汽車帶向高速公路的輔路。
實模式,32位(保護模式)
實模式和保護模式是intel cpu所提供的功能。
實模式(Real Mode)是Intel 80286和之後的80x86兼容CPU的操作模式。實模式是一個20位的存儲器地址空間(2^20=1048576,即1MB的存儲器可被尋址),可以直接通過軟件的方式訪問BIOS以及周邊硬件,沒有硬件支持的分頁機制和實時多任務的概念。從80286開始,所有的80x86 CPU的開機狀態都是實模式;8086等早期的CPU只有一種操作模式,類似於實模式。
下面的來自百度百科,發現保護模式和實模式都可以單獨寫一篇了。
保護模式,是一種80286系列和之後的x86兼容CPU操作模式。保護模式有一些新的特色,設計用來增強多工和系統穩定度,像是內存保護,分頁系統,以及硬件支援的虛擬內存。大部分的現今 x86 操作系統都在保護模式下運行,包含 Linux、FreeBSD、以及 微軟 Windows 2.0 和之後版本。另外一種286和其之後CPU的運行模式是實模式,一種向前兼容且關閉了保護模式這些特性的CPU運行模式。用來讓新的芯片可以運行舊的軟件。依照設計的規格,所有的x86 CPU都是在實模式下開機,來確保傳統操作系統的向前兼容性。在任何保護模式的特性可用前,他們必須要由某些程序手動地切換到保護模式。在現今的計算機,這種切換通常是由操作系統在開機時候必須完成的第一件任務的一個。它也可能當CPU在保護模式下運行時,使用虛擬86模式來運行設計運行在實模式下的代碼。
實模式下CPU的尋址範圍為0至0xFFFFF,1MB尋址空間,需要0~19號共20根地址線。進入保護模式後,將使用32位尋址模式,即采用32根地址線進行尋址,第21根至第32根地址的選通,將意味著尋址模式的切換。只能補充這麽多,再搞就要跑題了。
Linux0.11從開機到準備執行main函數的啟動學習