第209章 LINUX第一版
linus發(fā)過(guò)來(lái)的源碼包,總共大概12000行代碼,他編寫這些代碼總共huā費(fèi)了十天左右的時(shí)間,要是算上之前為此而準(zhǔn)備的時(shí)間,則至少還要加上一個(gè)月-好看的:。3∴35686688而林鴻將這些代碼閱讀完畢,卻只huā了大概三個(gè)小時(shí)就看完了。
林鴻發(fā)現(xiàn),里面很多地方都借鑒了minix的寫法,畢竟之前l(fā)inus一直都在研究minix,從上面借鑒了不少特點(diǎn)和功能。例如,文件系統(tǒng)的結(jié)構(gòu)。
minix的文件系統(tǒng)是模仿unix來(lái)寫的,只有將文件系統(tǒng)實(shí)現(xiàn)了,才有可能對(duì)磁盤進(jìn)行讀寫,可以說(shuō)文件系統(tǒng)就是對(duì)磁盤的管理程序。雖然現(xiàn)在的linux并沒(méi)有涉及到磁盤的讀寫功能,但是這個(gè)一部分linus還是將其實(shí)現(xiàn)了出來(lái)。
按照編程的慣例,通常第一個(gè)程序都是實(shí)現(xiàn)“hello,olrd”,linus也曾經(jīng)在顯示器上打印過(guò)這個(gè)語(yǔ)句,但是他發(fā)給林鴻的這個(gè)版本的功能,已經(jīng)不僅僅是這么簡(jiǎn)單了。
他在這個(gè)版本中實(shí)現(xiàn)了兩個(gè)重要的功能,即保護(hù)模式和多進(jìn)程。
這兩個(gè)特點(diǎn)是dos系統(tǒng)所不具備的,被視為現(xiàn)代cào作系統(tǒng)的重要功能。
“保護(hù)模式”是針對(duì)內(nèi)存的一個(gè)說(shuō)法。
intel公司在1978年發(fā)布了一個(gè)16位的cpu,即8086,這個(gè)cpu是intel歷史上一個(gè)重要的里程碑,是奠定了intel在pc領(lǐng)域芯片的最最要的產(chǎn)品之一。
8086cpu總有20根地址線,可以最大尋址2的16次方,也就是1mb的地址空間-好看的:。
這就是基于8086cpu的計(jì)算機(jī)所能支持的最大內(nèi)存地址,這個(gè)模式被稱為“實(shí)模式”。dos系統(tǒng)就是工作在這個(gè)模式下。
實(shí)模式只支持最多1mb的內(nèi)存。就林鴻想要升級(jí)自己正在使用的這臺(tái)康柏計(jì)算機(jī),在內(nèi)存條上再加一條1mb的內(nèi)存,dos系統(tǒng)也識(shí)別不出來(lái),根本無(wú)濟(jì)于事,xing(圣王txt下載)能沒(méi)有任何提升。
這是16位cpu的硬件結(jié)構(gòu)所決定的,在當(dāng)時(shí)1mb內(nèi)存已經(jīng)相當(dāng)不錯(cuò)。所有應(yīng)用程序都足夠使用。
不過(guò),在電子領(lǐng)域,存在著“摩爾定律”,集成電路不斷迅速發(fā)展,很快8086cpu就無(wú)法滿足要求了。
于是intel便在1985年推出了8086的升級(jí)版本80386。
這一次,寄存器的位數(shù)被翻了一倍,從16位升級(jí)到32位。
80386cpu增加了不少優(yōu)點(diǎn),不但尋址空間大大,而且還引入了多任務(wù)處理和保護(hù)模式的概念。器:無(wú)廣告、全文字、更
保護(hù)模式下,對(duì)內(nèi)存的管理已經(jīng)不再是以前的分段式結(jié)構(gòu)。而是變成了分頁(yè)機(jī)制,這種機(jī)制有非常大的優(yōu)點(diǎn),可以讓內(nèi)存管理xing(圣王txt下載)能得到極大的提升。
但是,在計(jì)算機(jī)領(lǐng)域,有一種“向前兼容”的規(guī)則,也就是說(shuō),80386必須兼容8086cpu的機(jī)制,以前在那個(gè)上面能運(yùn)行的程序。在升級(jí)后的cpu上也能運(yùn)行。
所以在默認(rèn)情況(求魔最新章節(jié))下,這個(gè)“保護(hù)模式”是沒(méi)有被打開來(lái)的,使用的還是“實(shí)模式”。
而要想打開“保護(hù)模式”,則需要用代碼對(duì)第20號(hào)地址線進(jìn)行cào作,將其“喚醒”。它就是進(jìn)入保護(hù)模式的守mén人,必須通過(guò)它的同意才行。
說(shuō)起來(lái)簡(jiǎn)單,但是整個(gè)過(guò)程具體實(shí)現(xiàn)起來(lái)卻是相當(dāng)復(fù)雜的-好看的:。
這也是linus為什么huā了這么長(zhǎng)時(shí)間才最終將版編寫完畢的原因。
他們想讓linux跟上時(shí)代的發(fā)展,讓linux未來(lái)的功能能夠和現(xiàn)在的這些最新cào作系統(tǒng)相媲美,進(jìn)入保護(hù)模式是必不可少的,因?yàn)橹挥羞M(jìn)入了保護(hù)模式才能最大程度地發(fā)揮出80386cpu的最大xing(圣王txt下載)能。
林鴻之前看《cào作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》的時(shí)候,在這部分看得非常mi糊,專mén還去查了不少資料。可是心中還是對(duì)這種機(jī)制有些想不通,為什么要這樣設(shè)計(jì)。
但是,今天他看到了linus的實(shí)現(xiàn)代碼之后,頓時(shí)有一種突然頓悟的感覺。
與平時(shí)編程的時(shí)候,不用去關(guān)心硬件底層結(jié)構(gòu)不同,cào作系統(tǒng)的底層代碼卻是和硬件緊密相連。最初的那boot和load兒程序,都必須用匯編才能勝任。jing確到cpu的某一個(gè)寄存器,也jing確到磁盤的某一個(gè)扇區(qū)。
要想理解這些代碼,必須對(duì)cpu和磁盤的硬件結(jié)構(gòu)了解得非常清楚。例如cpu有多少引腳,里面有多少個(gè)寄存器,每一個(gè)寄存器的作用又是什么。
有著非常詳細(xì)地技術(shù)文檔。這么小小的一塊芯片,涉及到的技術(shù)資料卻是幾本厚厚的大部頭書籍。
林鴻不得不感嘆。這小小的芯片之中,承載的卻是人類文明中最先進(jìn)的知識(shí)結(jié)晶,將人類的智慧發(fā)揮到了極處,每一個(gè)引腳,沒(méi)一個(gè)寄存器都是經(jīng)過(guò)了千百次不斷試驗(yàn)之后才最終定下來(lái)的。
林鴻按照l(shuí)inus在里面寫的說(shuō)明文檔,將開發(fā)環(huán)境配置好,然后在minix平臺(tái)下對(duì)這份代碼進(jìn)行了編譯。
修復(fù)了幾個(gè)細(xì)小的bug之后,他最終將linux的鏡像文件給編譯出來(lái)了。
他只有一臺(tái)計(jì)算機(jī),所以最終只好將這個(gè)linux安裝在了本機(jī)上。
當(dāng)然,他使用的又是多系統(tǒng)安裝方式,其他兩個(gè)系統(tǒng)并沒(méi)有受到影響。
重啟之后,他選擇了菜單,然后回車。
顯示器上頓時(shí)閃現(xiàn)一連串的字符,不斷向上刷動(dòng)。
此刻,林鴻已經(jīng)對(duì)計(jì)算機(jī)啟動(dòng)的詳細(xì)過(guò)程有了非常深刻的認(rèn)識(shí),不再像以前那樣。根本不知道計(jì)算機(jī)到底在做什么。
當(dāng)電源開關(guān)被按下的時(shí)候,機(jī)器就開始通電,主板的控制芯片于是向cpu發(fā)送一個(gè)重置信號(hào),將cpu恢復(fù)到最初始的狀態(tài),當(dāng)芯片組檢測(cè)到cpu上的供電穩(wěn)定的時(shí)候,cpu就會(huì)開始工作。
它要做的第一件事就是從內(nèi)存中的0xffff0地址處讀取指令運(yùn)行。
而這個(gè)地址中。通常會(huì)有一個(gè)跳轉(zhuǎn)指令,跳轉(zhuǎn)到bios的自檢系統(tǒng)處,這個(gè)時(shí)候便開始了自檢過(guò)程。bios是主板廠商早就刷在了固件里面的一個(gè)系統(tǒng),目的就是對(duì)硬件進(jìn)行管理。
自檢的目的,是為了檢測(cè)計(jì)算機(jī)各部分硬件是否正常,如果缺少或者有損壞的硬件,則啟動(dòng)就會(huì)立刻被掛起。
只有所有硬件檢測(cè)都被通過(guò)之后,才會(huì)最終跳轉(zhuǎn)到第一個(gè)扇區(qū),讀取mbr,開始執(zhí)行安裝在磁盤上的cào作系統(tǒng)。
而linus完成的功能。就是在讀取mbr之后,如何將cào作系統(tǒng)加載到內(nèi)存里面進(jìn)行執(zhí)行。
這個(gè)過(guò)程很快,字符不斷向上刷新,硬件檢測(cè)很快結(jié)束,接著顯示屏一閃,頓時(shí)最頂部便出現(xiàn)了“aaaaaabbbb……”這樣的字符-其他書友正在看:。
看著顯示器上不斷出現(xiàn)的ab字符,林鴻知道,這一次啟動(dòng)過(guò)程已經(jīng)完畢。他已經(jīng)看到了linus所編寫的功能。
要是其他不懂技術(shù)的人看到這種情況(求魔最新章節(jié)),必定會(huì)對(duì)此嗤笑一聲,道:“這也叫cào作系統(tǒng)?開玩笑吧!”
實(shí)際上,當(dāng)初linus將這個(gè)版本編寫出來(lái)之后,就興奮地叫來(lái)他的妹妹薩拉來(lái)觀看。這畢竟是他huā費(fèi)了極大的心思而編寫出來(lái)的作品,努力了這么久,終于成功了,自然想和其他人分享一下自己的喜悅。
可是抱著泰迪熊的薩拉盯著顯示屏看了大約五秒之后,說(shuō)了一聲“很好”,便面無(wú)表情地回到房間內(nèi)和她的閨蜜煲電話粥去了。
linus為此愣了半天,良久才反應(yīng)過(guò)來(lái),自己和不懂技術(shù)的人是完全沒(méi)有共同語(yǔ)言的。他竟然奢望自己的妹妹能夠看懂自己所做的努力和成果。這簡(jiǎn)直太天真了。
在對(duì)方眼中,這就是簡(jiǎn)單的顯示了幾個(gè)字符,完全沒(méi)有什么特別之處,也完全不知道做這么一個(gè)功能到底有什么意義。
不過(guò),林鴻對(duì)此卻是知道,顯示屏上不斷jiāo替顯示的ab字符,是由兩個(gè)進(jìn)程打印在屏幕上的。也就是說(shuō),linus在這個(gè)版中,不但實(shí)現(xiàn)了保護(hù)模式,也將多任務(wù)管理的原型給做出來(lái)了。
“厲害!”
“很bāng!”
“nicejob!”
這些都是林鴻對(duì)linus的評(píng)價(jià)。
這部分內(nèi)容,看起來(lái)雖然都能夠理解。但是林鴻知道,如果讓自己編寫出來(lái)。要huā費(fèi)的時(shí)間和jing力肯定比對(duì)方要多。并不是因?yàn)樽约旱募夹g(shù)不到家,而是自己在這方面的理解還不夠深刻,或者說(shuō),這方面的資料太少了,僅僅憑借一本《cào作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》根本寫不出來(lái),還涉及到其他很多知識(shí)的積累。
平時(shí)林鴻看待計(jì)算機(jī),是從宏觀的角度觀察和使用的,可是當(dāng)他看到這個(gè)最原始的cào作系統(tǒng)的時(shí)候,頓時(shí)有了一種在顯微鏡下觀察的感覺。
所有的黑匣子都沒(méi)有了,他心中清楚地知道計(jì)算機(jī)下一步將要做什么,一切細(xì)節(jié)都一覽無(wú)余。
此刻已經(jīng)是凌晨?jī)牲c(diǎn)多,林鴻本來(lái)很想和linus溝通一下,可是對(duì)方此刻并不在線。
于是,他心情ji動(dòng)之下,便開始正式開始投入到linux的開發(fā)之中。
他想要做的,就是將之前l(fā)inus一直到minix中的bash,也就是外殼程序,移植到linux中。
外殼程序非常重要,它可以說(shuō)是所有程序之母,只有將它移植過(guò)來(lái),才能夠順利地執(zhí)行其他應(yīng)用程序。
bash本身就是一個(gè)開源的程序,可以從互聯(lián)網(wǎng)上免費(fèi)下載,但是林鴻手中有它的源代碼,還是上次linus郵寄給他的。
編寫這個(gè),必須得實(shí)現(xiàn)一些cào作系統(tǒng)的系統(tǒng)調(diào)用命令,例如顯示目錄“l(fā)s”命令,進(jìn)入目錄“cd”命令,這些都是最基本的。
系統(tǒng)調(diào)用有很多,林鴻暫時(shí)打算先將minix里面所支持的完成即可。其他的,以后再說(shuō)。
為了避免linus進(jìn)行重復(fù)開發(fā),他首先給對(duì)方發(fā)了一封email,然后便埋頭開發(fā)。
移植的過(guò)程比想象當(dāng)中的要難一點(diǎn),不過(guò)好在linux使用的文件系統(tǒng)和minix是一樣的,在太陽(yáng)在東方升起的時(shí)候,他已經(jīng)將bash程序移植得差不多了。(未完待續(xù))
,