從零實現乙個作業系統 day2

2021-10-05 04:37:35 字數 894 閱讀 3562

我的部落格: startcraft.cn

今天主要是對作業系統的啟動進行學習,因為都是理論的部分,這篇部落格就當學習的筆記了

首先在按下電源鍵後計算機首先讀取寫在rom中的bios(basic input/output system 基本輸入輸出系統)

然後bios程式會進行硬體自檢,若硬體出問題發出相應的蜂鳴,自檢通過後bios移交控制權給儲存器,按照設定的儲存器的啟動順序,若儲存器第乙個扇區的最後兩個位元組為0x55

0x55

0x55

和0 xa

a0xaa

0xaa

則代表該儲存器可以用於啟動,若不是則將控制權給下乙個儲存器

找到可以用於啟動的儲存器後,機器讀取第乙個扇區的前446個位元組(呼叫作業系統的機器碼)然後執行啟動管理器讓使用者選擇要啟動的作業系統

控制權移交給作業系統後,作業系統的核心會被先載入記憶體,然後以linux為例子會啟動init程序,這是作業系統的第乙個程序,pid為1,其他所有的程序都是它的後代,init程序會逐步呼叫系統模組直到作業系統啟動完成

針對32位系統cpu的定址空間是2^32即4gb,其中包含了一些固定的位址訪問固定的硬體如訪問bios

加電後cpu的第一條指令位址是0xfffffff0也就是bios的位址,然後bios就好開始執行上面描述的流程

在讀取主引導記錄是會將扇區的512位元組讀到記憶體的0x7c00位址,由於512位元組太小,所以這512位元組就用來些載入核心的**

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

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

從零實現乙個作業系統 day1

我的部落格 startcraft.cn 從這次春招中的碰壁和各種感悟,深刻體會到自己基礎知識的不足,從零實現乙個作業系統可以幫助自己更好得了解作業系統的知識。自己很早之前就開始有寫乙個微型作業系統的想法,之前也實踐過,但弄了幾天就放棄了,發現自己的毅力太差了,其實就是太懶了,寫blog的目的也有敦促...

從零實現乙個作業系統 day7

我的部落格startcraft 因為在核心中,大部分的c標準庫函式無法使用,字串操作的函式又比較常用,所有自己實現一些 ifndef include string h define include string h include types.h void memcpy uint8 t dest,c...

day2 作業系統

一.為何要有作業系統 程式設計師無法把所有的硬體操作細節都了解到,管理這些硬體並且加以優化使用是非常繁瑣的工作,這個繁瑣的工作就是作業系統來幹的,有了他,程式設計師就從這些繁瑣的工作中解脫了出來,只需要考慮自己的應用軟體的編寫就可以了,應用軟體直接使用作業系統提供的功能來間接使用硬體。二.作業系統的...