本節書摘來自異步社群《作業系統真象還原》一書中的第2章,第2.1節,作者:鄭鋼著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
不知道大家對“載入記憶體”這4個字的了解是怎樣的。以下這兩點是我曾經的疑問:第一,為什麼程式要載入記憶體。第二,什麼是載入記憶體。
先回答第一個。
cpu的硬體電路被設計成隻能運作處于記憶體中的程式,這是硬體基因的問題,這樣做的原因,首先肯定是記憶體比較快,且容量大。
其次,作業系統可以存儲在軟碟上,也可以存儲在硬碟上,甚至u盤,當然還有很多存儲媒體都可以。但由于各個硬體特性不同,作業系統要分别考慮每種硬體的特性才行。是以,都在記憶體中運作程式,作業系統和硬體設計都省事了,這可能也是為了方式的統一吧,否則總不能出現某種存儲媒體後,作業系統和硬體就要付出額外努力去支援。當然,具體原因隻有硬體工程師才知道,咱們在此先打住,繼續咱們的内容。
馬上回答第二個。
老聽說“程式載入記憶體”,我不知道有多少同學對這個詞僅僅是感性認識。
我隐約覺得很多同學都會将“載入記憶體”和“程式執行”畫等号。所謂的載入記憶體,大概上分兩部分。
(1)程式被加載器(軟體或硬體)加載到記憶體某個區域。
(2)cpu的cs:ip寄存器被指向這個程式的起始位址。
作業系統在加載程式時,是需要某個加載器來将使用者程式存儲到記憶體中的。其實“加載器”這隻是人為起的名字,突顯了其功能,并不是多麼神秘的東西,本質上它就是一堆函數組成的子產品,不要因為未知的東西而感到畏懼。
從按下主機上的power鍵後,第一個運作的軟體是bios。于是産生了三個問題。
(1)它是由誰加載的。
(2)它被加載到哪裡。
(3)它的cs:ip是誰來更改的。