【OS学习笔记】三 计算机的启动过程
學習交流加
- 個人qq:
1126137994 - 個人微信:
liu1126137994 - 學習交流資源分享qq群:
962535112
上一篇文章邁進了匯編的大門,點擊鏈接查看上一篇文章:匯編語言和匯編軟件
上一篇文章大概學會以下內容:
- 了解匯編語言的作用
- 下載NASM編譯器,并學會使用它來編譯匯編語言源程序
至于更深層次的匯編原理,需要在以后的文章中逐步展現。
今天這篇文章主要記錄以下學習內容:
- 了解計算機的開機啟動。只有這樣,才能知道我們應該把編譯好的程序放到哪里,才會被CPU執行。
- 了解硬盤的構造和作用(簡單了解)
文章目錄
- 1、計算機的啟動過程
- 1.1、如何將編譯好的程序直接交給處理器執行
- 1.2、計算機的加電復位
- 1.3、BIOS-基本輸入輸出系統
- 1.4、硬盤及其工作原理
- 1.5、一切從主引導扇區開始
- 總結
1、計算機的啟動過程
1.1、如何將編譯好的程序直接交給處理器執行
我們這一系列文章是學習X86匯編-從實模式到保護模式。目前我們還沒有寫過匯編程序。如果我們寫好了一個匯編程序,使用特定的匯編編譯軟件來將匯編程序編譯好,然后再使用特定的平臺來運行這個程序即可。但是我們的目的不是這么簡單。
我們的目的是學習操作系統與計算機系統之間的關系。那么我們如何執行我們寫好的匯編代碼呢?
每種編譯器都有能力針對不同的操作系統將你的源程序編譯為不同的(支持該操作系統平臺的)二進制文件。然后運行這個二進制文件。然后不同的操作系統開發的軟件也不一樣,寫的程序也不一樣(在這里我們特指匯編語言),這樣開發起來就很麻煩。
換個角度想一下,操作系統也是一個軟件,它也是需要處理器對它取指令和執行指令的軟件。只不過它比一般的軟件更加復雜而已。如果我們能夠繞過操作系統,讓我們寫的程序直接被處理器執行,而不需要操作系統的干預的話,或者讓電腦一開機就執行我們自己寫的程序,而不是加載你的操作系統的話,那么就可以實現讓CPU直接過來執行我們的代碼,這樣看來更簡單!!!
這個主意完全可行!!!但是我們還需要了解一些知識。比如計算機是如何啟動后加載操作系統的。
1.2、計算機的加電復位
在眾多處理器的引腳中有一個RESET引腳,用于接收復位信號。每當處理器加電或者復位,處理器都會執行一個硬件初始化,以及一個內部自測程序(BIST),然后將內部所有的寄存器的值初始化到一個預置的狀態。
比如,針對8086處理器來說,復位將使代碼段寄存器(CS)的內容初始化到0xFFFF,其他所有寄存器初始化為0x0000.
處理器天生的職責就是取指令與執行指令。當你加電或者復位后,處理器就興奮了,馬上就想去取指令。但是有一個問題,現在內存中,可是什么都沒有呢。無法取指令啊。至于內存中為什么沒有東西,這個大家應該很了解了,因為內存是掉電丟失的,關閉電源后內存中所有的運行的程序包括操作系統程序都會丟失。
那么既然內存什么都沒有,處理器如何取指令和執行指令。
BIOS就此登場!!!
1.3、BIOS-基本輸入輸出系統
注意,我們現在還是停留在8086,如果有一些知識與你所知道的不一樣,那肯定是因為你所知道的不是8086的,有可能是以后出現的IA-32等。
8086,具有20根地址線(可以閱讀文章查看為什么是20根地址線:處理器、內存、指令),它的尋址范圍是0x00000-0xFFFFF,可以尋址1M的內存空間。我們之前學過,我們的內存條(物理內存)就是映射到這1M的尋址空間,CPU才能在這1M的尋址空間中對內存進行尋址。
實際上,這20根地址線并沒有全部用于內存尋址,只不過是大部分地址線用于內存,還有一部分地址線用于只讀存儲器ROM和外圍設備。
上圖中上面的是ROM,下面的是內存條。外設的話放到以后講解。
ROM是什么?ROM是只讀存儲器,它不管是在有電的是時候還是沒電的時候,它存儲的內容不會消失。它存儲的內容是預先寫好的,一般無法改變。這個特點很有用,比如,可以在上面預先寫好一些程序指令。當處理器上電后,然后處理器先去這個ROM中取指令執行。這樣就不會讓處理器上電后在那干等著。
在8086中,ROM占據著處理器1M尋址空間的最頂端的64KB。物理地址的范圍是0xF0000-0xFFFFF。這一段空間固化了開機時要執行的指令。
物理內存占據著處理器1M尋址空間的較低端的640KB。地址范圍是0x00000-0x9FFFF。中間還有一部分地址空間是用于外圍設備的。
由上一節的內容知,處理器加電或者復位后,CS寄存器被賦予初值0xFFFF,IP寄存器賦予初值0x0000。所以此時需要訪問的物理地址為0xFFFF0。它正好位于ROM中。
在這個ROM中的這個位置,是一個跳轉指令jmp。jmp指令通過修改CS與IP,使處理器從ROM的另一個位置開始取指令。
好了,此時處理器開始穩了,不再到處跳了,安安靜靜的從ROM的這個位置取指令執行指令。。。。。
那么這個ROM中存的是什么指令呢?為什么讓CPU上來先執行這里的代碼?
這個ROM中,主要進行硬件的檢測,診斷和初始化。這里的檢測和診斷很好理解。初始化的話,是讓電腦出于一種可以顯示屏幕,可以使用鍵盤等這樣的基本功能。比如你重裝系統的時候,會有界面供你選擇如何一步步安裝操作系統,甚至可以用鼠標鍵盤操作。這種基本的狀態,就是由ROM中的代碼初始化而來的。
正因為這種基本的狀態,這個ROM芯片又叫做:BIOS(基本輸入輸出系統)ROM。我們這里不講BIOS。
ROM-BIOS 的容量很小,它執行完后,就會讓處理器去其他地方接著取指令執行。這個其他地方,就是主引導扇區,實際上這個主引導扇區,就是在硬盤的某一個位置。
那么現在問題就來了,在哪一個位置?處理器如何對它進行讀寫操作?
想要知道這個,就得先了解硬盤及其工作原理。
1.4、硬盤及其工作原理
如下圖是一個拆開的硬盤:
為了搞清楚硬盤的構造,下圖給出了一個更詳細的圖示:
硬盤可以有多個盤片或者一個盤片。他們串在一個軸上,由電機帶著高速旋轉。
每個盤片都有兩個磁頭,上面一個,下面一個。所以經常用磁頭來指代盤面。磁頭有編號,第一個盤片上,上面的磁頭編號是0,下面的磁頭編號是1;第二個盤片,上面的磁頭編號是2,下面的磁頭編號是3,以此類推。
磁頭是由磁頭臂固定在同一個支架上,由步進電機帶著在盤片的中心和邊緣移動。
可以想象,當盤片高速旋轉時,磁頭每步進一次,就會在盤面上形成一個圓,這個看不見的圓被稱為磁道。磁道,是數據記錄的軌跡。從上往下所有的磁道形成一個圓柱,稱為柱面。
磁道,或者柱面也要編號。編號是從最邊緣的磁道開始編號,最邊緣的是0號磁道,向里依次遞增。
柱面是一個用來優化數據讀寫的概念。在硬盤上,數據的訪問是以柱面來組織的。
實際上,磁道還可以進一步劃分成扇區:磁道很窄,也看不見,單子啊想象中,它仍然呈帶狀,占有一定的寬度。將它劃分許多段后,每一部分都呈扇形,這就是扇區的由來。其實扇區,才是最小的讀寫單位。
每個磁道能劃分成幾個扇區,取決于磁盤制造者,但通常為63個。每一個扇區也有一個編號,扇區的編號是從1號開始。
扇區與扇區之間是以間隙隔開。每個扇區以扇區頭開始,然后是512字節的數據區。扇區頭包含了每個扇區自己的信息,包括這個扇區所在的磁道號,磁頭號,和扇區號。
1.5、一切從主引導扇區開始
講了這么多硬盤的構造,實際上就是為了引出主引導扇區的概念。
主引導扇區:硬盤的第一個扇區是0面0道1扇區,或者叫做0頭0柱1扇區。這就是主引導扇區。也就是處理器執行完BIOS-ROM中的指令后,需要執行指令的地方。當然,是BIOS-ROM將主引導扇區的第一條指令加載到內存中,也就是內存地址:0x07C00(0x0000:0x7c00)。
實際上就是一條jmp指令:
jmp 0x0000:0x7c00主引導扇區的功能是,繼續從硬盤的其他地方讀取更多的指令加以執行,比如最后肯定會加載操作系統!!!
現在終于可以回到最開始的問題。我們如果把我們寫好的自己的匯編代碼,放到主引導扇區的位置上,是不是就可以讓處理器直接執行我們的代碼了!!!
肯定是的!!!
但是有一個問題就是,我們不能在我們自己電腦上做實驗,因為你將你的代碼寫到主引導扇區,那么以后你的電腦就癱瘓了,無法啟動操作系統了!!!
不過,虛擬機是一個好家伙。我們可以在虛擬機上虛擬一個計算機出來,在上面做實驗。下篇文章講解虛擬機!!!
總結
今天學會一下內容:
- 了解計算機的啟動過程
- 了解硬盤的構造與原理
今天就到這里,明天繼續學習!
學習探討加:
qq:1126137994
微信:liu1126137994
總結
以上是生活随笔為你收集整理的【OS学习笔记】三 计算机的启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英文停用词列表
- 下一篇: Java程序员面试简历模板