小說博覽 第209章 linux第一版 文 / 瘋狂小強
inu過來的源碼包,總共大概12000行代碼,他編寫這些代碼總共花費了十天左右的時間,要是算上之前為此而準備的時間,則至少還要加上一個月。而林鴻將這些代碼閱讀完畢,卻只花了大概三個小時就看完了。
林鴻現,裡面很多地方都借鑒了ini的寫法,畢竟之前inu一直都研究ini,從上面借鑒了不少特點和功能。例如,件系統的結構。
ini的件系統是模仿uni來寫的,只有將件系統實現了,才有可能對磁盤進行讀寫,可以說件系統就是對磁盤的管理程序。雖然現的inu並沒有涉及到磁盤的讀寫功能,但是這個一部分inu還是將其實現了出來。
按照編程的慣例,通常第一個程序都是實現「h,rd」,inu也曾經顯示器上打印過這個語句,但是他給林鴻的這個版本的功能,已經不僅僅是這麼簡單了。
他這個版本實現了兩個重要的功能,即保護模式和多進程。
這兩個特點是d系統所不具備的,被視為現代操作系統的重要功能。
「保護模式」是針對內存的一個說法。
int公司1978年布了一個16位的pu,即8086,這個pu是int歷史上一個重要的里程碑,是奠定了intp領域芯片的要的產品之一。
8086pu總有20根地址線,可以大尋址2的16次方,也就是1b的地址空間。
這就是基於8086pu的計算機所能支持的大內存地址,這個模式被稱為「實模式」。d系統就是工作這個模式下。
實模式只支持多1b的內存。就林鴻想要升級自己正使用的這台康柏計算機,內存條上再加一條1b的內存,d系統也識別不出來,根本無濟於事,性能沒有任何提升。
這是16位pu的硬件結構所決定的,當時1b內存已經相當不錯。所有應用程序都足夠使用。
不過,電子領域,存著「摩爾定律」,集成電路不斷迅速展,很快8086pu就無法滿足要求了。
於是int便1985年推出了8086的升級版本80386。
這一次,寄存器的位數被翻了一倍,從16位升級到32位。
80386pu增加了不少優點,不但尋址空間大大,而且還引入了多任務處理和保護模式的概念。
保護模式下,對內存的管理已經不再是以前的分段式結構。而是變成了分頁機制,這種機制有非常大的優點,可以讓內存管理性能得到極大的提升。
但是,計算機領域,有一種「向前兼容」的規則,也就是說,80386必須兼容8086pu的機制,以前那個上面能運行的程序。升級後的pu上也能運行。
所以默認情況下,這個「保護模式」是沒有被打開來的,使用的還是「實模式」。
而要想打開「保護模式」,則需要用代碼對第20號地址線進行操作,將其「喚醒」。它就是進入保護模式的守門人,必須通過它的同意才行。
說起來簡單,但是整個過程具體實現起來卻是相當複雜的。
這也是inu為什麼花了這麼長時間才終將000版編寫完畢的原因。
他們想讓inu跟上時代的展,讓inu未來的功能能夠和現的這些操作系統相媲美,進入保護模式是必不可少的,因為只有進入了保護模式才能大程地揮出80386pu的大性能。
林鴻之前看《操作系統設計與實現》的時候,這部分看得非常迷糊,專門還去查了不少資料。可是心還是對這種機制有些想不通,為什麼要這樣設計。
但是,今天他看到了inu的實現代碼之後,頓時有一種突然頓悟的感覺。
與平時編程的時候,不用去關心硬件底層結構不同,操作系統的底層代碼卻是和硬件緊密相連。初的那bt和ad兒程序,都必須用彙編才能勝任。精確到pu的某一個寄存器,也精確到磁盤的某一個扇區。
要想理解這些代碼,必須對pu和磁盤的硬件結構瞭解得非常清楚。例如pu有多少引腳,裡面有多少個寄存器,每一個寄存器的作用又是什麼。
好這些技術參數。int有著非常詳細地技術檔。這麼小小的一塊芯片,涉及到的技術資料卻是幾本厚厚的大部頭書籍。
林鴻不得不感歎。這小小的芯片之,承載的卻是人類明先進的知識結晶,將人類的智慧揮到了極處,每一個引腳,沒一個寄存器都是經過了千次不斷試驗之後才終定下來的。
林鴻按照inu裡面寫的說明檔,將開環境配置好,然後ini平台下對這份代碼進行了編譯。
修復了幾個細小的bug之後,他終將inu的鏡像件給編譯出來了。
他只有一台計算機,所以終只好將這個inu安裝了本機上。
當然,他使用的又是多系統安裝方式,其他兩個系統並沒有受到影響。
重啟之後,他選擇了菜單,然後回車。
顯示器上頓時閃現一連串的字符,不斷向上刷動。
此刻,林鴻已經對計算機啟動的詳細過程有了非常深刻的認識,不再像以前那樣。根本不知道計算機到底做什麼。
當電源開關被按下的時候,機器就開始通電,主板的控制芯片於是向pu送一個重置信號,將pu恢復到初始的狀態,當芯片組檢測到pu上的供電穩定的時候,pu就會開始工作。
它要做的第一件事就是從內存的0ffff0地址處讀取指令運行。
而這個地址。通常會有一個跳轉指令,跳轉到bi的自檢系統處,這個時候便開始了自檢過程。bi是主板廠商早就刷了固件裡面的一個系統,目的就是對硬件進行管理。
自檢的目的,是為了檢測計算機各部分硬件是否正常,如果缺少或者有損壞的硬件,則啟動就會立刻被掛起。
只有所有硬件檢測都被通過之後,才會終跳轉到第一個扇區,讀取br,開始執行安裝磁盤上的操作系統。
而inu完成的功能。就是讀取br之後,如何將操作系統加載到內存裡面進行執行。
這個過程很快,字符不斷向上刷,硬件檢測很快結束,接著顯示屏一閃,頓時頂部便出現了「aaaaaabbbb……」這樣的字符。
看著顯示器上不斷出現的ab字符,林鴻知道,這一次啟動過程已經完畢。他已經看到了inu所編寫的功能。
要是其他不懂技術的人看到這種情況,必定會對此嗤笑一聲,道:「這也叫操作系統?開玩笑!」
實際上,當初inu將這個版本編寫出來之後,就興奮地叫來他的妹妹薩拉來觀看。這畢竟是他花費了極大的心思而編寫出來的作品,努力了這麼久,終於成功了,自然想和其他人分享一下自己的喜悅。
可是抱著泰迪熊的薩拉盯著顯示屏看了大約五秒之後,說了一聲「很好」,便面無表情地回到房間內和她的閨蜜煲電話粥去了。
inu為此愣了半天,良久才反應過來,自己和不懂技術的人是完全沒有共同語言的。他竟然奢望自己的妹妹能夠看懂自己所做的努力和成果。這簡直太天真了。
對方眼,這就是簡單的顯示了幾個字符,完全沒有什麼特別之處,也完全不知道做這麼一個功能到底有什麼意義。
不過,林鴻對此卻是知道,顯示屏上不斷交替顯示的ab字符,是由兩個進程打印屏幕上的。也就是說,inu這個000版,不但實現了保護模式,也將多任務管理的原型給做出來了。
「厲害!」
「很棒!」
「nijb!」
這些都是林鴻對inu的評價。
這部分內容,看起來雖然都能夠理解。但是林鴻知道,如果讓自己編寫出來。要花費的時間和精力肯定比對方要多。並不是因為自己的技術不到家,而是自己這方面的理解還不夠深刻,或者說,這方面的資料太少了,僅僅憑借一本《操作系統設計與實現》根本寫不出來,還涉及到其他很多知識的積累。
平時林鴻看待計算機,是從宏觀的角觀察和使用的,可是當他看到這個原始的操作系統的時候,頓時有了一種顯微鏡下觀察的感覺。
所有的黑匣子都沒有了,他心清楚地知道計算機下一步將要做什麼,一切細節都一覽無餘。
此刻已經是凌晨兩點多,林鴻本來很想和inu溝通一下,可是對方此刻並不線。
於是,他心情激動之下,便開始正式開始投入到inu的開之。
他想要做的,就是將之前inu一直到ini的bah,也就是外殼程序,移植到inu。
外殼程序非常重要,它可以說是所有程序之母,只有將它移植過來,才能夠順利地執行其他應用程序。
bah本身就是一個開源的程序,可以從互聯網上免費下載,但是林鴻手有它的源代碼,還是上次inu郵寄給他的。
編寫這個,必須得實現一些操作系統的系統調用命令,例如顯示目錄「」命令,進入目錄「d」命令,這些都是基本的。
系統調用有很多,林鴻暫時打算先將ini裡面所支持的完成即可。其他的,以後再說。
為了避免inu進行重複開,他先給對方了一封ai,然後便埋頭開。
移植的過程比想像當的要難一點,不過好inu使用的件系統和ini是一樣的,太陽東方升起的時候,他已經將bah程序移植得差不多了。未完待續