最近在看操作系統(tǒng),對操作系統(tǒng)啟動過程尤為感興趣,因此查閱相關資料之后總結如下,以后有空準備寫寫鼠標,鍵盤的驅動程序和linux的圖形界面練練手,話不多說,直接開搞:
1.基礎知識:
1.為什么要用計算機,計算機有什么用?
--這個問題,額,還用問,當然是玩游戲,追劇,下軟件唄,當然這是一般用途,歸結起來就是滿足我們的相關需求,幫助我們解決一些實際問題,就像冰箱是拿來儲存食物一樣,沒啥特別的.
2.為什么要用操作系統(tǒng),搞這么麻煩?
????額,我們設想不用操作系統(tǒng)OS,假如你要打一串字符"hello,saber"到屏幕上(別問我為什么要打字符),那么不用OS,你的過程是這樣的:給發(fā)出指令(我要打字到屏幕上)-cpu給內存通話,叫他把0x700位置處的指令取出來放在顯存里面,同理一直挨著,如果不出差錯的話(這個概率和中彩票差不多,因為你得知道諸多代碼還不搞錯?),屏幕上出現(xiàn)hello,saber,ok,是不是費時費力,假如有了OS,只需要一條指令-printf"hello,saber",那么hello,saber就如期而遇,也就是說OS幫助我們使用硬件-這里是指顯示器.
回到為什么要打hello,saber這個問題,本質上我們是利用計算機提高生產力,諸如word,ppt等無需多言.
綜上,OS幫助我們更簡單,高效,正確的使用硬件和軟件,最大程度保證不出錯,提高我們生產力.
3.計算機是什么?
這-還用回答嗎?是的,你別跟我說就是一堆CPU,內存條,鍵盤,鼠標的收納箱,你說的這個是裸機,或者你會說計算機是硬件加軟件的集合,你說的太官方了,沒有掌握到精髓,那么你不服氣的問,那計算機是什么?
----我認為計算機就是一個模型的實現(xiàn),怎么說,我們從歷史的角度來看看:
最開始圖靈提出了一種模型,想我們炒菜都有一個流程,就那番茄炒蛋來說吧,那么把步驟寫出來,照搬到計算機里面,那么枯燥重復的工作不就計算機幫我們完成了么,想法不錯,于是有了控制器(cpu前身)來執(zhí)行炒菜,紙帶寫入步驟,于是簡單的可以運行的計算機就成型了,后來人們想你這個只能炒番茄炒蛋,那我要是茄子雞丁呢?于是想到的辦法就是修改邏輯,以前的邏輯是番茄雞蛋,現(xiàn)在的邏輯是番茄雞蛋+茄子雞丁,就可以炒2個菜了,同理,事先輸入N個邏輯,就實現(xiàn)了N個菜,聽著怎么這么耳熟?對了就是馮諾依曼的存儲程序概念,上面說的菜譜就是一個程序,輸入qq信息,打開qq,得到qq信息,就這么簡單,所以說計算機是一個邏輯,一個模型的實現(xiàn).
2.OS開機過程:
? 如下:
Step1:首先插上電源,電源按鈕打開,隨后你會看見一段代碼在飛速奔跑,美其名曰BIOS(Basic Input Output System)-基本輸入輸出系統(tǒng),你說有什么用?直觀的作用就是開機檢查,檢查什么?-內存條是不是查好了?線是不是插緊了?內存條是不是壞了?為什么要檢查?不檢查你內存條壞了進入系統(tǒng)豈不是白忙活一場?
-----官方流程:開機-BIOS-尋地址-開機自檢-中斷調用-載入引導扇區(qū)進入0x7c00處.
-----為什么?尋址--取指執(zhí)行,你得有地址吧,于是進入固定的地方開始開機,查找地址.
自檢?---檢查有啥毛病沒?線是不是都插好了?
中斷調用?--進入BIOS (一般快捷鍵為F9)適用于參數(shù)設置比如開機磁盤,查看系統(tǒng)信息---尤其是用于U盤重裝系統(tǒng).
????????????????? ? 載入引導扇區(qū)?--為后續(xù)OS做準備.
Step2:BOOT (BOOTSEC.S)-load_setup-OK_read
----作用:1.將BIOS從0X7C00移動到0X9000-為啥?---便于為操作系統(tǒng)騰出空間
????????????? ? 2.加載LOAD模塊,13號中斷,指出BIOS讀扇區(qū)中斷扇區(qū)位置
Step3:OK_load_SETUP---作用1:顯示字符,什么字符?--沒錯就是你開機的那個移動的進度條上面的那個圖標--WINDOWS XP
----相關代碼參數(shù):mov cx #24--字符數(shù)字
????????????????????????????msg1.ascii"WINDOWS XP"
作用2:交出控制權,讀入setup,讀入system模塊.
Step4:SETUP.S-作用:初始化參數(shù),成表,移動代碼到0x0000處,進入保護模式.
---初始什么參數(shù)?--初始化系統(tǒng)參數(shù)比如你電腦是幾GB的等等.
---成表?--也就是數(shù)據(jù)結構,存儲上述信息.
------移動代碼?--操作系統(tǒng)在0x0000開始的地方等你,你不過去?
------進入保護模式?--也就是地址翻譯與前面的實模式不一樣,實模式是cs<<4+ip表示內存地址,現(xiàn)在是cs+ip,不過現(xiàn)在的cs是查找所謂的全球描述表-GDT,然后進行合成找到地址.---為什么要這么做?因為cs<<4+ip最多表示20位,現(xiàn)在要32位(因為現(xiàn)在內存地址>1M,一般是1G,4G)所以必須采取新的地址翻譯方式.
Step5:System模塊-Linux Makefile-Head.s
disk:image--樹狀結構
Step6:進入main.c函數(shù):
也就是開始內存,中斷,設備,時鐘,cpu等初始化,拿初始化內存為例,初始化內存就是初始化內存表--一個存放內存使用信息的內存數(shù)組,4K/組.
Step7:熟悉的Windows Xp桌面.
總結:OS開機就做了兩件事情:首先把在磁盤中的操作系統(tǒng)載入內存取指執(zhí)行,然后進行初始化,也就是setup,system,main.c.