全面解析Linux主要構(gòu)成
Linux曾今在微軟眼里什么都不是,過去了十年微軟已經(jīng)正式的看待Linux了,本文為你詳細(xì)介紹Linux主要構(gòu)成,為你在學(xué)習(xí)Linux主要構(gòu)成時(shí)起一定的作用。Linux主要由存儲(chǔ)管理、進(jìn)程管理、文件系統(tǒng)、進(jìn)程間通信等幾部分組成,在許多算法及實(shí)現(xiàn)策略上,Linux借鑒了Unix的成功經(jīng)驗(yàn),但也不乏自己的特色。
1.存儲(chǔ)管理
Linux采用頁式存儲(chǔ)管理機(jī)制,每個(gè)頁面的大小隨處理機(jī)芯片而異。例如,Intel 386處理機(jī)頁面大小可為4KB和2MB兩種,而Alpha處理機(jī)頁面大小可為8KB、16KB、32KB和64KB。頁面大小的選擇對(duì)地址變換算法和頁 表結(jié)構(gòu)會(huì)有一定的影響,如Alpha的虛地址和物理地址的有效長度隨頁面尺寸的變化而變化,這種變化必將在地址變換和頁表項(xiàng)中有所反映。
在Linux中,每一個(gè)進(jìn)程都有一個(gè)比實(shí)際物理空間大得多的進(jìn)程虛擬空間,為了建立虛擬空間和物理空間之間的映射,每個(gè)進(jìn)程還保留一張頁表,用于將本進(jìn) 程空間中的虛地址變換成物理地址。頁表還對(duì)物理頁的訪問權(quán)限作出了規(guī)定,定義了哪些頁可讀寫,哪些頁是只讀頁,在進(jìn)行虛實(shí)變換時(shí),Linux將根據(jù)頁表中 規(guī)定的訪問權(quán)限來判定進(jìn)程對(duì)物理地址的訪問是否合法,從而達(dá)到存儲(chǔ)保護(hù)的目的。
Linux存儲(chǔ)空間分配遵循的是不到有實(shí)際需要的時(shí)候 決不分配物理空間的原則。當(dāng)一個(gè)程序加載執(zhí)行時(shí),Linux只為它分配了虛空間,只有訪問某一虛地址而發(fā)生了缺頁中斷時(shí),才為它分配物理空間,這樣就可能 出現(xiàn)某些程序運(yùn)行完成后,其中的一些頁從來就沒有裝進(jìn)過內(nèi)存。這種存儲(chǔ)分配策略帶來的好處是顯而易見的,因?yàn)樗?**限度地利用了物理存儲(chǔ)器。
盡管Linux對(duì)物理存儲(chǔ)器資源的使用十分謹(jǐn)慎,但還是經(jīng)常出現(xiàn)物理存儲(chǔ)器資源短缺的情況。Linux有一個(gè)名為kswapd的進(jìn)程專門負(fù)責(zé)頁面的換 出,當(dāng)系統(tǒng)中的空閑頁面小于一定的數(shù)目時(shí),kswapd將按照一定的淘汰算法選出某些頁面,或者直接丟棄(頁面未作修改),或者將其寫回硬盤(頁面已被修 改)。這種換出方式不同于較舊版本Unix的換出方式,它是將一個(gè)進(jìn)程的所有頁全部寫回硬盤。相比之下,Linux的效率更高。
2.進(jìn)程管理
在Linux中,進(jìn)程是資源分配的基本單位,所有資源都是以進(jìn)程為對(duì)象來進(jìn)行分配的。 在一個(gè)進(jìn)程的生命期內(nèi),它會(huì)用到許多系統(tǒng)資源,會(huì)用CPU運(yùn)行其指令,用存儲(chǔ)器存儲(chǔ)其指令和數(shù)據(jù),它也會(huì)打開和使用文件系統(tǒng)中的文件,直接或間接用到系統(tǒng) 中的物理設(shè)備,因此,Linux設(shè)計(jì)了一系列的數(shù)據(jù)結(jié)構(gòu),它們能準(zhǔn)確地描述進(jìn)程的狀態(tài)和其資源使用情況,以便能公平有效地使用系統(tǒng)資源。Linux的調(diào)度 算法能確保不出現(xiàn)某些進(jìn)程過度占用系統(tǒng)資源而導(dǎo)致另一些進(jìn)程無休止地等待的情況。
進(jìn)程的創(chuàng)建是一個(gè)十分復(fù)雜的過程,通常的做法需為子 進(jìn)程重新分配物理空間,并把父進(jìn)程空間的內(nèi)容全盤復(fù)制到子進(jìn)程空間中,其開銷非常大。為了降低進(jìn)程創(chuàng)建的開銷,Linux采用了 Copy?on?write技術(shù),即不拷貝父進(jìn)程的空間,而是拷貝父進(jìn)程的頁表,使父進(jìn)程和子進(jìn)程共享物理空間,并將這個(gè)共享空間的訪問權(quán)限置為只讀。當(dāng) 父進(jìn)程和子進(jìn)程的某一方進(jìn)行寫操作時(shí),Linux檢測(cè)到一個(gè)非法操作,這時(shí)才將要寫的頁進(jìn)行復(fù)制。這一做法免除了只讀頁的復(fù)制,從而降低了開銷。
3.文件系統(tǒng)
Linux最重要的特征之一就是支持多個(gè)不同的文件系統(tǒng),前面我們已經(jīng)看到,Linux目前支持的文件系統(tǒng)多達(dá)十余種,隨著時(shí)間的推移,這一數(shù)目還在不斷增加。
在Linux中,一個(gè)分離的文件系統(tǒng)不是通過設(shè)備標(biāo)識(shí)(如驅(qū)動(dòng)器號(hào)或驅(qū)動(dòng)器名)來訪問,而是把它合到一個(gè)單一的目錄樹結(jié)構(gòu)中,通過目錄來訪問,這一點(diǎn)與 Unix十分相似。Linux用安裝命令將一個(gè)新的文件系統(tǒng)安裝到系統(tǒng)單一目錄樹的某一目錄下,一旦安裝成功,該目錄下的所有內(nèi)容將被新安裝的文件系統(tǒng)所 覆蓋,當(dāng)文件系統(tǒng)被卸下后,安裝目錄下的文件將會(huì)被重新恢復(fù)。
Linux最初的文件系統(tǒng)是Minix。該文件系統(tǒng)對(duì)文件限制過多,并 且性能低下,如文件名長度不能超過14個(gè)字符、文件大小不能超過64MB。為了解決這些問題,Linux的開發(fā)者們?cè)O(shè)計(jì)了一個(gè)Linux專用的文件系統(tǒng) EXT。EXT對(duì)文件的要求放松了許多,但在性能上并沒有大的改觀,于是就有了后面的EXT2文件系統(tǒng)。EXT2文件系統(tǒng)是一個(gè)非常成功的文件系統(tǒng),它無 論是對(duì)文件的限制還是在性能方面都大大優(yōu)于EXT文件系統(tǒng),所以,EXT2自從推出就一直是Linux最常用的文件系統(tǒng)。
為了支持多種文件系統(tǒng),Linux用一個(gè)被稱為虛擬文件系統(tǒng)(VFS)的接口層將真正的文件系統(tǒng)同操作系統(tǒng)及系統(tǒng)服務(wù)分離開。VFS允許用戶同時(shí)透明地安裝多個(gè)不同的文件系統(tǒng)。
VFS掩蓋了不同文件系統(tǒng)之間的差異,使所有文件系統(tǒng)在操作系統(tǒng)和用戶程序看來都是等同的。4.進(jìn)程間通信:
Linux提供了多種進(jìn)程間的通信機(jī)制,其中,信號(hào)和管道是最基本的兩種。除此以外,Linux也提供System V的進(jìn)程間通信機(jī)制,包括消息隊(duì)列、信號(hào)燈及共享內(nèi)存。為了支持不同機(jī)器之間的進(jìn)程通信,Linux還引入了BSD的Socket機(jī)制。希望本文的為你介紹的Linux主要構(gòu)成,對(duì)你有所幫助。
【編輯推薦】