1. 程式人生 > >紅黑樹在Linux虛擬記憶體區域管理中的應用

紅黑樹在Linux虛擬記憶體區域管理中的應用

參考資料:http://wenku.baidu.com/view/f0795f8783d049649b66586f.html

Linux核心中每一個使用者程序都可以訪問4GB的線性虛空間,為了能表達真正被程序使用的虛擬記憶體空間,Linux定義了虛擬儲存區域(virtualmemoryarea,VMA)。程序的虛擬空間中可能有多個虛擬儲存區域,Linux核心中對這些虛擬儲存區域的組織方式有兩種,一種是採用雙迴圈連結串列,還有一種是採用樹的結構。Linux核心從2.4.10開始,Linux核心對虛擬區的組織不再採用一般平衡二叉樹,而是採用紅黑樹,這是出於效率的考慮。雖然AVL樹和紅黑樹很類似,但是AVL樹的刪除和插入操作需要多次旋轉操作以及不斷向根節點回溯。所以在大量刪除和插入操作的情況下,AVL樹的操作效率不高。紅黑樹是一種查詢效率僅次於AVL樹的不完全平衡二叉樹,它能夠以O(logn)[1]的時間複雜度進行插入、刪除操作,而且它的插入和刪除最多需要兩次或者三次旋轉即可保持樹的平衡。雖然二者的演算法複雜度相同,但在最壞情況下,紅黑樹提供一種快實時的刪除和插入一個節點的演算法。顯然紅黑樹的高效操作更適合Linux核心中VMA的新增、刪除和查詢,這也是在Linux下開發嵌入式系統的要求。1虛擬儲存區域Linux虛擬記憶體使執行在系統上的程序可以分配到比可用物理空間更多的空間,但是每個程序的地址空間很少能全部用滿,一般只是用到了其中一些分離的區域,這些分離的區域被定義為虛擬儲存區域(virtualmemoryarea,VMA)。虛擬儲存區域是某個程序的一段連續的虛存空間,在這段虛存空間裡的所有單元擁有相同的特徵,它是對頁錯誤處理有同一規則的程序虛擬記憶體空間的部分,如共享庫、執行區域等。Linux核心中,一個程序的虛擬地址空間主要由兩個資料結構來描述。一個是最高層次的:mm_struc,t一個是較高層次的:vm_area_structs。最高層次的mm_struct結構描述了一個程序的整個虛擬地址空間;較高層次結構vm_area_truct描述了虛擬儲存區域。程序的虛存區域中資料結構之間的關係如圖1所示。mm_struct結構:structmm_struct{structvm_area_struct*mmap;//指向由若干VMA組成的連結串列rb_rootmm_rb;//指向一棵紅黑樹structvm_area_struct*map_cache;//指向最近找到的虛存區域intmmap_coun;t//虛擬區間的個數}vm_area_struct結構:sructvm_area_struct{structmm_struct*vm_mm;//虛擬區域所在的虛擬地址空間

相關推薦

Linux虛擬記憶體區域管理應用

參考資料:http://wenku.baidu.com/view/f0795f8783d049649b66586f.html Linux核心中每一個使用者程序都可以訪問4GB的線性虛空間,為了能表達真正被程序使用的虛擬記憶體空間,Linux定義了虛擬儲存區域(virtua

Linux 4 15核心TCP的重傳佇列變成

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

原理淺談(附Linux核心原始碼註釋)

引言:紅黑樹(英語:Red–black tree)是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。它是在1972年由魯道夫·貝爾發明的,他稱之為"對稱二叉B樹",它現代的名字是在Leo J. Guibas和Robert Sedgewick於19

真正理解,真正的(Linux核心裡大量用到的資料結構,且常被二貨問到)

作為一種資料結構,紅黑樹可謂不算樸素,因為各種宣傳讓它過於神祕,網上搜羅了一大堆的關於紅黑樹的文章,不外乎千篇一律,介紹概念,分析效能,貼上程式碼,然後給上罪惡的一句話,它最壞情況怎麼怎麼地...              我們想,一棵二叉樹怎麼就是最壞情況,那就是它退化為一

磁碟和記憶體選擇B的原因

B+樹的高度要比紅黑樹小,有效減少了磁碟的隨機訪問B+樹的資料節點相互臨近,能夠發揮磁碟順序讀取的優勢(快取)B+樹的資料全部存於葉子結點,而其他節點產生的浪費在經濟負擔上能夠接收,紅黑樹儲存浪費小紅黑樹常用於儲存記憶體中的有序資料,增刪很快,b+樹常用於檔案系統和資料庫索引

(三)之 Linux核心的經典實現

1 /* 2 Red Black Trees 3 (C) 1999 Andrea Arcangeli <[email protected]> 4 (C) 2002 David Woodhouse <[email protected

簡述Linux虛擬記憶體管理

原文地址:https://cloud.tencent.com/ developer/article/1157420 虛擬儲存 虛擬儲存(virtual memory, VM)的基本思想是: 維護一個虛擬的邏輯記憶體機制(通常比實體記憶體大得多), 程序都基於這個虛擬記憶體, 在

linux核心分析--核心的資料結構之(續)

#include<linux/rbtree.h> #include <linux/string.h> #include "kn_common.h" MODULE_LICENSE("Dual BSD/GPL"); struct student { int id;

linux核心分析--核心的資料結構之(四)

紅黑樹由於節點顏色的特性,保證其是一種自平衡的二叉搜尋樹。 紅黑樹的一系列規則雖然實現起來比較複雜,但是遵循起來卻比較簡單,而且紅黑樹的插入,刪除效能也還不錯。 所以紅黑樹在核心中的應用非常廣泛,掌握好紅黑樹,即有利於閱讀核心原始碼,也可以在自己的程式碼中借鑑這種資料結構。 紅黑樹必

Linux 虛擬記憶體和實體記憶體管理

MMU進行虛擬地址到物理轉換的時候,並不是一個個地址轉換的,而是一段段地址轉換。 轉換的單位: section  段   1MB    ----> u-boot large page  大頁   64KB small page  小頁    4kB   ----> linux內,page=4KB

Linux虛擬記憶體管理(一)

分頁機制 虛擬記憶體—— 計算機的記憶體容量有限,而某些程序執行所需的記憶體空間可能超過記憶體總容量,因而出現機器記憶體容納不下該程序所有程式碼、資料和堆疊而只能容納其中一部分的情況。 虛擬儲存的基本思想:一個程序的程式碼、資料、堆疊的總容量可能超過可用實

詳解Linux核心演算法的實現

    開發平臺:Ubuntu11.04     核心原始碼:linux-2.6.38.8.tar.bz2     平衡二叉樹(BalancedBinary Tree或Height-Balanced Tree)又稱AVL樹。它或者是一棵空樹,或者是具有下列性質的二叉樹:

linux核心運用小例項

linux核心版本linux-3.10.36 在linux核心原始碼中,紅黑樹是一個比較獨立的模組,很容易將其剝離出來,拿到應用層使用。 結構 linux核心的rb_node結構體 struct rb_node { unsigned long

【bzoj3227】

發現 blog ret amp 這樣的 spa 兩個 include log 神TM的紅黑樹,其實本質上應該還是一種樹dp的問題…… 一開始想了一個比較裸的樹dp,後來發現還有更強的做法。 每個前端黑節點是看作一個物品,然後這就是很典型的樹形dp的問題。 不過可以這麽考慮,

圖解集合7:概念、的插入及旋轉操作詳細解讀

集合 得到 2個 排序。 數據流 except boolean 修正 split 原文地址http://www.cnblogs.com/xrq730/p/6867924.html,轉載請註明出處,謝謝! 初識TreeMap 之前的文章講解了兩種Map,分別是HashMa

C++實現

con colors end ase 復制代碼 設置 typename ucc 技術 1 /* 2 * rbtree.h 3 * 1. 每個節點是紅色或者黑色 4 * 2. 根節點是黑色 5 * 3. 每個葉子節點是黑色(該葉子節點就空的節點)

數據結構學習筆記-排序/隊/棧/鏈/堆/查找/

算法 數據結構排序:插入排序:每次從剩余數據中選取一個最小的,插入已經排序完成的序列中合並排序:將數據分成左右兩組分別排序,然後合並,對每組數據的排序遞歸處理。冒泡排序:重復交換兩個相鄰元素,從a[1]開始向a[0]方向冒泡,然後a[2]...當a[i]無法繼續往前擠的時候說明前面的更小了,而且越往前越小(擠

查找(一)史上最簡單清晰的解說

ont 演示 detail align article 向上 節點 動態插入 列表 查找(一) 我們使用符號表這個詞來描寫敘述一張抽象的表格。我們會將信息(值)存儲在當中,然後依照指定的鍵來搜索並獲取這些信息。鍵和值的詳細意義取決於不同的應用。 符號表中可能會保

教你透徹了解

black ade 我們 工作 key 針對 otn strong lean 教你透徹了解紅黑樹 作者:July、saturnman 2010年12月29日 本文參考:Google、算法導論、STL源碼剖析、計算機程序設計藝術。 推薦閱讀: Left-

else if 滿足 編碼 使用 由於 imap ica 困難 十分 轉自:http://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html 前面一篇文章介紹了2-3查找樹,可以看到,2-3查找樹能保證在插