官术网_书友最值得收藏!

2.3 Linux的結構

前文已經提到,一個Linux由兩部分組成:“內核”及“各種系統和應用程序”,操作系統位于硬件和軟件中間,因此人們把內核稱為計算機系統軟件的核心,它要為應用軟件提供一組命令或系統調用接口,供應用程序調用,從而向用戶隱藏系統使用的硬件設備。

2.3.1 Linux內核

內核是操作系統的核心,具有很多最基本的功能,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。

Linux內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網絡管理等,如圖2-1所示。

圖2-1 Linux內核結構

(1)內存管理

對任何一臺計算機而言,其內存以及其他資源都是有限的。為了讓有限的物理內存滿足應用程序對內存的大需求量,Linux采用了稱為“虛擬內存”的內存管理方式。Linux將內存劃分為容易處理的“內存頁”(對于大部分體系結構來說都是4KB)。Linux包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。

不過內存管理要管理的可不止4KB緩沖區。Linux提供了對4KB緩沖區的抽象,例如slab分配器。這種內存管理模式使用4KB緩沖區為基數,然后從中分配結構,并跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態調整內存使用。

為了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由于這個原因,頁面可以移出內存并放入磁盤中。這個過程稱為交換,因為頁面會被從內存交換到硬盤上。內存管理的源代碼可以在/Linux/mm中找到。

(2)進程管理

進程實際是某特定應用程序的一個運行實體。在Linux系統中,能夠同時運行多個進程,Linux通過在短的時間間隔內輪流運行這些進程而實現“多任務”。這一短的時間間隔稱為“時間片”,讓進程輪流運行的方法稱為“進程調度”,完成調度的程序稱為調度程序。

進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程是不可運行進程。Linux使用了比較簡單的基于優先級的進程調度算法選擇新的進程。

通過多任務機制,每個進程可認為只有自己獨占計算機,從而簡化程序的編寫。每個進程有自己單獨的地址空間,并且只能由這一進程訪問,這樣,操作系統避免了進程之間的互相干擾及“壞”程序對系統可能造成的危害。為了完成某特定任務,有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序對文本進行排序。為此,操作系統還提供進程間的通信機制來幫助完成這樣的任務。Linux中常見的進程間通信機制有信號、管道、共享內存、信號量和套接字等。

內核通過SCI提供了一個應用程序編程接口(API)來創建一個新進程(fork、exec等函數),停止進程(kill、exit),并在它們之間進行通信和同步。

(3)文件系統

和DOS等操作系統不同,Linux操作系統中單獨的文件系統并不是由驅動器號或驅動器名稱(如A:或C:等)來標識的。相反,和UNIX操作系統一樣,Linux操作系統將獨立的文件系統組合成了一個層次化的樹形結構,并且由一個單獨的實體代表這一文件系統。Linux將新的文件系統通過一個稱為“掛載”或“掛上”的操作將其掛載到某個目錄上,從而讓不同的文件系統結合成為一個整體。Linux操作系統的一個重要特點是它支持許多不同類型的文件系統。Linux中最普遍使用的文件系統是ext2,它也是Linux土生土長的文件系統。但Linux也能夠支持FAT、VFAT、FAT32、Minix等不同類型的文件系統,從而可以方便地和其他操作系統交換數據。由于Linux支持許多不同的文件系統,并且將它們組織成了一個統一的虛擬文件系統。

虛擬文件系統(Virtual File System,VFS)隱藏了各種硬件的具體細節,把文件系統操作和不同文件系統的具體實現細節分離了開來,為所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2,FAT等,設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。

虛擬文件系統(VFS)是Linux內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽象。VFS在SCI和內核所支持的文件系統之間提供了一個交換層。即VFS在用戶和文件系統之間提供了一個交換層。

在VFS上面,是對諸如open、close、read和write之類的函數的一個通用API抽象。在VFS下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過50個)的插件。文件系統的源代碼可以在/Linux/fs中找到。

文件系統層之下是緩沖區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要時就可用)優化了對物理設備的訪問。緩沖區緩存之下是設備驅動程序,它實現了特定物理設備的接口。

因此,用戶和進程不需要知道文件所在的文件系統類型,而只需要像使用ext2文件系統中的文件一樣使用它們。

(4)設備驅動程序

設備驅動程序是Linux內核的主要部分。和操作系統的其他部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設備驅動程序的錯誤都可能導致操作系統的崩潰。設備驅動程序實際控制操作系統和硬件設備之間的交互。設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。一般而言,設備驅動程序和設備的控制芯片有關,例如,如果計算機硬盤是SCSI硬盤,則需要使用SCSI驅動程序,而不是IDE驅動程序。

(5)網絡接口(NET)

Linux提供了對各種網絡標準的存取和各種網絡硬件的支持。網絡接口可分為網絡協議和網絡驅動程序。網絡協議部分負責實現每一種可能的網絡傳輸協議。眾所周知,TCP/IP協議是Internet的標準協議,同時也是事實上的工業標準。Linux的網絡實現支持BSD套接字,支持全部的TCP/IP協議。Linux內核的網絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。

網絡設備驅動程序負責與硬件設備通信,每一種可能的硬件設備都有相應的設備驅動程序。

各個子系統之間的依賴關系如下:

進程調度與內存管理之間的關系:這兩個子系統互相依賴。在多道程序環境下,程序要運行必須為之創建進程,而創建進程的第一件事情,就是將程序和數據裝入內存。

進程間通信與內存管理的關系:進程間通信子系統要依賴內存管理支持共享內存通信機制,這種機制允許兩個進程除了擁有自己的私有空間,還可以存取共同的內存區域。

虛擬文件系統與網絡接口之間的關系:虛擬文件系統利用網絡接口支持網絡文件系統(NFS),也利用內存管理支持RAMDISK設備。

內存管理與虛擬文件系統之間的關系:內存管理利用虛擬文件系統支持交換,交換進程(swapd)定期由調度程序調度,這也是內存管理依賴于進程調度的唯一原因。當一個進程存取的內存映射被換出時,內存管理向文件系統發出請求,同時,掛起當前正在運行的進程。

除了這些依賴關系外,內核中的所有子系統還要依賴于一些共同的資源。這些資源包括所有子系統都用到的過程。例如:分配和釋放內存空間的過程,打印警告或錯誤信息的過程,還有系統的調試例程,等等。

2.3.2 Linux應用程序

應用程序是在操作系統內核之上,便于用戶進程調用系統內核提供的接口來完成所要執行的任務。直接調用接口是非常麻煩和困難的,于是系統提供shell來幫助用戶使用和控制計算機,系統還提供其他一些軟件來支持環境,以支持用戶程序的運行。

其中shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口,它可以描述為一個解釋器,對用戶輸入的內容和命令進行解釋之后再發送到內核。

Linux擁有三種用戶操作環境:桌面(Desktop)、窗口管理器(Window Manager)、命令行shell(Command Line shell)。每個用戶都可以設置自己的用戶操作界面。

shell是一個命令解釋器,它解釋由用戶輸入的命令并把命令發送到內核,不僅如此,shell還有自己的編程語言用于對命令進行編輯,它允許用戶編寫由shell命令組成的程序,shell編程語言具有普通編程語言的很多特點,例如它也有循環結構和分支控制結構等,用這種編程語言編寫的shell程序與其他程序具有同樣的效果。

shell目前主要有下列版本。

?Bourne shell:是貝爾實驗室開發的。

?BASH:是GNU的Bourne Again shell,是GNU操作系統上默認的Shell,大部分Linux的發行套件使用的都是這種Shell。

?Korn shell:是對Bourne shell的發展,在大部分內容上與Bourne shell兼容。

?C shell:是Sun公司shell的BSD版本。

主站蜘蛛池模板: 大化| 康定县| 辽源市| 正阳县| 绍兴市| 佛学| 嫩江县| 徐州市| 呼玛县| 新乐市| 行唐县| 华坪县| 易门县| 临沧市| 滕州市| 综艺| 红河县| 泰顺县| 砀山县| 无极县| 苏尼特右旗| 白山市| 龙州县| 鸡西市| 合水县| 广水市| 伽师县| 鹿邑县| 西安市| 英吉沙县| 阳山县| 澎湖县| 上饶市| 垫江县| 巩留县| 长兴县| 武汉市| 兴山县| 电白县| 贵南县| 丰镇市|