### 一、Linux與其它類Unix內核的比較:
單塊結構的內核:由幾個邏輯上獨立的成分構成,單塊結構,大多數據商用Unix變體也是單塊結構;
編譯并靜態連接的傳統Unix內核:Linux能自動按需動態地裝載和卸載部分內核代碼(模塊),而傳統Unix內核僅支持靜態連接;
內核線程:Linux以一種十分有限的方式使用內核線程來周期性地執行幾個內核函數,而一些Unix內核則本身被組織成一組內核線程;
多線程應用程序支持:Linux定義了自己的輕量級進程版本,并以此來實現對多線程應用程序的支持,而商用Unix則都是基于內核線程來作為多線程應用程序的執行環境;
搶占式內核:Linux2.6提供了“可搶占的內核”的編譯選項,當采用這種編譯方式來編譯內核時,Linux2.6可以隨意交錯執行處于特權模式的執行流,而一些傳統的、通用的Unix,如Solaris則是完全的搶占式內核;
多處理器支持:一些Unix內核變體都利用了多處理器系統,Linux2.6支持不同存儲模式的對稱多處理,不僅可以使用多處理器,同時每個處理器可以毫無區別地處理任何一個任務;
注:"對稱多處理"(Symmetrical?Multi-Processing)又叫SMP,是指在一個計算機上匯集了一組處理器(多CPU),各CPU之間共享內存子系統以及總線結構。
文件系統:Linux標準文件系統支持多種不同類型的文件系統,由于采用了面向對象虛擬文件系統技術,外部文件系統可以很容易移植到Linux內核上;
注:虛擬文件系統(VFS)是物理文件系統與服務之間的一個接口層,它對Linux的每個文件系統的所有細節進行抽象,使得不同的文件系統在Linux核心以?及系統中運行的其他進程看來,都是相同的。嚴格說來,VFS并不是一種實際的文件系統。它只存在于內存中,不存在于任何外存空間。VFS在系統啟動時建?立,在系統關閉時消亡。
STREAMS:大部分Unix內核均包含STREAMS?I/O子系統,作為編寫設備驅動程序、終端驅動程序及網絡協議的首選接口,但Linux無類似的子系統;
### 二、硬件依賴性:
Linux試圖在硬件無關的源代碼與硬件相關的源代碼之間保持清晰的界限,為此,Linux為不同的硬件平臺作了不同的支持,目前共對23種不同的硬件平臺類型作了專門的支持。
### 三、操作系統基本概念:
當操作系統啟動時,內核被裝入到RAM中,內核中包含了系統運行所必須的很多核心過程。內核為系統中所有事情提供了主要功能,并決定高層軟件的許多特性。
操作系統的兩個主要目標:與硬件交互以及為運行在其上的應用程序提供執行環境。
### 多用戶系統:
能并發和獨立執行分別屬于兩個或多個用戶的若干應用程序的計算機。
“并發”意味著幾個應用程序能同時處于活動狀態并競爭各種資源;
“獨立”意味著每個應用程序能執行自己的任務,而無需考慮其他用戶的應用程序在干些什么;
多用戶操作系統必須包含的特點:
* 核實用戶身份的認證機制;
* 防止有錯誤的應用程序妨礙到其它應用程序在系統中運行的保護機制;
* 防止有惡意用戶程序干涉或窺視其它用戶的活動的保護機制;
* 限制分配給每個用戶的資源數的記賬機制;
以上保護機制依賴與CPU特權模式相關的硬件保護機制。
###
### 用戶和組:
所有的用戶由一個唯一的用戶標識符來標識。
為了實現資料的共享,引入用戶組,組由唯一的用戶組標識符來標識。
任何類Unix操作系統都有一個特殊的root用戶,即超級用戶,操作系統不對她使用通常的保護機制,可以訪問系統中的任何一個文件,并干涉任何一個正在執行的用戶程序活動。
###
### 進程:
程序執行的一個實例,一個運行程序的“執行上下文”。
Unix是具有搶占式進程的多處理器操作系統。
類Unix操作系統采用進程/內核模式,每個進程都自以為它是系統中唯一的進程,可以獨占操作系統所提供的服務。只要進程發出系統調用,硬件就會把特權模式由用戶態變成內核態,然后進程以非常有限的目的開始一個內核過程的執行。
內核體系結構:
大部分Unix內核是單塊結構:每一個內核層都被集成到整個內核程序中,并代表當前進程在內核態下運行。
微內核操作系統只需要內核有一個很小的函數集,通常包括幾個同步原語、一個簡單的調度程序和進程間的通信機制。
微內核操作系統一般比單塊內核的效率低,因此操作系統不同層次之間顯式的消息傳遞要花費一定的代價。
微內核操作系統迫使系統程序員采用模塊化方法,因為任何操作系統層都是一個相對獨立的程序,這種程序必須通過定義明確而清晰的軟件接口,以實現與其他層的交互,同時時方便移植。
微內核操作系統比單塊內核更充分的利用了RAM。
Linux內核提供了模塊。模塊是一個目標文件,其代碼可以在運行時鏈接到內核,或從內核上解除鏈接。這種目標代碼通常由一組函數組成,用來實現文件系統、驅動程序或其它內核上層功能。
### 四、Unix文件系統概述:
文件:
Unix文件是以字節序列組成的信息載體,內核不解釋文件的內容。
文件或目錄名由除了“/”和“\0”之外的任意ASCII字符序列組成,通常不能超過255個字符。
當標識文件名時,“.”和“..”分別用來標識當前工作目錄和父目錄。
硬鏈接和軟鏈接:
包含在目錄中的文件名就是一個文件的硬鏈接,或簡稱鏈接。
軟鏈接又稱為符號鏈接,是短文件,這些文件包含有另一個文件的任意一個路徑名。
文件類型:
Unix文件可以是下列類型之一:
* 普通文件
* 目錄
* 符號鏈接
* 面向塊的設備文件
* 面向字符的設備文件
* 管道和命令管道
* 套接字(Socket)
文件描述符與索引節點:
文件內容不包含任何控制信息。
文件系統處理文件需要的所有信息包含在一個名為索引節點的數據結構中。
索引節點至少提供以下屬性:
* 文件類型
* 與文件相關的硬鏈接個數
* 以字節為單位的文件長度
* 設備標識符(包含文件的設備的標識符)
* 在文件系統中識別文件的索引節點號
* 文件擁有者的UID
* 文件的用戶組ID
* 幾個時間戳,表示索引節點狀態改變的時間、最后訪問時間及最后修改時間
* 訪問權限和文件模式
文件操作的系統調用:
當用戶訪問一個變通文件或目錄文件的內容時,實際是訪問硬件設備上的一些數據,因此,文件系統是硬盤分區物理組織的用戶級視圖。而由于處于用戶態的進程不能直接與低層硬件交互,因此,所有實際的文件操作都必須在內核態下進行。
當幾個進程同時打開一個文件時,文件系統給每個文件分配一個單獨的打開文件對象以及單獨的文件描述符。在這種情況下,Unix文件系統對進程在同一文件上發出的I/O操作之間不提供任何形式的同步機制。
對普通Unix文件,可以順序訪問,也可隨機訪問,而對設備文件和命名管道文件,通常只能順序訪問。