創始人
Linus Torvalds
林納斯·本納第克特·托瓦茲(Linus Benedict Torvalds)出生於芬蘭赫爾辛基市。父親尼爾斯·托瓦茲(Nils Torvalds)是一名活躍的共產主義者及電台記者。托瓦茲家族屬於在芬蘭占6%的少數民族芬蘭瑞典人。他畢業於赫爾辛基大學計算機科學系,1997年至2003年在美國加州矽谷任職於全美達公司(Transmeta Corporation)參與該公司晶片的code morph技術研發。後受聘於開源碼發展實驗室(OSDL : Open Source Development Labs,Inc),全力開發Linux核心。現任職於Linux基金會。
基本介紹
很詳細地了解某個作業系統的實際工作方式是非常困難的,因為大多數作業系統的原始碼都是嚴格保密的。在以實際使用為目標的作業系統中,讓任何人都可以自由獲取系統原始碼,無論目的是要了解、學習還是修改,這樣的系統並不多。本論文的主題就是這些少數作業系統中的一個:Linux。
Linux是一個性能穩定、功能強大、效率高的作業系統。它在功能特性方面與Unix系統相似,同時又具有多任務、多用戶、多平台等若干特性。Linux的原始碼是開放的,閱讀Linux原始碼,無疑是深入學習Linux的最好方法。
系統原理
Linux 最早的檔案系統是Minix,但是專門為Linux 設計的檔案系統——擴展檔案系統第二版或EXT2被設計出來並添加到Linux中,這對Linux產生了重大影響。EXT2檔案系統功能強大、易擴充、性能上進行了全面最佳化,也是所有Linux發布和安裝的標準檔案系統類型。
每個實際檔案系統從作業系統和系統服務中分離出來,它們之間通過一個接口層:虛擬檔案系統或VFS來通訊。VFS使得Linux可以支持多個不同的檔案系統,每個表示一個VFS 的通用接口。由於軟體將Linux 檔案系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程式將看到統一的檔案系統。Linux 的虛擬檔案系統允許用戶同時能透明地安裝許多不同的檔案系統。
在Linux檔案系統中,作為一種特殊類型/proc檔案系統只存在記憶體當中,而不占用外存空間。它以檔案系統的方式為訪問系統核心數據的操作提供接口。/proc檔案系統是一個偽檔案系統,用戶和應用程式可以通過/proc得到系統的信息,並可以改變核心的某些參數。
在Linux檔案系統中,EXT2檔案系統、虛擬檔案系統、/proc檔案系統是三個具有代表性的檔案系統,本論文試圖通過對他們的分析來研究Linux檔案系統機制。並且在分析這三種檔案系統的基礎上對Linux檔案系統操作進行了解、研究(本論文選取了open和close兩種操作進行研究)。在第二部分中將介紹EXT2檔案系統;第三部分論述虛擬檔案系統的特點;第四部分簡要介紹/proc檔案系統;最後,介紹兩種具體檔案系統操作的實現。
檔案系統
在Linux中普通檔案和目錄檔案保存在稱為塊物理設備的磁碟或者磁帶上。一套Linux系統支持若干物理盤,每個物理盤可定義一個或者多個檔案系統。(類比於微機磁碟分區)。每個檔案系統由邏輯塊的序列組成,一個邏輯盤空間一般劃分為幾個用途各不相同的部分,即引導塊、超級塊、inode區以及數據區等。
引導塊:在檔案系統的開頭,通常為一個扇區,其中存放引導程式,用於讀入並啟動作業系統;超級塊:用於記錄檔案系統的管理信息。特定的檔案系統定義了特定的超級塊;inode區(索引節點):一個檔案或目錄占據一個索引節點。第一個索引節點是該檔案系統的根節點。利用根節點,可以把一個檔案系統掛在另一個檔案系統的非葉節點上;數據區:用於存放檔案數據或者管理數據。
Linux最早引入的檔案系統類型是MINIX。MINIX檔案系統由MINIX作業系統定義,有一定的局限性,如檔案名稱最長14個字元,檔案最長64M位元組。第一個專門為Linux設計的檔案系統是EXT(Extended File System),但目前流行最廣的是EXT4。
第二代擴展檔案系統由Rey Card 設計,其目標是為Linux 提供一個強大的可擴展檔案系統。它同時也是Linux界中設計最成功的檔案系統。通過VFS的超級塊(struct ext2_sb_info ext2_sb)可以訪問EXT2的超級塊,通過VFS的inode(struct ext2_inode_info ext2_i)可以訪問EXT2的inode。
檔案系統EXT2的原始碼在/usr/src/linux/fs/ext2目錄下,它的數據結構在檔案/usr/src/linux/include/linux/ext2_fs.h以及同一目錄下的檔案ext2_fs_i.h和ext2_fs_sb.h中定義。
EXT2檔案系統將它所占用的邏輯分區劃分成塊組(block group),如下圖所示:
邏輯分區
和很多檔案系統一樣, EXT2 建立在數據被保存在數據塊中的檔案內這個前提下。這些數據塊長度相等且這個長度可以變化,某個EXT2 檔案系統的塊大小在創建(使用mke2fs)時設定。每個檔案的大小和剛好大於它的塊大小正數倍相等。如果塊大小為1024 位元組而一個1025 位元組長的檔案將占據兩個1024 位元組大小的塊。這樣你不得不浪費差不多一半的空間。我們通常需要在CPU 的記憶體利用率和磁碟空間使用上進行折中。而大多數作業系統,包括Linux 在內,為了減少CPU 的工作負載而被迫選擇相對較低的磁碟空間利用率。並不是檔案中每個塊都包含數據,其中有些塊被用來包含描敘此檔案系統結構的信息。EXT2通過一個inode 結構來描敘檔案系統中檔案並確定此檔案系統的拓撲結構。inode 結構描敘檔案中數據占據哪個塊以及檔案的存取許可權、檔案修改時間及檔案類型。EXT2 檔案系統中的每個檔案用一個inode 來表示且每個inode 有唯一的編號。檔案系統中所有的inode都被保存在inode 表中。 EXT2 目錄僅是一個包含指向其目錄入口指針的特殊檔案(也用inode表示)。
對檔案系統而言檔案僅是一系列可讀寫的數據塊。檔案系統並不需要了解數據塊應該放置到物理介質上什麼位置,這些都是設備驅動的任務。無論何時只要檔案系統需要從包含它的塊設備中讀取信息或數據,它將請求底層的設備驅動讀取一個基本塊大小整數倍的數據塊。EXT2 檔案系統將它所使用的邏輯分區劃分成數據塊組。每個數據塊組將那些對檔案系統完整性最重要的信息複製出來, 同時將實際檔案和目錄看作信息與數據塊。為了發生災難性事件時檔案系統的修復,這些複製非常有必要。
與微軟比較
相同點
用戶和組
Linux是多用戶多任務作業系統而Windows是單用戶多任務作業系統。都可以由許多不同的用戶來使用,為每個用戶提供單獨的環境和資源。基於用戶身份來控制安全性。都可以以組成員的方式來控制資源的訪問許可權,這樣在用戶數目較大時可以不必為每一個帳號設定許可權。
用戶和組可以集中管理,讓多個伺服器共享相同的用戶和身份驗證數據。
檔案系統
Linux和Windows都支持多種檔案系統。檔案資源可以通過NetBIOS、FTP或者其他協定與其他客戶機共享。可以很靈活地對各個獨立的檔案系統進行組織,由管理員來決定它們在何處可以以何種方式被訪問。
連線埠和設備
兩種作業系統都支持各種物理設備連線埠,比如並口、串口和 USB 接口。支持各種控制器,比如 IDE 和 SCSI 控制器。Linux 還支持很多“剛剛上市”的標準硬體。
網路
Linux和Windows都支持多種網路協定,比如TCP/IP、NetBIOS和IPX。都支持多種類型的網路適配器。都具備通過網路共享資源的能力,比如已分享檔案和列印。都可以提供網路服務能力,比如 DHCP 和 DNS。
服務
Linux和Windows都提供服務。所謂服務,指的是那些在後台運行的應用程式,可以為系統和遠程調用該服務的計算機提供一些功能。在系統引導的時候可以單獨控制並自動啟動這些程式。(注意:Linux 中沿用了 Unix 的習慣,稱這種應用程式為 daemon)
不同點
Linux 的套用目標是網路而不是列印
Windows最初出現的時候,這個世界還是一個紙張的世界。Windows的偉大成就之一在於您的工作成果可以方便地看到並列印出來。這樣一個開端影響了 Windows 的後期發展。
同樣,Linux 也受到了其起源的影響。Linux 的設計定位於網路作業系統。它的設計靈感來自於 Unix作業系統,因此它的命令的設計比較簡單,或者說是比較簡潔。由於純文本可以非常好地跨網路工作,所以 Linux 配置檔案和數據都以文本為基礎。
對那些熟悉圖形環境的人來說,Linux伺服器初看可能比較原始。但是Linux開發更多關注的是它的內在功能而不是表面上的東西。即使是在純文本的環境中,Linux同樣擁有非常先進的網路、腳本和安全能力。執行一些任務所需的某些表面上看起來比較奇怪的步驟是令人費解的,除非您認識到 Linux 是期望在網路上與其他 Linux系統協同執行這些任務。Linux的自動執行能力也很強,只需要設計批處理檔案就可以讓系統自動完成非常詳細的任務。Linux 的這種能力來自於其基於文本的本質。
可選的 GUI
Linux有圖形組件。Linux支持高端的圖形適配器和顯示器,完全勝任圖形相關的工作。許多數字效果藝術家在Linux工作站上來進行他們的設計工作,而以前這些工作需要使用IRIX系統來完成。但是,圖形環境並沒有集成到 Linux 中,而是運行於系統之上的單獨一層。這意味著您可以只運行 GUI,或者在需要時才運行 GUI。如果您的系統主要任務是提供Web套用,那么您可以停掉圖形界面,而將其所用的記憶體和CPU資源用於您的服務。如果您需要在 GUI 環境下做一些工作,可以再打開它,工作完成後再將其關閉。
Linux 有圖形化的管理工具,以及日常辦公的工具,比如電子郵件、網路瀏覽器和文檔處理工具等。不過,在 Linux 中,圖形化的管理工具通常是控制台 (命令行) 工具的擴展。也就是說,用圖形化工具能完成的所有工作,用控制台命令同樣可以完成。同樣,使用圖形化工具並不妨礙您對配置檔案進行手工修改。其實際意義可能並不是特別顯而易見,但是,如果在圖形化管理工具中所做的任何工作都可以以命令行的方式完成,這就表示那些工作也可以由一個腳本來實現。腳本化的命令可以成為自動執行的任務。Linux 同時支持這兩種方式,並不要求您只用文本或者只用 GUI。您可以根據您的需要選擇最好的方法。
Linux 中的配置檔案是人類可讀的文本檔案,這與過去的 Windows 中的 INI 檔案類似,但與 Windows 的註冊表機制在思路上有本質的區別。每一個應用程式都有其自己的配置檔案,而且通常不與其他的配置檔案放在一起。不過,大部分的配置檔案都存放於一個目錄樹 (/etc) 下的單個地方,所以看起來它們在邏輯上是在一起。文本檔案的配置方式使得不通過特殊的系統工具就可以完成配置檔案的備份、檢查和編輯工作。
檔案名稱擴展
Linux不使用檔案名稱擴展來識別檔案的類型。相反,Linux根據檔案的頭內容來識別其類型。為了提高檔案可讀性您仍可以使用檔案名稱擴展,但這對 Linux 系統來說沒有任何作用。不過,有一些應用程式,比如 Web 伺服器,可能使用命名約定來識別檔案類型,但這只是特定的應用程式的要求而不是 Linux 系統本身的要求。
Linux通過檔案訪問許可權來判斷檔案是否為執行檔。任何一個檔案都可以賦予可執行許可權,這樣程式和腳本的創建者或管理員可以將它們識別為執行檔。這樣做有利於安全。保存到系統上的可執行的檔案不能自動執行,這樣就可以防止許多腳本病毒。
重新引導是最後的手段
如果您使用Windows已經很長時間了,您可能已經習慣出於各種原因(從軟體安裝到糾正服務故障)而重新引導系統。在Linux思想中您的這一習慣需要改變。Linux在本質上更遵循“牛頓運動定律”。一旦開始運行,它將保持運行狀態,直到受到外來因素的影響,比如硬體的故障。實際上,Linux系統的設計使得應用程式不會導致核心的崩潰,因此不必經常重新引導(與Windows系統的設計相對而言)。所以除了Linux核心之外,其他軟體的安裝、啟動、停止和重新配置都不用重新引導系統。
如果您確實重新引導了 Linux 系統,問題很可能得不到解決,而且還會使問題更加惡化。學習並掌握 Linux 服務和運行級別是成功解決問題的關鍵。學習 Linux 最困難的就是克服重新引導系統的習慣。
另外,您可以遠程地完成Linux中的很多工作。只要有一些基本的網路服務在運行,您就可以進入到那個系統。而且,如果系統中一個特定的服務出現了問題,您可以在進行故障診斷的同時讓其他服務繼續運行。當您在一個系統上同時運行多個服務的時候,這種管理方式非常重要。
命令區分大小寫
所有的 Linux 命令和選項都區分大小寫。例如, -R 與 -r 不同,會去做不同的事情。控制台命令幾乎都是小寫的。