class="21834">
(一)什麼是 Linux ?什麼是操作系統?
要了解 Linux 之前,就不能不知道什麼是操作系統 ( Operation System, OS ),所以,首先我們來簡單的說一說什麼是操作系統吧!先來想一想,當我們使用計算機時,屏幕上面顯示的咚咚是由哪裡來的?嗯!是由顯示卡與屏幕顯像的;那麼你現在可以藉由網絡看到這篇文章,則是藉由 Internet 、網絡卡、網絡線以及所有相關的電子器材與網絡器材所完成的一項任務!如果你要看 VCD 呢?那麼就需要光驅、光盤、聲卡的發聲等等的支持。這麼說來的話,所以在『工作』的東西都是『硬件』的工作呀!對了!就是這些計算機硬件在工作的。那麼硬件怎麼工作呢?那就是藉由『操作系統』來達成的啰!這個操作系統就是在溝通你這個使用者跟硬件之間的訊息傳遞啦!也就是說,沒有操作系統,那麼你的計算機硬件就只是一堆廢鐵,什麼工作都不能做的!
那麼操作系統裡面含有什麼東西呢?簡單的來說,操作系統主要分為兩個東西,一個是『核心』、一個是『一堆核心提供的工具』我們以使用者常使用的 Windows 計算機來做一個簡單的說明好了。大家應該都使用過 Windows 計算機裡面的檔案總管吧?那麼當你開啟檔案總管的時候,他是否會顯示你硬盤當中的資料?這個顯示硬盤裡面的資料,就是『核心』幫你做的,但是,你要核心去顯示硬盤哪一個目錄下的資料,則是由『檔案總管』這個『工具』幫你達成的!這樣可以理解嗎?再來,如果您曾經使用過 Windows 2000 或 Windows XP 的話,那就更好了!你就應該聽過有所謂的『FAT32 與 NTFS 檔案格式』吧?在 Windows 98 這個早期的 Windows 版本中,他並無法讀取或者是找到 Windows XP 的 NTFS 檔案格式的硬盤,為什麼呢?因為他的『核心』本來就不認識 NTFS 啊!所以,即使你有檔案總管,但是由於核心根本不認識 NTFS ,所以,檔案總管也是沒有能力幫你達到你想要做的事情!這樣應該就更清楚了吧?沒錯!你的整個硬件是由核心來管理的,而如果核心不認識你的硬件,那麼你將無法使用該硬設備,例如上面提到的 NTFS 檔案格式的硬盤!核心就是『 Kernel 』,他是一個操作系統的最底層的東西,由他來掌管整個硬件資源的工作狀態,而 Linux 有 Linux 自己的核心, Windows 也有他自己的核心。所以說,當有新的硬件加入到你的系統中的時候,那麼若你的『 Kernel 』並沒有支持他的時候,呵呵,這個新的硬件就肯定無法工作的,因為控制他的 Kernel 並不認識他呀!這樣了解了嗎?!先有個概略性的了解,後面我們提到『核心編譯』的時候會在更詳細的談到他!
一般來說,Kernel 管理的事項有:
System call interface :一些服務與 kernel 溝通之後,將硬件的資源進一步的利用;
Process control :系統過程控制中心,所以核心編的越小越好;
Memory management :控制整個系統的內存管理;
File system management :檔案系統的管理,例如 I/O 等等的工作啦!還有不同檔案格式的支持啦等等,如果你的核心不認識某個檔案系統,那麼您將無法使用該檔案格式的檔案啰!例如上面提到的 Windows 98 不認識 NTFS 檔案格式的硬盤;
Device drivers :就如同上面提到的,硬件的管理是 Kernel 的主要工作之一,當然啰,裝置的驅動程序就是核心需要做的事情啦!好在目前都有所謂的『可加載模塊』功能,可以將驅動程序編輯成模塊,就不需要重新的編譯核心啦!這個也會在後續的核心編譯當中提到的!
所以啦!所有硬件的資源都是他來管理的!至於我們要達成一些工作時,除了藉由核心本身提供的功能 ( 例如上面提到的檔案總管 ) 之外,還可以藉由其它的應用軟件來達成喔!舉個例子來說,你要看 VCD 影片是吧!那麼除了 Windows 提供的媒體播放程序之外,你也可以自行安裝 VCD 播放程序來播放 VCD 啰!這個播放程序就是應用軟件啰,而這個應用軟件可以幫你去控制核心來工作 ( 就是放映影片啰 ) ,因此,我們可以這樣說,核心是控制整個硬件支持的咚咚,也是一個操作系統的最底層,然而要讓整個操作系統更完備的話,那還需要含有相當豐富的核心提供的工具,以及核心相關的應用軟件來支持!
OK!提到這裡那麼您知道 Linux 是什麼了嗎?呵呵!對啦!其實 Linux 就是一個操作系統,這個操作系統裡頭含有最主要的 kernel 以及 kernel 提供的工具啦!他提供了一個完整的操作系統當中最底層的硬件控制與資源管理的完整架構,這個架構是沿襲 Unix 良好的傳統來的,所以相當的穩定而功能強大!此外,由於這個優良的架構可以在目前的個人計算機 ( X86 系統 ) 上面跑,所以很多的軟件開發者將他們的工作心血移轉到這個架構上面,那就是很多的應用軟件啦!雖然 Linux 僅是其核心與核心提供的工具,不過,由於核心、核心工具與這些軟件開發者提供的軟件的整合,使得 Linux 成為一個更完整的、功能強大的操作系統啰!我們可以將 Linux 的系統與使用者的相關性看成底下的圖標:
圖一、使用者、使用者接口與核心工具、核心、與硬件之相關性
約略了解 Linux 是何物之後,接下來,我們要談一談,『為什麼說 Linux 是很穩定的操作系統呢?他是如何來的?』
(二)從 Unix 到 Linux 這一段歷史
為什麼大家常常會說, Linux 是很穩定的一套操作系統呢?這是因為, Linux 他有個老前輩,那就是 Unix 家族啰!有這個前輩的提攜,讓 Linux 這個小老弟很快的就成為一套穩定而優良的操作系統啦!所以,底下我們來談一談 Unix 到 Linux 的這一段歷史吧!
早在 Linux 出現之前的二十年 ( 大約在 1970 年代 ), 就有一個相當穩定而成熟的操作系統存在了!那就是 Linux 的老大哥『 Unix 』是也!怎麼這麼說呢?!他們這兩個家伙有什麼關系呀?這裡就給他說一說啰!眾所皆知的, Linux 的核心是由 Linus Torvalds 在 1991 年的時候給他開發出來的,並且丟到網絡上提供大家下載,後來大家覺得這個小東西 ( Linux Kernel ) 相當的小而精巧,所以慢慢的就有相當多的朋友投入這個小東西的研究領域裡面去了!但是為什麼這的小東西這麼棒呢?!然而又為什麼大家都可以免費的下載這個東西呢?!嗯!等鳥哥慢慢的唬xx....喔不!聽我慢慢的道來!
一個沒有完成的夢想: Bell, MIT 與 GE 的『 Multics 』系統
早期的計算機並不像現在的個人計算機一般,他可不是一般人碰的到的玩意兒,除非是軍事或者是高科技用途才有可能接觸到這類的 Computer !而如前面所言,有計算機硬件還需要操作系統的配合才能夠發揮計算機的效能,不過,在那個年代,由於計算機算是『奢侈品』,喔~應該說是『貴重物品』,所以,可能一間學校就只有一部大型主機當然,那個年代所謂的大型主機仍然無法提供適度的運算能力的。不過,既然只有一部大型主機,然而有許許多多的教師、學生要想要來使用,怎麼辦呢?為了解決這個問題,在 1960 年代初期,麻省理工學院 ( MIT ) 發展了所謂的『兼容分時系統 ( Compatible Time-Sharing System, CTSS )』,就字面上的意義來看,他主要讓大型主機可以提供多個終端機聯機進入主機使用主機的資源, ( 附帶一提,當時的終端機 ( Terminal ) 本身並沒有軟件或者可供使用的資源,這些終端機要能使用,一定必需要聯機登入主機之後,才能夠使用主機的資源來工作!) 當時可以讓約 30 位使用者聯機使用主機。而為了讓這個分時系統更加的強大,所以,在 1965 年前後由貝爾研究室 ( Bell )、 麻省理工學院 ( MIT ) 及奇異電器公司 ( GE ) 開始來共同開發一個名為 Multics 的大型計畫,目標是想讓大型主機可以聯機 300 位以上的使用者。不過,在奮斗了四年之後,該計畫仍然宣告不治...喔!是失敗啦!(注: Multics 有復雜、多數的意思。)
一個小型檔案系統的產生:1969 年 Ken Thompson 的小型 file server system
在復雜的 Multics 系統的計畫失敗後,貝爾研究室當然就退出該計畫。就在這個計畫解散之後,曾經參與 Muitics 的貝爾研究室的成員 Ken Thompson 由於自己工作上的需求,需要一套檔案存取的小型操作系統,便在 1969 年的時候以 DEC 公司 ( Digital Equipment Corporation ) 的計算機 PDP-7 為硬件基准,設計了一個適合自己工作環境的小型檔案系統,其中也含有他自行開發的一些小工具。那個系統就是最早期的 Unix 的源頭!當初 Ken 設計這個檔案系統時,主要是為了自己的存取方便所設計的簡單 OS ,因此將原有的 Multics 系統大幅度的簡化,不過,在當時還並沒有 Unix 這個名詞的出現!
Unix 的正式誕生:1973 年 Ritchie 等人以 C 語言寫出第一個正式 Unix 核心
由於 Thompson 寫的那個操作系統實在太好用了,所以在 Bell 研究室內部廣為流傳,並且數度經過改版。到了 1973 年, Bell 研究室的 Dennis Ritchie 等人為了讓這個系統的執行效能更佳化,所以使用編譯效能更好的 C 語言將原有的 1969 年的那個系統之核心大幅度的改寫過,並且確定該操作系統名稱為 Unix,呵呵!那就是最早的 Unix 操作系統啰!不過,由於這個操作系統是由這一群工程師所開發完成的,而且使用者也大多是這方面的工程師,因此造成了後來 Unix 系統接口較難被一般使用者接受的情況 @_@ (注: 相對於 Multics ,Unix 具有單一的意思!)
重要的 Unix 分支: 1977 年 BSD 的誕生
在 Unix 早期的發展中,有一件相當重要的事情,那就是 BSD 的誕生!由於 C 語言是一種高級語言,他可以被應用在不同的硬件架構上面,而 Unix 本身就是 C 語言寫成的!在 Unix 發表之後, 柏克萊大學 ( Berkeley ) 的教授對於這個操作系統相當的有興趣,在經過取得 Unix 的原始碼,並且幾經修改之後,終於在 1977 年發表了第一代的 Berkeley Software Distribution ( BSD ) 。這個 BSD 是 Unix 的一個分支,他的發展對於 Unix 有相當大的影響,例如後來的 Sun 公司就是使用