從零實現一個操作系統-day2

我的博客: startcraft.cn

keywords: 操作系統

今天主要是對操作系統的啓動進行學習,因爲都是理論的部分,這篇博客就當學習的筆記了

計算機的啓動過程

BIOS

首先在按下電源鍵後計算機首先讀取寫在ROM中的BIOS(Basic Input/Output System 基本輸入輸出系統)

它保存着計算機最重要的基本輸入輸出的程序,其主要功能是爲計算機提供最底層的、最直接的硬件設置和控制。此外,BIOS還向作業系統提供一些系統參數。系統硬件的變化是由BIOS隱藏,程序使用BIOS功能而不是直接控制硬件。現代作業系統會忽略BIOS提供的抽象層並直接控制硬件組件。——百度百科

然後BIOS程序會進行硬件自檢,若硬件出問題發出相應的蜂鳴,自檢通過後BIOS移交控制權給存儲器,按照設置的存儲器的啓動順序,若存儲器第一個扇區的最後兩個字節爲0x550x550xAA0xAA則代表該存儲器可以用於啓動,若不是則將控制權給下一個存儲器

存儲器

找到可以用於啓動的存儲器後,機器讀取第一個扇區的前446個字節(調用操作系統的機器碼)然後運行啓動管理器讓用戶選擇要啓動的操作系統

操作系統

控制權移交給操作系統後,操作系統的內核會被先載入內存,然後以Linux爲例子會啓動init進程,這是操作系統的第一個進程,pid爲1,其他所有的進程都是它的後代,init進程會逐步調用系統模塊直到操作系統啓動完成

關於內存地址

針對32位系統cpu的尋址空間是2^32即4GB,其中包含了一些固定的地址訪問固定的硬件如訪問BIOS
加電後cpu的第一條指令地址是0xFFFFFFF0也就是BIOS的地址,然後BIOS就好開始執行上面描述的流程
在讀取主引導記錄是會將扇區的512字節讀到內存的0x7C00地址,由於512字節太小,所以這512字節就用來些載入內核的代碼

bootloader

上面說的載入內核的代碼就是bootloader,不過本次我們不自己寫bootloader,主要是因爲學習的梯度吧,就直接使用縣城的GRUB,然後我們的主要任務就是弄出一個能被GRUB識別的操作系統內核,所以要符合GRUB的規範——multiboot規範

今天學校的課挺多,就先到這吧,看文檔去了,明天週末大幹一番

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章