作業系統扮演的角色
一部運作正常的電腦,不論是超級電腦還是桌上型 PC ,大致上主要由三個部份所構成的,這三個部份分別是硬體,作業系統和應用程式。硬體,顧名思意,就是像 CPU ,硬碟等這些構成電腦的電子元件,而應用程式則是使用者利用來完成特定目標的程式,例如 ms word 是專門作文書處理的應用程式,netscape 是 brower 。應用程式是一個集合,代表所有執行於作業系統以上的軟體,基本上我們每天開機使用的都是一個又一個的應用程式。那作業系統又是什麼?作業系統位於幕後,是位默默耕耘的功臣,雖然不像硬體看得見,或是像應用程式可以直接使用,它卻影響整部電腦的效率甚巨。它的兩個最重要的任務是提供應用程式介面及資源管理。
控制硬體是件極複雜的事,以讀寫軟碟為例,必須啟動馬達,移動磁頭等等,如果開發應用程式須要包含硬體的控制,那麼難度馬上增加好幾倍,而且不同廠牌的硬體又會有不同的操作方法,等於對每一家硬體廠商須要重寫一次。還好,應用程式控制硬體的方式大同小異,以軟碟為例,不外乎格式化(format),讀出資料,寫入資料等少數幾個動作。把這些硬體的常用動作,寫成類似函式庫的形式,提供給應用程式呼叫,就是作業系統核心的主要任務之一。這些由作業系統核心提供給應用程式用的類函式統稱為系統呼叫(system calls),從此以後,應用程式不必再擔心軟碟的運作,它只須呼叫 system call 的 read 或 write ,它甚至不須要管它要寫入資料的是硬碟還是軟碟,使得應用程式的開發可以專心在它的特色功能上。
作業系統依特性可分為單工與多工,DOS 是一個單工的作業系統,單工作業系統的預設是,一個應用程式執行完畢後才會執行另一個程式,因此它允許應用程式可以無限制地使用系統的資源,例如 CPU 時間,記憶體和 IO 等等,這個應用程式甚至可以佔據系統,不再將主導權交回作業系統。這類單工的作業系統只須提供上述的系統呼叫便已足夠。而多工的作業系統,如 Linux ,它允許多個應用程式同時進行,共用 CPU 時間和記憶體,因此只提供系統呼叫的服務是不夠的,還必須做資源的管理,讓這些同時在執行的應用程式不會互相干擾,例如一個程式不能寫入另一程式的記憶體,才能確保這些應用程式都能順利地完成任務。
由於版權問題,Unix 的源碼不再適用於教學,1987 年 Andrew Tanenbaum 遂寫了 MINIX 作為教學的工具,MINIX 的意思為 mini-Unix,它是一個簡化的作業系統,適合入門者學習作業系統,因為簡單,剛開始時獲得眾人的青睞,但好景不長,原因是它過於簡單反而不切實用。
1991 年,Linus Torvalds 開始使用 MINIX,他對 MINIX 提供的功能不滿意,自行發展 Linux,他把 Linux 的原始碼放在 Internet 上,允許人們自由使用 (under GNU Public License)。Linux 是第一個完全免費的 Unix,很快地,許多人開始修改及加強 Linux,如今,Linux 除了可以在原先設計的 Intel x86(x>=3) 上執行外,它也被移植到 Alpha, Sun Sparc, Motorola 68K, MIPS, PowerPC 等等的平台上。
由於 Linux 提供和 Unix 類似的介面,因此,在資源的抽象化上及資源分享的型式上就必須和 Unix 相同,它和其它Unix不同的地方在於實作這些介面時所使用的資料結構及演算法。
Linux 是一個多工的作業系統,許多程式可以一次讀到記憶體內,作業系統執行某個程式一陣時間後,就會切換去執行另一個程式。所以記憶體是被空間分割,分成數個區塊,每個區塊稱為 memory partition,內含一個隨時可以執行的程式。CPU 是被時間分割,每段時間執行一個在記憶區塊內的程式,時間到了便切換到另支一程式。在 Intel x86 平台上,CPU 每秒約切換100次,在 Alpha 平台則切換約 1024 次,這些切換次數可依需要而修改,大致而言,降低切換次數會使諸如鍵盤,mouse 的反應變慢,但應用程式執行的效率會提高,相反地,如果提高切換次數則會使程式的執行變慢,因為更多的 CPU 時間被用來切換程式。
Linux 核心和傳統的 Unix 一樣,是屬於集成式的作業系統核心 (monolithic kernel),和目前流行的微核心 (microkernel) 不同。它們將行程管理,記憶體管理和檔案系統包在一起,成為一個單一的可執行檔,而週邊硬體裝置管理則另外分開,成為一組驅動程式,每一個驅動程式的目的是控制某一類型的硬體裝置,例如控制軟碟機。這種設計是為了降低核心更動的頻率,不必為了新硬體裝置更改核心,而且驅動程式也比較好寫。但是 Linux 核心的進步非常迅速,這種設計反而不利於核心的實驗更新,為了克服這個缺點,Linux 提出模組 (module) 機制,這是種軟體容器,它和核心的介面要比傳統 Unix 的驅動程式來的有彈性,可以用來提供新功能給核心,當然也適用於寫驅動程式。
* Linux 的優點:
那幹嘛要使用 Linux 做為我們的主機系統呢?這是因為 Linux 有底下這些優點:
o 穩定的系統:Linux 本來就是建立在 Unix 上面發展出來的作業系統,因此,Linux 具有與 Unix 系統相似的的程式介面跟操作方式,當然也繼承了 Unix 穩定並且有效率的特點。常聽到安裝 Linux 的主機連續運做一年以上而不曾當機、不必關機是稀鬆平常的事;
o 免費或少許費用:由於 Linux 是基於 GPL 的基礎下的產物,因此任何人皆可以自由取得 Linux ,至於一些『安裝套件』的發行者,他們發行的安裝光碟也僅需要些許費用即可獲得!不同於 Unix 需要負擔龐大的版權費用,當然也不同於微軟需要一而再、再而三的更新你的系統,並且繳納大量費用囉!
o 安全性、漏洞的修補:如果你常玩網路的話,那麼你最常聽到的應該是『沒有絕對安全的主機』!沒錯!不過 Linux 由於支援者日眾,有相當多的熱心團體、個人參與其中的開發,因此可以隨時獲得最新的安全資訊,並給予隨時的更新,亦即是具有相對的較安全!
o 多工、多使用者:與 Windows 系統不同的, Linux 主機上可以同時允許多人上線來工作,並且資源的分配較為公平,比起 Windows 的單人假多工系統要穩定的多囉! 這個多人多工可是 Unix-Like 上面相當好的一個功能,怎麼說呢?你可以在一部 Linux 主機上面規劃出不同等級的使用者,而且每個使用者登入系統時的工作環境都可以不相同,此外,還可以允許不同的使用者在同一個時間登入主機,以同時使用主機的資源。
o 使用者與群組的規劃:在 Linux 的機器中,檔案的屬性可以分為『可讀、可寫、可執行』等參數來定義一個檔案的適用性,此外,這些屬性還可以分為三個種類,分別是『檔案擁有者、檔案所屬群組、其他非擁有者與群組者』。這對於專案計畫或者其他計畫開發者具有相當良好的系統保密性。
o 相對比較不耗資源的系統:Linux 只要一部 p-100 以上等級的電腦就可以安裝並且使用愉快囉!還不需要到 P-III 等級的電腦呢!不過,如果你要架設的是屬於大型的主機(服務上百人以上的主機系統),那麼就需要比較好一點的機器了。不過,目前市面上任何一款個人電腦均可以達到這一個要求囉!
* Linux 的缺點:
反正 Linux 好處說不完啦!不過雖然 Linux 具有這樣多的好處,但是他先天上有一個足以致命的地方,使他的普及率受到很大的限制,就是 Linux 需要使用 『指令列』 的終端機模式進行系統的管理!雖然近年來有很多的圖形介面開發使用在 Linux 上面,但畢竟要熟悉 Linux 還是以指令列來使用是比較好的,因此要接受 Linux的玩家必須比較要能熟悉對電腦下指令的行為,而不是用滑鼠點一點 icon 就行了!不過如果只是要架一些簡單的小站呢?是不是大家都可以做的到?沒錯!其實只要對 Linux 做一些小小的設定就可以架站了!
o 沒有特定的支援廠商:因為所有的套件都是免費的,自然也就沒有專人會到府服務啦!不過,這點倒是不需要擔心,因為拜網路風行之賜,你要問的問題幾乎在網路上都可以找到答案喔!看你有沒有用心去找就是了!
o 圖形介面作的還不夠好:其實是因為 VBird 不玩 X-window 啦,所以也不知道目前發展到怎樣的一個地步了!基本上 VBird 常說的一句話就是:『Windows 上面有的咚咚 Linux 上面也一定可以找的到!,但 Linux 有的服務 Windows 可不見得有喔!』只不過,您可得自己找到自己想要的介面囉! 作者: eric999 時間: 16-3-2006 12:30
檔案系統 Linux 支援非常多檔案系統格式,包含 DOS 的 FAT 等數十種不同的檔案系統,但是對應用程式而言,看到卻是統一的介面,不論它讀寫的是 DOS 的 FAT 或是 ext2fs,讀寫都是呼叫相同的函式,它甚至不知道正在讀寫的是那一種檔案系統。