007 | linux發展歷史-03
本文為《跟馬哥學Linux》系列文章的第七篇,上一篇文章為《 Linux發展歷史-02》。
同樣的道理在同一款硬件上,我要寫一個播放器A寫一個播放器,B寫一個編輯器,C又寫一個瀏覽器,每一個程序底層都要花大量的時間,為了讓硬件工作起來寫一堆代碼這是完全沒有必要的,想這一段代碼是通用的。對很多程序員來講都需要,既然如此,我們干嘛不找一個來一并做起來呢,這就是一個通用軟件,他什么活也不干,他不是播放器,也不是編輯器。他僅僅時能讓底層工作起來的基本的驅動程序。我把它做成一個框架放到互聯網上,誰要用誰下載,程序員下載后只需要在上面寫程序就夠了而下面的我們成為通用程序,而解決某一需要的就是專用程序。而通用程序后來就演化為的操作系統,這個事情說起來就要往前推一推比如說,最早計算機出現的時候是沒有所謂的操作系統這一說的后來人們發現輸入輸出設備在計算機上認識最薄弱的一環,每一次為了讓計算機能夠運行程序,人需要把我們寫的程序轉換成機器可以理解的格式,而那個時候的計算機的輸入設備叫做穿孔紙帶,輸出設備依然是穿孔紙帶,再后來到了磁帶,磁芯,磁鼓作為輸入設備。輸出就是發光二極管,亮起來就是1不亮就是0。計算機運行的速度很快,人在輸入時很慢讀取輸出時也很慢。這兩個環節太慢了,
等磁帶出現了以后,人們把要運行的程序,做了多個放在磁帶上,按順序的放在磁帶機上,讓電腦能夠自動的讀取磁帶來加載要運行的程序,電腦自動從磁帶機中加載磁帶運行完第一個加載第二個運行完第二個加載第三個。。。。。。我們把他稱為批處理系統叫做batch系統,說白了就是,我們在磁帶上放上放上第一個作業叫做job1中間比如說用四個$隔開再出現的數據就是job2再用四個$隔開就是job3這種就叫做批處理系統,
批處理系統有一個特性,計算機和人的大腦一樣在某一時刻只能做一件事。為什么呢?因為內存只有一個,哪個地方存指令,哪個地方存數據他說了算,cpu也只有一個,所以在某一時刻整個計算機上只能有一個程序,等這個程序運行完了把地方騰出來然后讀取第二個程序,第二個完了在讀取第三個,所以所有的程序不能夠同時的運行那個時候就稱為是單任務的系統,而后來,雖然批處理系統子一定程度上解決了人輸入輸出太慢,但是在某一時刻cpu有大量的時間,都是空閑的時間是浪費的。雖然說輸入輸出用磁帶比人快了很多但是比起cpu的計算能力依然是非常慢的。
同樣的道理,cpu比內存快所以在大量時間cpu還是空閑的,在空跑一。因此人們期望cpu能不能滿負荷的去壓榨cpu的能力。同樣的道理,對于che程序來講cpu的計算能力有很多時間是浪費的,我們能否讓計算機在同一個時刻運行多個任務呢,在批處理時代人們就發現這樣的問題了,那個時候的批處理計算機其實是這個樣子的,有兩組一個是做運算的,一個是讓人寫代碼以后做輸入輸出給存上去的,所以這是一個輔助的機器幫你把數據存上去,存好后放到大計算機上跑。為了計算,我們需要好幾臺計算機結合起來工作。
但到了后來制作工藝越來越強大,計算機的性能越來越強了,但是后面的輸入輸出設備依然跟不上。所以催生了另外一種需求我們能不能多任務,multi 什么叫多任務,就是能夠讓計算機同時跑多個任務,只是個不可能的任務,至少幾乎是一個不可能的任務,cpu只有一個,內存只有一個怎么可能跑多任務,一跑多任務就亂掉了,為了不亂掉怎么辦,比如說我們告訴各位,在萬民廣成上有免費的咖啡一窩蜂就寄過去了,總共就有十個走后噼里啪啦全打啦,誰也喝不上,最近有一本書非常火,叫做烏合之眾,人的群體的智商是小于個體的所以叫烏合之眾。
我們還是會到計算機技術的話題上來,如果說我們現在有多個程序可以他讓他跑在計算機上,內存只有一個結果是什么呢,你占了我的空間,我覆蓋了你的數據到時候大家誰都干不成活,所以群體智商小于個體反而做不成事,為了能夠做成事,找一個監控人員現在廣場上說這里有十杯咖啡,誰要搶立馬槍斃,肯定一個一個去了所以需要管理,為了讓一個群體的智商之和大于個體就需要一個監控,一個管理員,一個組織者。對我們的計算機也是同樣的道理要做一個程序是監控的這個監控程序有特權他工作在內存當中的某一個特定的固定位置,給監控程序用的剩余的空間才能給其他程序用,而這個監控程序將其余空間優化分成一個一個的格子而任何一個額程序要想運行是他被裝在到內存時這個程序給他劃分好了,第一個程序給他第一片,第二片是第二個程序 ,第三片是第三個程序,各不相干,互不相讓,誰也不允許別的程序跑的他的領地。
于是至少計算機的指令和存儲的問題解決了內存上的存儲是從哦那空間上劃分的,但是cpu呢,cpu只有一個,怎么能讓多個任務同時跑在cpu上呢,跟我們人一樣,大腦只有一個雖然說領導交代給你有5件事都需要完成,而且都記下來了但是在某一時刻你只能盤算一件事。我們無法聯合起來盤算但是為了讓五件事能夠齊頭并進想5秒鐘第一件事不管想完想不完都先把解決問題放下先記下來,去想5秒鐘第二件事放下,第三個想5秒鐘回過頭來再想第一件事從剛剛中斷的地方再去進行就好了,所以想這種就是以時間切割的把cpu所能提供的計算能力從時間上切割成比如向我們剛剛說的5毫秒一片5毫秒一片所以這三個程序輪流第一個5毫秒給第一個程序,第二個5毫秒給第二個程序依次類推,把第三個5毫秒給第三個程序,再轉過來第四個5毫秒給第一個程序。像這樣子就能夠多任務運行了但是為了讓多任務能夠跑起來必須有一個監控程序。所以這個監控程序需要寫一個需要一個有公眾之心的沒有私心的更不能包藏禍心的則么一個組織或者廠商,是一個嚴密組織也罷,是一個松散的組織也罷他們負責把這個程序寫出來位其他程序的運行提供一個公平公正良好的運行環境,至少不要浪費那么多資源,所以說這樣的程序就顯得至關重要那個時候就有了來完成這么一個任務的,或者至少有這么一個項目被催生,比如想早些時候的ITMT的Bell實驗室,有麻省理工的人工智能實驗室,還有通用電氣應該是這三家組織,他們聯合起來研發這么一個監控程序給他起名就叫做multics多樣化的,多樣性的。
這個程序的設計,bell實驗室為了能夠參與這個項目招了很多優秀的工程師MIT他們的很多教授和學者也都參與進來GE也一樣的,后來兩三年之后大概時間走到了,人們發現這個multics的目標到底是什么呢?最初的設計目標已經完成了但是后續的目標人們發現,在設計的過程中越走越有很多的任務還沒做好沒做到完美最后這個系統的目標被越設置越大,到最后甚至他們迷失了,搞不清楚到底要寫什么,要完成什么了,面對這種現狀GE就退出了,再后來bell實驗室也退出了但不管這么講multics確實研發成功了據說當年的第一個客戶是福特汽車公司,而且福特汽車公司這個系統一直用到了2000年前后還在用而這個的研發時間是上世紀的六十年代,據說美國的某一個航空公司飛機廠里的塔臺的呼叫調度系統據說早些時候還跑的是windows3.1呢,就在兩個月前出現故障,誰也修復不了因為跑的是windows3.1.windows3.1因該是上個世紀80年代的產品所以對于有些商業組織來講穩定是最重要的并不是新那將來的工作也一樣能讓穩定跑起來比嘗試用新程序嘗試用新鮮的東西更重要。我們繼續說multics這個項目就是試圖建立一個具備眾多功能的叫做信息功能應用工具而設定的但是最后大家都迷失以后bell實驗室為multics項目的參與召集的那些優秀工程師就被召回了bell實驗室他們就無事可干了 對于這些牛人們無事可干了都在干什么,都在自己鼓搗東西了,通常這些工程師都是這么干的比如說早期的時候在bell實驗室中有個叫做Ken Thompson,Ken這個家伙早期的時候也是multics項目中的研發人員,而且有受到了當時項目上的批量技術的困擾并且據說在設那時候Ken在multics上研發了一個游戲程序叫做Space Travel。
他當時在寫這么一個游戲,游戲要跑在multics之上而bell實驗室退出了這么個項目以后Ken是沒有免費權限在免費使用multics的能力的要想用得付費Ken肯定就很郁悶了所以說他為了能過繼續研究這個小的游戲程序決定自己去寫一個系統能夠支撐這個游戲跑起來的小系統但是當時比較流行的計算機已經到了小型機時代。比第一代的電腦已經小很多了大概像現在一個柜子一樣這么大和這個桌子差不多這么大我們通常把他稱為小型機,而那個是后的小型機主要是dec公司生產的比較有名想pdp系列,叫做數字設備公司后來數字設備公司賣給了康柏后來康柏又被惠普給收購了據說惠普有要被分拆了所以這一路悲歡離合的狗血故事。
Dec生產了當時非常著名的小型機叫pdp,pdp在那個時候,比較主流的是他是按照數字編代的像pdp1234567。。。。。。那個時候比較主流的是pdp-11大概能賣到幾十萬沒有不過計算能里沒有你的手機好,ken回到bell實驗室以后為了研究他的Space Travel就向領導申請能不能給能回一臺pdp-11來或者說能有啟用pdp-11這個權限當然領導認為這個年輕人腦子不正常,為了游戲竟然申請真么貴重的設備于是肯定不同意,于是ken就很郁悶。然后就轉悠在bell實驗室。后來某一天,發現在一個角落里有一個破布底下蓋著一個設備打開一看是一個老古董pdp-7,pdp-7早那個時代就是已經廢棄的設備。
不管怎樣好歹有了,所以ken這份家伙在pdp-7上嘗試去寫他的程序當時的pdp-7還是用匯編語言去編碼的他用匯編語言寫了一個小系統,并且居然Space Travel在上面可以跑起來了。所以他非常的欣喜于是他為了能夠讓自己的Space Travel,引起關注于是他就在bell實驗室了,到處兜售他的游戲,但是bell實驗室的同人對他的游戲一點興趣都沒有。他們更多的是關注了他的系統,因為他們發現這個系統短小精悍,性能太強了。pdp-12上跑的系統要好的多接口設計也規范的多,而且也易用的多。因此沒有人對他的Space Travel感興趣,但是每個人都期望說,能不能把你寫的系統給我裝一次裝到我的系統上來,他當時就是面臨了這么一種哭笑不得的場景。而且他的那些同時對這個系統非常感興趣,但是比起當年他們參與的multics而言從本質上來講功能要單一,要簡單的多的多。所以把這個系統取了名叫做unics。Un和mult就是相對用的詞根不知道后來應為什么原因,被命名為unix。可能就是弱化這種對立的情形所以把他改了名。