導航:首頁 > 操作系統 > linux內核存儲

linux內核存儲

發布時間:2025-07-14 10:31:21

linux內核存放的位置是在/usr/src/kernels下還是/boot/vmlinuz下

1、是在/boot目錄下
2、/usr/src目錄一般是系統內核代碼目錄
3、你看/boot/grub/grub.conf文件,kernel那行是vmlinuz...,就是代表內核的名字
4、Linux是一個一體化內核(monolithic kernel)系統。「內核」指的是一個提供硬體抽象層、磁碟及文件系統控制、多任務等功能的系統軟體。一個內核不是一套完整的操作系統。一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。設備驅動程序可以完全訪問硬體。Linux內的設備驅動程序可以方便地以模塊化(molarize)的形式設置,並在系統運行期間可直接裝載或卸載。

Ⅱ Linux 內核的內存管理 - 概念

Concepts overview — The Linux Kernel documentation

Linux中的內存管理是一個復雜的系統,經過多年的發展,它包含越來越多的功能,以支持從 MMU-less microcontrollers 到 supercomputers 的各種系統。
沒有MMU內存管理的系統被稱為 nommu ,它值得寫一份專門的文檔進行描述。
盡管有些概念是相同的,這里我們假設MMU可用,CPU可以將虛擬地址轉換為物理地址。

計算機系統中的物理內存是有限資源,即便支持內存熱插拔,其可以安裝的內存也有限的。物理內存不一定必須是連續的;它可以作為一組不同的地址范圍被訪問。此外,不同的CPU架構,甚至同架構的不同實現對如何定義這些地址范圍都是不同的。

這使得直接處理物理內存異常復雜,為了避免這種復雜性,開發了 虛擬內存 (virtual memory) 的概念。

虛擬內存從應用軟體中抽象出物理內存的細節,只允許在物理內存中保留需要的信息 (demand paging) ,並提供一種機制來保護和控制進程之間的數據共享。

通過虛擬內存,每次內存訪問都訪問一個 虛擬地址 。當CPU對從系統內存讀取(或寫入)的指令進行解碼時,它將該指令中編碼的虛擬地址轉換為內存控制器可以理解的物理地址。

物理內存被切分為 頁幀 page frames 頁 pages 。頁的大小是基於架構的。一些架構允許從幾個支持的值中選擇頁大小;此選擇在內核編譯時設置到內核配置。

每個物理內存頁都可以映射為一個或多個 虛擬頁(virtual pages) 。映射關系描述在 頁表(page tables) 中,頁表將程序使用的虛擬地址轉換為物理內存地址。頁表以層次結構組織。

最底層的表包含軟體使用的實際內存頁的物理地址。較高層的表包含較低層表頁的物理地址。頂層表的指針駐留在寄存器中。
當CPU進行地址轉換的時候,它使用寄存器訪問頂級頁表。

虛擬地址的高位,用於頂級頁表的條目索引。然後,通過該條目訪問下級,下級的虛擬地址位又作為其下下級頁表的索引。虛擬地址的最低位定義實際頁內的偏移量。

地址轉換需要多次內存訪問,而內存訪問相對於CPU速度來說比較慢。為了避免在地址轉換上花費寶貴的處理器周期,CPU維護著一個稱為 TLB (Translation Lookaside Buffer)的用於地址轉換緩存(cache)。通常TLB是非常稀缺的資源,需要大內存工作應用程序會因為TLB未命中而影響性能。

很多現代CPU架構允許頁表的高層直接映射到內存頁。例如,x86架構,可以通過二級、三級頁表的條目映射2M甚至1G內存頁。在Linux中,這些內存頁稱為 大頁 (Huge) 。大頁的使用顯著降低了TLB的壓力,提高了TLB命中率,從而提高了系統的整體性能。

Linux提供兩種機制開啟使用大頁映射物理內存。

第一個是 HugeTLB 文件系統,即 hugetlbfs 。它是一個偽文件系統,使用RAM作為其存儲。在此文件系統中創建的文件,數據駐留在內存中,並使用大頁進行映射。
關於 HugeTLB Pages

另一個被稱為 THP (Transparent HugePages) ,後出的開啟大頁映射物理內存的機制。
hugetlbfs 不同,hugetlbfs要求用戶和/或系統管理員配置系統內存的哪些部分應該並可以被大頁映射;THP透明地管理這些映射並獲取名稱。
關於 Transparent Hugepage Support

通常,硬體對不同物理內存范圍的訪問方式有所限制。某些情況下,設備不能對所有可定址內存執行DMA。在其他情況下,物理內存的大小超過虛擬內存的最大可定址大小,需要採取特殊措施來訪問部分內存。還有些情況,物理內存的尺寸超過了虛擬內存的最大可定址尺寸,需要採取特殊措施來訪問部分內存。

Linux根據內存頁的使用情況,將其組合為多個 zones 。比如, ZONE_DMA 包含設備用於DMA的內存, ZONE_HIGHMEM 包含未永久映射到內核地址空間的內存, ZONE_NORMAL 包含正常定址內存頁。
內存zones的實際層次架構取決於硬體,因為並非所有架構都定義了所有的zones,不同平台對DMA的要求也不同。

多處理器機器很多基於 NUMA (Non-Uniform Memory Access system - 非統一內存訪問系統 )架構。 在這樣的系統中,根據與處理器的「距離」,內存被安排成具有不同訪問延遲的 banks 。每個 bank 被稱為一個 node ,Linux為每個 node 構造一個獨立的內存管理子系統。 Node 有自己的zones集合、free&used頁面列表,以及各種統計計數器。
What is NUMA?
NUMA Memory Policy

物理內存易失,將數據放入內存的常見情況是讀取文件。讀取文件時,數據會放入 頁面緩存(page cache) ,可以在再次讀取時避免耗時的磁碟訪問。同樣,寫文件時,數據也會被放入 頁面緩存 ,並最終進入存儲設備。被寫入的頁被標記為 臟頁(dirty page) ,當Linux決定將其重用時,它會將更新的數據同步到設備上的文件。

匿名內存 anonymous memory 匿名映射 anonymous mappings 表示沒有後置文件系統的內存。這些映射是為程序的stack和heap隱式創建的,或調用mmap(2)顯式創建的。通常,匿名映射只定義允許程序訪問的虛擬內存區域。讀,會創建一個頁表條目,該條目引用一個填充有零的特殊物理頁。寫,則分配一個常規物理頁來保存寫入數據。該頁將被標記為臟頁,如果內核決定重用該頁,則臟頁將被交換出去 swapped out

縱貫整個系統生命周期,物理頁可用於存儲不同類型的數據。它可以是內核內部數據結構、設備驅動DMA緩沖區、讀取自文件系統的數據、用戶空間進程分配的內存等。
根據內存頁使用情況,Linux內存管理會區別處理。可以隨時釋放的頁面稱為 可回收(reclaimable) 頁面,因為它們把數據緩存到了其他地方(比如,硬碟),或者被swap out到硬碟上。
可回收頁最值得注意的是 頁面緩存 匿名頁面

在大多數情況下,存放內部內核數據的頁,和用作DMA緩沖區的頁無法重用,它們將保持現狀直到用戶釋放。這樣的被稱為 不可回收頁(unreclaimable)
然而,在特定情況下,即便是內核數據結構佔用的頁面也會被回收。
例如,文件系統元數據的緩存(in-memory)可以從存儲設備中重新讀取,因此,當系統存在內存壓力時,可以從主內存中丟棄它們。

釋放可回收物理內存頁並重新調整其用途的過程稱為 (surprise!) reclaim
Linux支持非同步或同步回收頁,取決於系統的狀態。
當系統負載不高時,大部分內存是空閑的,可以立即從空閑頁得到分配。
當系統負載提升後,空閑頁減少,當達到某個閾值( low watermark )時,內存分配請求將喚醒 kswapd 守護進程。它將以非同步的方式掃描內存頁。如果內存頁中的數據在其他地方也有,則釋放這些內存頁;或者退出內存到後置存儲設備(關聯 臟頁 )。

隨著內存使用量進一步增加,並達到另一個閾值- min watermark -將觸發回收。這種情況下,分配將暫停,直到回收到足夠的內存頁。

當系統運行時,任務分配並釋放內存,內存變得碎片化。
雖然使用虛擬內存可以將分散的物理頁表示為虛擬連續范圍,但有時需要分配大的連續的物理內存。這種需求可能會提升。例如,當設備驅動需要一個大的DMA緩沖區時,或當THP分配一個大頁時。
內存地址壓縮(compaction ) 解決了碎片問題。
該機制將佔用的頁從內存zone的下部移動到上部的空閑頁。壓縮掃描完成後,zone開始處的空閑頁就並在一起了,分配較大的連續物理內存就可行了。

reclaim 類似, compaction 可以在 kcompactd守護進程中非同步進行,也可以作為內存分配請求的結果同步進行。

在存在負載的機器上,內存可能會耗盡,內核無法回收到足夠的內存以繼續運行。
為了保障系統的其餘部分,引入了 OOM killer

OOM killer 選擇犧牲一個任務來保障系統的總體健康。選定的任務被killed,以期望在它退出後釋放足夠的內存以繼續正常的操作。

Ⅲ linux內核主要由哪幾個部分組成

Linux內核作為一個一體化系統,提供了硬體抽象層、磁碟及文件系統控制、多任務等核心功能。它並不是一個完整的操作系統,而是構成GNU/Linux系統的內核部分。設備驅動程序在Linux系統中可以完全訪問硬體,並以模塊化形式設置,方便在系統運行期間直接裝載或卸載。

Linux內核的主要組成部分包括存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化和系統調用等。這些組件共同協作,確保了系統的穩定運行。

內核版本號採用三種不同的方式表示。第一種方式用於1.0版本之前,數字從0.01開始遞增,直至1.0。第二種方式用於1.0之後到2.6,數字由A.B.C構成,A代表主版本號,B代表次主版本號,C代表較小的末版本號。只有在內核發生很大變化時,A才發生變化。通過數字B可以判斷Linux的穩定性,偶數的B代表穩定版,奇數的B代表開發版。C代表一些bug修復、安全更新、新特性和驅動的次數。

第三種方式從2004年2.6.0版本開始,採用「時間驅動」的方式。3.0版本之前,版本號為A.B.C.D,七年裡,前兩個數字A.B即「2.6」保持不變,C隨著新版本的發布而增加,D代表bug修復、安全更新、添加新特性和驅動的次數。3.0版本之後,版本號為A.B.C,B隨著新版本的發布而增加,C代表bug修復、安全更新、新特性和驅動的次數。

採用第三種方式後,不再使用偶數代表穩定版,奇數代表開發版的命名方式。例如,3.7.0代表的是穩定版!

Ⅳ Linux內核:內存管理——多級頁表

多級頁表相較於一級頁表在存儲空間上更具優勢,主要因為以下幾點

  1. 減少內存佔用

    • 分級存儲:多級頁表通過將頁表分為多個級別,只有真正需要的頁表才保留在內存中,其他不需要的頁表則不被存儲,從而大大節省了內存空間。
    • 稀疏映射:對於大多數進程,其虛擬地址空間中的頁面並非全部被使用。多級頁表通過頂級頁表為真正有用的低級頁表提供索引,將頁表的存儲空間降至最低。
  2. 優化存儲需求

    • 降低頁表項數量:對於一個運行的進程,其虛擬地址空間中只有被當前使用或即將使用的頁面被映射到內存中,這極大地減少了對頁表的存儲需求。
    • 利用「在/不在」位:多級頁表中的頂級頁表大部分表項的「在/不在」位被設為0,當訪問這些表項時,系統會引發頁面失效,提示頁表中沒有對應頁幀,進一步減少了不必要的頁表佔用。
  3. 提高內存管理效率

    • 層次化設計:多級頁表的層次化設計不僅解決了頁表存儲空間的問題,還為內存管理帶來了更大的靈活性和效率。
    • 性能優化:通過減少內存中的頁表項數量,多級頁表優化了地址映射的性能,使得系統在內存管理方面更加高效。

綜上所述,多級頁表通過其分級存儲、稀疏映射以及層次化設計等特性,相較於一級頁表在存儲空間上具有顯著優勢,同時提高了內存管理的效率和靈活性。

閱讀全文

與linux內核存儲相關的資料

熱點內容
android多行注釋的快捷鍵 瀏覽:866
java環境變數的作用 瀏覽:526
phpwebsocket擴展 瀏覽:17
會玩app怎麼把豬頭弄掉 瀏覽:93
戰地3怎麼換伺服器地址 瀏覽:474
qq郵箱app怎麼導出通訊錄 瀏覽:704
命令女主身體 瀏覽:969
java的注釋規范 瀏覽:862
華為mt40e怎麼刪app 瀏覽:91
java用到的技術 瀏覽:618
農行手機app怎麼更新版本 瀏覽:538
初中生程序員職業生涯道路 瀏覽:930
linux部署常用命令 瀏覽:386
博途一直正在編譯組態 瀏覽:433
安卓快手紅包標志不見了怎麼設置 瀏覽:315
mount命令用法 瀏覽:992
編譯原理怎麼畫狀態轉化圖 瀏覽:385
命令行怎麼讀拼音 瀏覽:343
異界爆肝程序員 瀏覽:604
電腦隱私文件加密方法和隱藏技巧 瀏覽:92