這件事情,雖然無論是律師還是各自的家長都認為因為缺乏先例,再加上他們又是學生創業,就算是被罰,也不會太嚴重,但是SAM成員心中還是被蒙上了一層陰影。////
畢竟這是他們第一次遇到這種情況,之前根本沒有想過此類方面的問題。
他們發現,要想真正做好一件事,除了埋頭解決技術方面的事情,還會碰到其他一些預想不到的情況。之前這些瑣事都被馬修一個人給處理了,在這些人當中,馬修算是對外能力最強的一個。
可是現在,這件事的出現,讓他們真正感覺到了校園之外的沖擊。這些事情如果只是安安分分在學校讀書,是絕對碰不到的。SAM公司成為了他們涉足社會的一個媒介,給他們林鴻、亞瑟以及馬修三人的內心都造成了比較大的影響,以至于以后他們各自創業的時候,都會事先考慮自己所做的事情,是否違反了當地法律,有哪些事情需要提前做好準備?
林鴻回到自己的房間,將這件事情拋在腦后,繼續開始完善BASH外殼程序的系統調用功能。
由于已經完成了BASH的基本框架,實現起系統調用速度比之前要提升了十倍以上,地基打好了,上面的建筑建起來就快了。
所以,在午夜十二點之前,他就完成了總共二十多個系統調用,即將當初LINUS移植到MINIX里面的所有功能都給搞定了。
他登上CQCQ,看到LINUS正好也在線,于是便發了個消息給他,然后將源代碼直接在線傳給了對方。
LINUS:伙計。你的效率真快,移植了BASH,以后的編寫工作會要大大加速了!
STONE:下一步是不是可以將GCC移植過來?這樣我們可以不用再切換到MINIX的環境中編譯系統了,直接在LINUX平臺下編譯。
LINUS:我這兩天本來正打算著手做這件事。但是現在我有一個新的想法。
STONE:說來聽聽。
LINUS:我覺得我們應該另外實現一個文件系統,而不是直接使用MINIX的文件系統。
在此之前,為了降低編寫代碼的難度,LINUS從MINIX中借鑒了很多代碼,其中最為完整的就是文件系統的實現。
LINUS:MINIX的文件系統是專門為微內核設計的,當初在設計的時候也只考慮過教學用途。目的是為了更好的讓學生理解,根本無法真正用在大型操作系統上,在性能上有著致命的缺陷,我想你也應該發現了這點。
林鴻對此表示贊同。
MINIX系統在文件處理方面的效率的確有些慢了,剛開始的時候還感覺不到,但是在他編譯系統的時候,就極其明顯了。文件一多,搜索查找以及讀取文件的效率就變得極為緩慢。在這點上,還比不上DOS系統。
MINIX的文件系統是模仿Unix的文件系統而設計的,其數據結構整體上和Unix文件系統大致相同,大致也可分為引導塊、超塊、柱面、節點等。
但是作者安德魯這個系統本身是用來作為教學用的,所以在設計的時候,就考慮到要讓學生能夠比較容易理解,將其中的一些復雜實現就省略了。只保留了其骨架,進行適當修改之后,能夠讓其正常運轉。并沒有經過大量文件存儲方面的性能測試。
當磁盤中文件比較少的時候,根本感覺不到其中的差異。
但是,LINUS在編寫LINUX操作系統的時候,代碼雖然不是很多,也就一萬兩千行左右,但是這一萬兩千行代碼并不是只在一個文件里面,而是分布在多大幾十個文件和上十個目錄當中。
在編譯系統的時候,編譯器會按照編譯索引文件Makefile來按照順序對這些源代碼一個一個地查找。并鏈接起來,然后再統一進行編譯。
按理說來,只有這么點文件,這個過程應該是非常快的,但是事實證明。要想將LINUX的V0.00版本編譯出來,都至少要花費四十分鐘的時間。
當初林鴻一直PKZIP那么一個小軟件的時候。都花費了十分鐘左右的時間。
這樣的效率實在太低了,要是在Unix或者DOS下,所花費的時間可能只有五分之一甚至十分之一。
LINUS于是便開始尋找到底哪里出現問題,為什么會導致編譯速度如此緩慢。
最終他發現,原來這是MINIX文件系統設計方面的原因,他覺得有必要對這點進行改變了,他可不想將這樣一個文件系統移植到LINUX里面,那簡直就像是在美餐一頓的時候吃了一只蒼蠅那么惡心。
身為技術宅LINUS是絕對不允許這樣的情況出現在LINUX中的。
林鴻也覺得這個問題的確很重要,文件系統是操作系統的基石,如果地基不打好,會直接影響到上層建筑的高度。
LINUS:我最近這段時間都在想這個問題,接下來會正是著手開始設計了。不過在此之前,我會先解決一件更為重要的事情。
STONE:更為重要的事情?
LINUS:每一個男人都要經歷過的事情啊,你懂的,哈哈!
STONE:不懂。
LINUS:……差點忘記你的年齡似乎比我要小不少了。我要去追求一位心儀的女孩,這該懂了吧?
林鴻看到LINUS的話,頓時有些汗顏。他剛剛的確沒有反應過來,這也不能怪他。剛剛他們還在討論技術方面的問題,突然之間就跳躍到追求女孩的話題上,作為一個世紀年齡才十四歲的中國籍技術宅來說,能想到這個問題才怪。
STONE:原來如此。那預祝你馬到成功。早日抱得美人歸。
LINUS:哈哈,謝謝!
LINUS:對了,之前忘記跟你說了,你移植BASH的時候最好是按照POSIX的標準來,這樣可以讓我們的系統獲得更大的兼容性,以后那些UNIX的用戶轉移到我們的LINUX中來也不會有任何障礙。
STONE:POSIX標準
LINUS:這是IEEE組織為要在各種UNIX操作系統上運行的軟件而定義API的一系列互相關聯的標準的總稱。最初起源于1985年的一個項目……
接著,LINUS開始給林鴻詳細介紹了一下這個標準的有關內容。
實際上,LINUS之前也對這個標準一點都不清楚,只是聽學校的老師曾經說起過,因為這個標準是UNIX下的標準,統一規定了所有系統命令的實現細節。
于是,剛開始的時候。他便在MINIX的郵件討論組中發布了一個求助帖子,尋求有關POSIX的相關標準下載地址,可是這個帖子并沒有獲得幾個人的關注和回應,他沒有找到POSIX的相關資料。
于是,他只好退而求其次,找來一份SUN服務器的UNIX使用手冊,按照上面的命令調用一個個對這些系統命令進行實現。
但是,這份UNIX手冊上并沒有詳細說明這些命令所實現的內部細節。只描寫了結果。
例如LS命令,手冊上只描寫了這個命令的結果,以及可以加上哪些參數實現。如“LSALL”可以將當前目錄下所有的文件,包括隱藏文件在內,都顯示出來。
具體的實現方式,則是LINUS按照文件系統中的原理自己想出來的,例如首先要找到當前目錄的引導區,然后再分析里面的文件節點,從這些節點中讀出每一個文件的名稱,大小以及創建日期等信息。然后再將其顯示在顯示器屏幕上。
要實現這些系統調用的功能,必須對底層的基本原理非常了解,當然這并不能難倒LINUS,否則他還談什么編寫自己的操作系統?
他按照UNIX手冊和《操作系統:設計與實現》中所提及到的資料,總共實現了二十來個系統調用。這正是林鴻在LINUX中所實現的那些。
LINUS:前一陣子才有一個朋友給我寄了幾卷厚厚的POSIX的手冊,不過既然現在你已經開始移植BASH了。接下來的工作你就繼續做著吧。
STONE:從哪里可以找到POSIX的手冊?
LINUS:這點我也不太清楚。不過,你身在美國,應該不難,去圖書商城或者圖書館看看,應該可以找到。我這幾本POSIX手冊的出版社是……
接著,LINUS將出版社和地址方面的信息全部提供給了林鴻,讓他如果實在找不到,就按照這些信息去找,直接向出版社郵購也行。
LINUS:還有,我一個朋友手里正好有基于蘋果系統的服務器,上次我讓他試用了一下CQCQ軟件,他愿意免費將服務器端進行托管,你覺得怎么樣?
LINUS說的事情,是上次林鴻提到自己想要將CQCQ的服務器端托管到另外的地方,于是LINUS就留心了一下。
STONE:可以。我把服務器端的安裝文件傳給你。
隨著訪問用戶的增多,SAM官方的那個服務器的性能有點跟不上了,再加上最近又出現了德州儀器公司的那檔子事情,林鴻最終同意將服務器端轉走。
原本林鴻還打算將CQCQ發布出去,讓更多的人使用,并且繼續改進,可是上次和凱文聊過一次之后,他的這個計劃便擱淺了。
他決定重新設計CQCQ的結構,增加其安全性,然后再發布出去。
目前這個版本,暫時就用來內部幾個人溝通吧,等將服務器端移走之后,林鴻便決定推薦這個軟件SAM其他成員使用。