第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版中,不但實現了保護模式,也將多任務管理的原型給做出來了。

“厲害!”

“很棒!”

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

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

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

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

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

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

他想要做的,就是將之前linus一直到minix中的bash,也就是外殼程序,移植到linux中。

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

bash本身就是一個開源的程序,可以從互聯網上免費下載,但是林鴻手中有它的源代碼,還是上次linus郵寄給他的。

編寫這個,必須得實現一些操作系統的系統調用命令,例如顯示目錄“ls”命令,進入目錄“cd”命令,這些都是最基本的。

系統調用有很多,林鴻暫時打算先將minix裡面所支持的完成即可。其他的,以後再說。

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

移植的過程比想象當中的要難一點,不過好在linux使用的文件系統和minix是一樣的,在太陽在東方升起的時候,他已經將bash程序移植得差不多了。

第640章 又一個驚喜第295章 頭皮發炸第272章 超腦系統第172章 神秘人zero第640章 又一個驚喜第363章 克萊爾的遺憾第207章 神秘好友第518章 舒小嫺的夢境第152章 鷹眼被捕第52章 給他們加點料第88章 難以理解第43章 值得一交第537章 難啃的英雄無敵第77章 紐約口音第34章 彩電真好看第597章 商討第53章 苦逼的中國火腿族第265章 新的計劃第9章 算你贏了第550章 狙擊目標第440章 小仙的願望第254章 槍戰第493章 地下一層第622章 逆襲第45章 有着專業用途的計算機第440章 小仙的願望第443章 瘋狂的程序員第54章 菲麗絲和石頭大叔第637章 耳釘電池第469章 溢出漏洞第689章 藍瑞製藥第7章 來自京城的聲音(下)第336章 美女評分第178章 保羅第211章 形意道館第406章 快速切入第295章 頭皮發炸第581章 左擁右抱第253章 以蠕殺蠕第362章 監聽第437章 美麗的大眼睛第555章 項三小姐第541章 低調的香港黑客第438章 山寨手語第29章 “四穿”和“四梢”精神訓練第460章 較量第239章 到底是誰第463章 信息安全對抗演習第328章 腦子進水第641章 得救第182章 協會bbs第714章 維基解密第653章 治療方案第679章 實驗事故第150章 lus? linus!第30章 KOCH訓練法第42章 借幾個遊戲幣玩玩第255章 實驗第407章 極品美女第143章 信息大爆炸第259章 生存狂第57章 紅白機第102章 赴約第358章 請假第563章 清脆的響聲第153章 超級黑客第580章 桃色八卦第306章 我願意第145章 手稿第267章 變故第50章 BD7XZZ參賽!第207章 神秘好友第337章 網站出爐解釋一下關於q羣的事第62章 根本看不懂第657章 實驗操作第361章 探視第18章 違反條例第123章 偶遇第388章 中間人攻擊第234章 浮出水面第304章 關馨的心事第461章 你們在幹什麼第15章 老實交代第530章 意識空間第626章 預警信號第634章 包圍第639章 天樞第620章 不過如此第74章 角落的紙箱第610章 創世聖經第671章 語言第634章 包圍第346章 製作電路板第437章 美麗的大眼睛第86章 參觀俱樂部第515章 耍他玩?第616章 三年第314章 密碼朋克第555章 項三小姐
第640章 又一個驚喜第295章 頭皮發炸第272章 超腦系統第172章 神秘人zero第640章 又一個驚喜第363章 克萊爾的遺憾第207章 神秘好友第518章 舒小嫺的夢境第152章 鷹眼被捕第52章 給他們加點料第88章 難以理解第43章 值得一交第537章 難啃的英雄無敵第77章 紐約口音第34章 彩電真好看第597章 商討第53章 苦逼的中國火腿族第265章 新的計劃第9章 算你贏了第550章 狙擊目標第440章 小仙的願望第254章 槍戰第493章 地下一層第622章 逆襲第45章 有着專業用途的計算機第440章 小仙的願望第443章 瘋狂的程序員第54章 菲麗絲和石頭大叔第637章 耳釘電池第469章 溢出漏洞第689章 藍瑞製藥第7章 來自京城的聲音(下)第336章 美女評分第178章 保羅第211章 形意道館第406章 快速切入第295章 頭皮發炸第581章 左擁右抱第253章 以蠕殺蠕第362章 監聽第437章 美麗的大眼睛第555章 項三小姐第541章 低調的香港黑客第438章 山寨手語第29章 “四穿”和“四梢”精神訓練第460章 較量第239章 到底是誰第463章 信息安全對抗演習第328章 腦子進水第641章 得救第182章 協會bbs第714章 維基解密第653章 治療方案第679章 實驗事故第150章 lus? linus!第30章 KOCH訓練法第42章 借幾個遊戲幣玩玩第255章 實驗第407章 極品美女第143章 信息大爆炸第259章 生存狂第57章 紅白機第102章 赴約第358章 請假第563章 清脆的響聲第153章 超級黑客第580章 桃色八卦第306章 我願意第145章 手稿第267章 變故第50章 BD7XZZ參賽!第207章 神秘好友第337章 網站出爐解釋一下關於q羣的事第62章 根本看不懂第657章 實驗操作第361章 探視第18章 違反條例第123章 偶遇第388章 中間人攻擊第234章 浮出水面第304章 關馨的心事第461章 你們在幹什麼第15章 老實交代第530章 意識空間第626章 預警信號第634章 包圍第639章 天樞第620章 不過如此第74章 角落的紙箱第610章 創世聖經第671章 語言第634章 包圍第346章 製作電路板第437章 美麗的大眼睛第86章 參觀俱樂部第515章 耍他玩?第616章 三年第314章 密碼朋克第555章 項三小姐