簡體版 繁體版 第209章 LINUX第一版

第209章 LINUX第一版


弟弟情人 韓娛之金鐘國 奉令成婚 晶武至尊 風雲格安特 武動蒼冥 網前殺手 重生之冷君暖心 凡女仙塵 異世之逆天妖女

第209章 LINUX第一版

LINUS發過來的原始碼包,總共大概12000行程式碼,他編寫這些程式碼總共花費了十天左右的時間,要是算上之前為此而準備的時間,則至少還要加上一個月。而林鴻將這些程式碼閱讀完畢,卻只花了大概三個小時就看完了。

林鴻發現,裡面很多地方都借鑑了MINIX的寫法,畢竟之前LINUS一直都在研究MINIX,從上面借鑑了不少特點和功能。例如,檔案系統的結構。

MINIX的檔案系統是模仿UNIX來寫的,只有將檔案系統實現了,才有可能對磁碟進行讀寫,可以說檔案系統就是對磁碟的管理程式。雖然現在的LINUX並沒有涉及到磁碟的讀寫功能,但是這個一部分LINUS還是將其實現了出來。

按照程式設計的慣例,通常第一個程式都是實現“HELLO,WOLRD”,LINUS也曾經在顯示器上列印過這個語句,但是他發給林鴻的這個版本的功能,已經不僅僅是這麼簡單了。

他在這個版本中實現了兩個重要的功能,即保護模式和多程序。

這兩個特點是DOS系統所不具備的,被視為現代作業系統的重要功能。

“保護模式”是針對記憶體的一個說法。

INTEL公司在1978年釋出了一個16位的CPU,即8086,這個CPU是INTEL歷史上一個重要的里程碑,是奠定了INTEL在PC領域晶片的最最要的產品之一。

8086CPU總有20根地址線,可以最大定址2的16次方,也就是1MB的地址空間。

這就是基於8086CPU的計算機所能支援的最大記憶體地址,這個模式被稱為“真實模式”。DOS系統就是工作在這個模式下。

真實模式只支援最多1MB的記憶體。就林鴻想要升級自己正在使用的這臺康柏計算機,在記憶體條上再加一條1MB的記憶體,DOS系統也識別不出來,根本無濟於事,效能沒有任何提升。

這是16位CPU的硬體結構所決定的,在當時1MB記憶體已經相當不錯。所有應用程式都足夠使用。

不過,在電子領域,存在著“摩爾定律”,積體電路不斷迅速發展,很快8086CPU就無法滿足要求了。

於是INTEL便在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……”這樣的字元。

看著顯示器上不斷出現的AB字元,林鴻知道,這一次啟動過程已經完畢。他已經看到了LINUS所編寫的功能。

要是其他不懂技術的人看到這種情況,必定會對此嗤笑一聲,道:“這也叫作業系統?開玩笑吧!”

實際上,當初LINUS將這個版本編寫出來之後,就興奮地叫來他的妹妹薩拉來觀看。這畢竟是他花費了極大的心思而編寫出來的作品,努力了這麼久,終於成功了,自然想和其他人分享一下自己的喜悅。

可是抱著泰迪熊的薩拉盯著顯示屏看了大約五秒之後,說了一聲“很好”,便面無表情地回到房間內和她的閨蜜煲電話粥去了。

LINUS為此愣了半天,良久才反應過來,自己和不懂技術的人是完全沒有共同語言的。他竟然奢望自己的妹妹能夠看懂自己所做的努力和成果。這簡直太天真了。

在對方眼中,這就是簡單的顯示了幾個字元,完全沒有什麼特別之處,也完全不知道做這麼一個功能到底有什麼意義。

不過,林鴻對此卻是知道,顯示屏上不斷交替顯示的AB字元,是由兩個程序列印在螢幕上的。也就是說,LINUS在這個V0.00版中,不但實現了保護模式,也將多工管理的原型給做出來了。

“厲害!”

“很棒!”

“NICEJOB!”

這些都是林鴻對LINUS的評價。

這部分內容,看起來雖然都能夠理解。但是林鴻知道,如果讓自己編寫出來。要花費的時間和精力肯定比對方要多。並不是因為自己的技術不到家,而是自己在這方面的理解還不夠深刻,或者說,這方面的資料太少了,僅僅憑藉一本《作業系統設計與實現》根本寫不出來,還涉及到其他很多知識的積累。

平時林鴻看待計算機,是從巨集觀的角度觀察和使用的,可是當他看到這個最原始的作業系統的時候,頓時有了一種在顯微鏡下觀察的感覺。

所有的黑匣子都沒有了,他心中清楚地知道計算機下一步將要做什麼,一切細節都一覽無餘。

此刻已經是凌晨兩點多,林鴻本來很想和LINUS溝通一下,可是對方此刻並不在線。

於是,他心情激動之下,便開始正式開始投入到LINUX的開發之中。

他想要做的,就是將之前LINUS一直到MINIX中的BASH,也就是外殼程式,移植到LINUX中。

外殼程式非常重要,它可以說是所有程式之母,只有將它移植過來,才能夠順利地執行其他應用程式。

BASH本身就是一個開源的程式,可以從網際網路上免費下載,但是林鴻手中有它的原始碼,還是上次LINUS郵寄給他的。

編寫這個,必須得實現一些作業系統的系統呼叫命令,例如顯示目錄“LS”命令,進入目錄“CD”命令,這些都是最基本的。

系統呼叫有很多,林鴻暫時打算先將MINIX裡面所支援的完成即可。其他的,以後再說。

為了避免LINUS進行重複開發,他首先給對方發了一封EMAIL,然後便埋頭開發。

移植的過程比想象當中的要難一點,不過好在LINUX使用的檔案系統和MINIX是一樣的,在太陽在東方升起的時候,他已經將BASH程式移植得差不多了。(未完待續)