虛擬地址描述符

大家都知道,在x86的平台上WINDOWS作業系統為每個進程描述了一個完整的4G的地址空間,這4G空間由低位2G的用戶地址空間和高位2G的系統地址空間構成。每個進程的用戶地址空間是相互隔離的,不可見的。但是系統地址空間是各個進程間共享的,對於進程有不同的視圖。用戶的私有的數據代碼還有載入的動態程式庫(DLL)都存放在用戶地址空間中。現在有個問題是,總要有個地方記錄著這2G地址空間,到底那些被預留了,那些被提交了,那些被訪問了吧。還有個問題就是,對於程式來講,地址不是連續的,是分段的。代碼段、數據段、堆、棧等等。可是進程的空間是連續的,從0x0000000到0x7FFFFFF。總要有個數據結構描述程式的各個段對應那段地址空間。這兩個重要任務就交個了VAD,即虛擬地址描述符(Virtual Address Descriptor)。VAD組織成了一個AVL自平衡二叉樹(參考Mark Russinovich的《深入解析windows作業系統》),這種組織方式完全是方便快速查找。樹中的每一個節點代表了一段虛擬地址空間。所以程式的代碼段,數據段,堆段都會各種占用一個或多個VAD節點,由一個MMVAD結構完整描述。棧並不受VAD的管理。

相關詞條

相關搜尋

熱門詞條

聯絡我們