當按下電源的時候作業系統都幹了些什麼?
要搞清楚都幹了些什麼就要搞清楚作業系統是如何啟動的。
那麼就要從最基本的常識來入手。
認識圖靈機
通用圖靈機模型中 控制器首先從紙帶上面讀取控制動作比如到底是加法還是減法啊,到底是做炒雞蛋啊還是做炒土豆啊。這就好像是我們現在電腦的應用程式了。cpu讀取動作,決定到底是qq啊還是瀏覽器啊。然後再根據動作來處理資料物件。
認識馮諾依曼儲存程式思想
把程式存放在記憶體中然後用乙個指標指向它,自動取指執行。那麼按下電源計算機執行的第一段指令是什麼呢?
首先得知道兩個暫存器 cs 16位的段暫存器 ip 16位的偏移暫存器。處理器執行的指令位址為
cs<<4 + ip
那麼開機的時候cs和ip指向**呢?
開機時 cs = 0xffff ip = 0x0000
那麼開機的時候處理器將定址 0xffff<<4 + 0x0000 = 0xffff0
這個位址尋訪著我們的rom bios。
這個地方是計算機啟動的時候記憶體唯一有指令的地方。也是固化在硬體中的程式。
執行這個指令幹什麼呢?首先要檢查ram,顯示器,鍵盤,磁碟等。
然後讀取磁碟(就是硬碟)中的0扇區0磁軌的512位元組的程式。這個扇區就是傳說中的引導扇區。
讀取引導扇區放在記憶體中,那麼放在**呢?不可能隨便放。放在了0x7c00處,同時將cs設為0x07c0
ip設為0x0000.
接下來處理器將從0x7c00處開始執行引導扇區的**,也就是bootsect.s
bootsect.s執行完成後開始執行setup。
bootsect 將作業系統從硬碟上
讀進來()。
setup對系統進行初始化。 它讀取了一下硬體引數,移動了作業系統,執行了乙個關鍵操作 jmpi 8 0
系統從實模式進入保護模式,實模式只能尋指一m的大小,到了保護模式原來的cs就不是段暫存器了,它程式設計選擇子,通過它去查表gdt,所以在保護模式尋指執行就程式設計了 cs查表+ip。
這個表gdt初始值也是在setup中的head.s中給的。
乙個作業系統的原始碼經過編譯一定長成下面這個樣子。
最後記憶體的狀態應該是這樣:
作業系統的啟動
bootsect.s x86 inter 結構電腦剛開機時cpu處於實模式狀態 cs 4 ip 記憶體中有一段固化的 rom bios 基本輸入輸出,位於0xffff0 cs 0xffff 段暫存器 ip 0x0000 偏移 先檢查硬體,如果不合格作業系統無法執行 start 如果硬體通過則將磁碟中...
OS作業系統的啟動
ucore的啟動過程.ucore.img 映象檔案的生成 rom中的bios 軟體執行,完成加電自檢的工作後,跳轉到bootloader 程式.bootloader負責將os從硬碟載入到記憶體中,載入完成後,將cpu控制權移交給os,完成os的啟動.bootloader還完成了實模式和保護模式 32...
作業系統的啟動流程
1.計算機加電 2.從rom中拿出bios程式開始執行,檢測硬體 cpu,記憶體,硬碟 3.bios讀取coms儲存器中的配置資訊,選擇啟動裝置 4.從啟動裝置上讀取第乙個扇區的內容 mbr主引導記錄512位元組,前446位元組為引導資訊,64為分割槽資訊,最後兩位為標誌位 5.根據分割槽資訊讀入b...