第113部分(第2/4 頁)
l便在1985年推出了8086的升級版本80386。
這一次,暫存器的位數被翻了一倍,從16位升級到32位。
80386cpu增加了不少優點,不但定址空間大大,而且還引入了多工處理和保護模式的概念。
保護模式下,對記憶體的管理已經不再是以前的分段式結構,而是變成了分頁機制,這種機制有非常大的優點,可以讓記憶體管理效能得到極大的提升。
但是,在計算機領域,有一種“向前相容”的規則,也就是說,80386必須相容8086cpu的機制,以前在那個上面能執行的程式,在升級後的cpu上也能執行。
所以在預設情況下,這個“保護模式”是沒有被開啟來的,使用的還是“真實模式”。
而要想開啟“保護模式”,則需要用程式碼對第20號地址線進行操作,將其“喚醒”,它就是進入保護模式的守門人,必須透過它的同意才行。
說起來簡單,但是整個過程具體實現起來卻是相當複雜的。
這也是linus為什麼花了這麼長時間才最終將v0。00版編寫完畢的原因。
他們想讓linux跟上時代的發展,讓linux未來的功能能夠和現在的這些最新作業系統相媲美,進入保護模式是必不可少的,因為只有進入了保護模式才能最大程度地發揮出80386cpu的最大效能。
林鴻之前看《作業系統設計與實現》的時候,在這部分看得非常迷糊,專門還去查了不少資料,可是心中還是對這種機制有些想不通,為什麼要這樣設計。…;
但是,今天他看到了linus的實現程式碼之後,頓時有一種突然頓悟的感覺。
與平時程式設計的時候,不用去關心硬體底層結構不同,作業系統的底層程式碼卻是和硬體緊密相連。最初的那boot和loader程式,都必須用匯編才能勝任,精確到cpu的某一個暫存器,也精確到磁碟的某一個扇區。
要想理解這些程式碼,必須對cpu和磁碟的硬體結構瞭解得非常清楚。例如cpu有多少引腳,裡面有多少個暫存器,每一個暫存器的作用又是什麼。
好在這些技術引數,intel有著非常詳細地技術文件。這麼小小的一塊晶片,涉及到的技術資料卻是幾本厚厚的大部頭書籍。
林鴻不得不感嘆,這小小的晶片之中,承載的卻是人類文明中最先進的知識結晶,將人類的智慧發揮到了極處,每一個引腳,沒一個暫存器都是經過了千百次不斷試驗之後才最終定下來的。
林鴻按照linus在裡面寫的說明文件,將開發環境配置好,然後在minix平臺下對這份程式碼進行了編譯。
修復了幾個細小的bug之後,他最終將linux的映象檔案給編譯出來了。
他只有一臺計算機,所以最終只好將這個linux安裝在了本機上。
當然,他使用的又是多系統安裝方式,其他兩個系統並沒有受到影響。
重啟之後,他選擇了“linux_v0。00”選單,然後回車。
顯示器上頓時閃現一連串的字元,不斷向上刷動。
此刻,林鴻已經對計算機啟動的詳細過程有了非常深刻的認識,不再像以前那樣,根本不知道計算機到底在做什麼。
當電源開關被按下的時候,機器就開始通電,主機板的控制晶片於是向cpu傳送一個重置訊號,將cpu恢復到最初始的狀態,當晶片組檢測到cpu上的供電穩定的時候,cpu就會開始工作。
它要做的第一件事就是從記憶體中的0xffff0地址處讀取指令執行。
而這個地址中,通常會有一個跳轉指令,跳轉到bios的自檢系統處,這個時候便開始了自檢過程。bios是主機板廠商早就刷在了韌體裡面的一個系統,目的就是對硬體進行管理。
自檢的目的,是為了檢測計算機各部分硬體是否正常,如果缺少或者有損壞的硬體,則啟動就會立刻被掛起。
只有所有硬體檢測都被透過之後,才會最終跳轉到第一個扇區,讀取mbr,開始執行安裝在磁碟上的作業系統。
而linus完成的功能,就是在讀取mbr之後,如何將作業系統載入到記憶體裡面進行執行。
這個過程很快,字元不斷向上重新整理,硬體檢測很快結束,接著顯示屏一閃,頓時最頂部便出現了“aaaaaabbbb……”這樣的字元。
看著顯示器
本章未完,點選下一頁繼續。