日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
探秘Linux內(nèi)核的組織架構(gòu):源碼樹與內(nèi)核子系統(tǒng)簡介 (linux內(nèi)核組織架構(gòu))

Linux操作系統(tǒng)的內(nèi)核是其最重要的組成部分之一。內(nèi)核的作用是控制系統(tǒng)硬件并為其他程序提供服務(wù)接口。Linux內(nèi)核有很多模塊,這些模塊都有自己的職責(zé)和功能。為了更好地理解Linux內(nèi)核的組織架構(gòu),我們需要了解一下它的源碼樹和內(nèi)核子系統(tǒng)。

一、源碼樹

Linux內(nèi)核的源碼樹是一個分層的目錄結(jié)構(gòu),包括內(nèi)核源碼、相關(guān)的文檔和編譯工具。它是一個由文件和目錄組成的樹形結(jié)構(gòu),每個目錄都有一個特定的目的。

1. arch目錄

arch目錄包含各種支持的架構(gòu)(平臺)的子目錄。每個目錄下面都有與該架構(gòu)相關(guān)的源碼文件。這些文件定義了該架構(gòu)的硬件體系結(jié)構(gòu)與軟件體系結(jié)構(gòu)的細(xì)節(jié)。

2. block目錄

block目錄包含塊設(shè)備相關(guān)的代碼。它包括了文件系統(tǒng)的讀寫操作、磁盤驅(qū)動程序等。這些代碼可以提高IO性能,減少磁盤的損壞。

3. crypto目錄

crypto目錄包含的是Linux內(nèi)核的加密子系統(tǒng)。即可用于數(shù)據(jù)加密和解密的一些算法和接口。這是一個很重要的子系統(tǒng),用于保護(hù)用戶數(shù)據(jù)和敏感信息。

4. fs目錄

fs目錄是Linux內(nèi)核的文件系統(tǒng)子系統(tǒng)。它包括所有文件系統(tǒng)相關(guān)的代碼,如文件系統(tǒng)的讀寫、緩存等。

5. include目錄

include目錄包含所有Linux內(nèi)核的頭文件。這些頭文件為內(nèi)核的其他模塊提供函數(shù)和變量的聲明和定義。

6. init目錄

init目錄包含Linux內(nèi)核的啟動代碼。這些代碼將配置系統(tǒng)的硬件并啟動之一個進(jìn)程,加載之一個用戶態(tài)程序。

7. kernel目錄

kernel目錄包含了內(nèi)核核心代碼。這些文件實(shí)現(xiàn)了程序運(yùn)行的核心功能,包括進(jìn)程調(diào)度、內(nèi)存管理、信號管理等。

8. lib目錄

lib目錄是一個通用目錄,包含的是內(nèi)核的通用庫函數(shù)。

9. mm目錄

mm目錄是Linux內(nèi)核的內(nèi)存管理子系統(tǒng)。它包括內(nèi)存分配和釋放、虛擬內(nèi)存和物理內(nèi)存的映射等。

10. net目錄

net目錄是Linux內(nèi)核的網(wǎng)絡(luò)子系統(tǒng)。它包括tcp、udp、ip協(xié)議棧等網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)。

11. security目錄

security目錄是Linux內(nèi)核的安全子系統(tǒng)。它提供基于角色、基于策略的訪問控制。

12. sound目錄

sound目錄是Linux內(nèi)核的音頻子系統(tǒng)。它提供處理音頻的功能,如音頻I/O、音頻編解碼等。

二、內(nèi)核子系統(tǒng)

除了源碼樹之外,Linux內(nèi)核還有很多子系統(tǒng)。每個子系統(tǒng)負(fù)責(zé)某一方面的工作,并提供對外的接口。

1. 進(jìn)程子系統(tǒng)

進(jìn)程子系統(tǒng)包括進(jìn)程管理、調(diào)度和同步原語。它提供了內(nèi)核和用戶程序之間的接口。通過進(jìn)程子系統(tǒng),用戶程序可以創(chuàng)建、銷毀進(jìn)程,以及控制進(jìn)程執(zhí)行和資源申請。

2. 內(nèi)存子系統(tǒng)

內(nèi)存子系統(tǒng)負(fù)責(zé)內(nèi)存分配和釋放、頁面管理、虛擬內(nèi)存和物理內(nèi)存的映射、交換等。它是內(nèi)核中最基礎(chǔ)的子系統(tǒng)之一。

3. 文件系統(tǒng)子系統(tǒng)

文件系統(tǒng)子系統(tǒng)是Linux內(nèi)核的一個核心子系統(tǒng)。它提供所有文件系統(tǒng)的通用接口,包括打開、關(guān)閉、讀寫、復(fù)制、創(chuàng)建、刪除等。

4. 網(wǎng)絡(luò)子系統(tǒng)

網(wǎng)絡(luò)子系統(tǒng)是Linux內(nèi)核的另一個核心子系統(tǒng)。它實(shí)現(xiàn)了一系列網(wǎng)絡(luò)協(xié)議,如TCP/IP協(xié)議棧、路由、ARP協(xié)議、網(wǎng)絡(luò)設(shè)備驅(qū)動等。

5. 設(shè)備子系統(tǒng)

設(shè)備子系統(tǒng)是Linux內(nèi)核的另一個重要子系統(tǒng)。它負(fù)責(zé)管理系統(tǒng)硬件設(shè)備,如磁盤、USB設(shè)備、聲卡、網(wǎng)卡等。設(shè)備驅(qū)動程序就是在設(shè)備子系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)的。

6. 安全子系統(tǒng)

安全子系統(tǒng)實(shí)現(xiàn)了系統(tǒng)的安全機(jī)制,如SELinux。它通過提供安全策略和權(quán)限檢查,保護(hù)系統(tǒng)和用戶的安全。

7. 電源管理子系統(tǒng)

電源管理子系統(tǒng)提供了對系統(tǒng)電源的管理。它可以在系統(tǒng)空閑或沒有任何任務(wù)時,自動將系統(tǒng)進(jìn)入睡眠狀態(tài),以節(jié)省電能。

Linux內(nèi)核是一個非常龐大和復(fù)雜的系統(tǒng)。它由許多不同的模塊和子系統(tǒng)組成,每個子系統(tǒng)有自己的職責(zé)和功能。要想深入了解Linux內(nèi)核,需要對其源碼樹和各個子系統(tǒng)有一定的了解。熟悉這些結(jié)構(gòu),可以幫助我們更好地理解Linux內(nèi)核,并更好地開發(fā)和維護(hù)Linux系統(tǒng)。

相關(guān)問題拓展閱讀:

  • Linux 內(nèi)核的內(nèi)存管理 – 概念

Linux 內(nèi)核的內(nèi)存管理 – 概念

Concepts overview — The Linux Kernel documentation

Linux中的內(nèi)存管理是一個復(fù)雜的系統(tǒng),經(jīng)過多年的發(fā)展,它包含越來越多的功能,以支持從 MMU-less microcontrollers 到 supercomputers 的各種系統(tǒng)。

沒有MMU內(nèi)存管理的系統(tǒng)被稱為 nommu ,它值得寫一份專門的文檔進(jìn)行描述。

盡管有些概念是相同的,這里我們假設(shè)MMU可用,CPU可以將虛擬地址轉(zhuǎn)換為物理地址。

計算機(jī)系統(tǒng)中的物理內(nèi)存是有限資源,即便支持內(nèi)存熱插拔,其可以安裝的內(nèi)存也有限的。物理內(nèi)存不一定必須是連續(xù)的;它可以作為一組不同的地址范圍被訪問。此外,不同的CPU架構(gòu),甚至同架構(gòu)的不同實(shí)現(xiàn)對如何定義這些地址范圍都是不同的。

這使得直接處理物理內(nèi)存異常復(fù)雜,為了避免這種復(fù)雜性,開發(fā)了

虛擬內(nèi)存 (virtual memory)

的概念。

虛擬內(nèi)存從應(yīng)用軟件中抽象出物理內(nèi)存的細(xì)節(jié),只允許在物理內(nèi)存棗神中保留需要的信息

(demand paging)

,并提供一種機(jī)制來保護(hù)和控制進(jìn)程之間的數(shù)據(jù)共享。

通過虛擬內(nèi)存,每次內(nèi)存訪問都訪問一個

虛擬地址

。當(dāng)CPU對從系統(tǒng)內(nèi)存讀?。ɑ?qū)懭耄┑闹噶钸M(jìn)行解碼時,它將該指令中編碼的虛擬地址轉(zhuǎn)換為內(nèi)存控制器可以理解的物理地址。

物理內(nèi)存被切分為

頁幀 page frames

頁 pages

。頁的大小是基于架構(gòu)的。一些架構(gòu)允許從幾個支持的值中選擇頁大小;此選擇在內(nèi)核編譯時設(shè)置到內(nèi)核配置。

每個物理內(nèi)存頁都可以映射為一個或多個

虛擬頁(virtual pages)

。映射關(guān)系描述在

頁表(page tables)

中,頁表將程序使用的虛擬地址轉(zhuǎn)換為物理內(nèi)存地址。頁表以層次結(jié)構(gòu)組織。

更底層的表包含軟件使用的實(shí)際內(nèi)存頁的物理地址。較高層的表包含較低層表頁的物理地址。頂層表的指針駐留在寄存器中。

當(dāng)CPU進(jìn)行地址轉(zhuǎn)換的時候,它使用寄存器訪問頂級頁表。

虛擬地址的高位,用于頂級頁表的條目索引。然后,通過該條目訪問下級,下級的虛擬地址位又作為其下下級頁表的索引。虛擬地址的更低位定義實(shí)際頁內(nèi)的偏移量。

地址轉(zhuǎn)換需要多次內(nèi)存訪問,而內(nèi)存訪問相對于CPU速度來說比較慢。為了避免在地址轉(zhuǎn)換上花費(fèi)寶貴的處理器周期,CPU維護(hù)著一個稱為

TLB

(Translation Lookaside Buffer)的用于地址轉(zhuǎn)換緩存(cache)。通常TLB是非常稀缺的資源,需要大內(nèi)存工作應(yīng)用程序會因?yàn)門LB未命中而影響性能。

很多現(xiàn)代CPU架構(gòu)允許頁表的高層直接映射到內(nèi)存頁。例如,x86架構(gòu),可以通過二級、三級頁表的條目映射2M甚至1G內(nèi)存頁。在Linux中,這些內(nèi)存頁稱為

大頁 (Huge)

。大頁的使用顯著降低了TLB的壓力,提高了TLB命中率,從而提高了系統(tǒng)的整體性能。

Linux提供兩種機(jī)制開啟使用大頁映射物理內(nèi)存。

之一個是

HugeTLB

文件系統(tǒng),即

hugetlbfs

。它是一個偽文件系統(tǒng),使用RAM作為其存儲。在此文件系統(tǒng)中創(chuàng)建的文件,數(shù)據(jù)駐留在內(nèi)存中,并使用大頁進(jìn)行映射。

關(guān)于 HugeTLB Pages

另一個被稱為

THP (Transparent HugePages)

,后出的開啟大頁映射物理內(nèi)存的機(jī)制。

hugetlbfs

不同,hugetlbfs要求用戶和/或系統(tǒng)管理員配置系統(tǒng)內(nèi)存的哪些部分應(yīng)該并可以被大頁映射;THP透明地管理這些映射并獲取名稱。

關(guān)于 Transparent Hugepage Support

通常,硬件對不同物理內(nèi)存范圍的訪問方式有所限制。某些情況下,設(shè)備不能對所有可尋址內(nèi)存執(zhí)行DMA。在其他情況下,物理內(nèi)存的大小超過虛擬內(nèi)存的更大可尋址大小,需要采取改巖大特殊措施來訪問部分內(nèi)存。還有些情況,物理內(nèi)存的尺寸超過了虛擬內(nèi)存的更大可尋址尺寸,需要采取特殊措施來訪問部分內(nèi)存。

Linux根據(jù)內(nèi)存頁的使用情況,將其組合為多個

zones

。比如, ZONE_DMA 包含設(shè)備用于DMA的內(nèi)存, ZONE_HIGHMEM 包含未永久映射到內(nèi)核核豎地址空間的內(nèi)存, ZONE_NORMAL 包含正常尋址內(nèi)存頁。

內(nèi)存zones的實(shí)際層次架構(gòu)取決于硬件,因?yàn)椴⒎撬屑軜?gòu)都定義了所有的zones,不同平臺對DMA的要求也不同。

多處理器機(jī)器很多基于

NUMA

(Non-Uniform Memory Access system – 非統(tǒng)一內(nèi)存訪問系統(tǒng) )架構(gòu)。 在這樣的系統(tǒng)中,根據(jù)與處理器的“距離”,內(nèi)存被安排成具有不同訪問延遲的

banks

。每個

bank

被稱為一個

node

,Linux為每個

node

構(gòu)造一個獨(dú)立的內(nèi)存管理子系統(tǒng)。

Node

有自己的zones、free&used頁面列表,以及各種統(tǒng)計計數(shù)器。

What is NUMA?

NUMA Memory Policy

物理內(nèi)存易失,將數(shù)據(jù)放入內(nèi)存的常見情況是讀取文件。讀取文件時,數(shù)據(jù)會放入

頁面緩存(page cache)

,可以在再次讀取時避免耗時的磁盤訪問。同樣,寫文件時,數(shù)據(jù)也會被放入

頁面緩存

,并最終進(jìn)入存儲設(shè)備。被寫入的頁被標(biāo)記為

臟頁(dirty page)

,當(dāng)Linux決定將其重用時,它會將更新的數(shù)據(jù)同步到設(shè)備上的文件。

匿名內(nèi)存 anonymous memory

匿名映射 anonymous mappings

表示沒有后置文件系統(tǒng)的內(nèi)存。這些映射是為程序的stack和heap隱式創(chuàng)建的,或調(diào)用mmap(2)顯式創(chuàng)建的。通常,匿名映射只定義允許程序訪問的虛擬內(nèi)存區(qū)域。讀,會創(chuàng)建一個頁表?xiàng)l目,該條目引用一個填充有零的特殊物理頁。寫,則分配一個常規(guī)物理頁來保存寫入數(shù)據(jù)。該頁將被標(biāo)記為臟頁,如果內(nèi)核決定重用該頁,則臟頁將被交換出去

swapped out

。

縱貫整個系統(tǒng)生命周期,物理頁可用于存儲不同類型的數(shù)據(jù)。它可以是內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)、設(shè)備驅(qū)動DMA緩沖區(qū)、讀取自文件系統(tǒng)的數(shù)據(jù)、用戶空間進(jìn)程分配的內(nèi)存等。

根據(jù)內(nèi)存頁使用情況,Linux內(nèi)存管理會區(qū)別處理??梢噪S時釋放的頁面稱為

可回收(reclaimable)

頁面,因?yàn)樗鼈儼褦?shù)據(jù)緩存到了其他地方(比如,硬盤),或者被swap out到硬盤上。

可回收頁最值得注意的是

頁面緩存

匿名頁面

。

在大多數(shù)情況下,存放內(nèi)部內(nèi)核數(shù)據(jù)的頁,和用作DMA緩沖區(qū)的頁無法重用,它們將保持現(xiàn)狀直到用戶釋放。這樣的被稱為

不可回收頁(unreclaimable)

。

然而,在特定情況下,即便是內(nèi)核數(shù)據(jù)結(jié)構(gòu)占用的頁面也會被回收。

例如,文件系統(tǒng)元數(shù)據(jù)的緩存(in-memory)可以從存儲設(shè)備中重新讀取,因此,當(dāng)系統(tǒng)存在內(nèi)存壓力時,可以從主內(nèi)存中丟棄它們。

釋放可回收物理內(nèi)存頁并重新調(diào)整其用途的過程稱為

(surprise!) reclaim

。

Linux支持異步或同步回收頁,取決于系統(tǒng)的狀態(tài)。

當(dāng)系統(tǒng)負(fù)載不高時,大部分內(nèi)存是空閑的,可以立即從空閑頁得到分配。

當(dāng)系統(tǒng)負(fù)載提升后,空閑頁減少,當(dāng)達(dá)到某個閾值(

low watermark

)時,內(nèi)存分配請求將喚醒

kswapd

守護(hù)進(jìn)程。它將以異步的方式掃描內(nèi)存頁。如果內(nèi)存頁中的數(shù)據(jù)在其他地方也有,則釋放這些內(nèi)存頁;或者退出內(nèi)存到后置存儲設(shè)備(關(guān)聯(lián)

臟頁

)。

隨著內(nèi)存使用量進(jìn)一步增加,并達(dá)到另一個閾值-

min watermark

-將觸發(fā)回收。這種情況下,分配將暫停,直到回收到足夠的內(nèi)存頁。

當(dāng)系統(tǒng)運(yùn)行時,任務(wù)分配并釋放內(nèi)存,內(nèi)存變得碎片化。

雖然使用虛擬內(nèi)存可以將分散的物理頁表示為虛擬連續(xù)范圍,但有時需要分配大的連續(xù)的物理內(nèi)存。這種需求可能會提升。例如,當(dāng)設(shè)備驅(qū)動需要一個大的DMA緩沖區(qū)時,或當(dāng)THP分配一個大頁時。

內(nèi)存地址壓縮(compaction )

解決了碎片問題。

該機(jī)制將占用的頁從內(nèi)存zone的下部移動到上部的空閑頁。壓縮掃描完成后,zone開始處的空閑頁就并在一起了,分配較大的連續(xù)物理內(nèi)存就可行了。

reclaim

類似,

compaction

可以在

kcompactd守護(hù)進(jìn)程中異步進(jìn)行,也可以作為內(nèi)存分配請求的結(jié)果同步進(jìn)行。

在存在負(fù)載的機(jī)器上,內(nèi)存可能會耗盡,內(nèi)核無法回收到足夠的內(nèi)存以繼續(xù)運(yùn)行。

為了保障系統(tǒng)的其余部分,引入了

OOM killer

OOM killer

選擇犧牲一個任務(wù)來保障系統(tǒng)的總體健康。選定的任務(wù)被killed,以期望在它退出后釋放足夠的內(nèi)存以繼續(xù)正常的操作。

關(guān)于linux內(nèi)核組織架構(gòu)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機(jī)房服務(wù)器托管租用。


網(wǎng)站題目:探秘Linux內(nèi)核的組織架構(gòu):源碼樹與內(nèi)核子系統(tǒng)簡介 (linux內(nèi)核組織架構(gòu))
轉(zhuǎn)載源于:http://www.5511xx.com/article/djdpghd.html