struct vm_struct和struct vm_area_struct

        內存映射信息放在vma參數中,注意,這裏的vma的數據類型是struct vm_area_struct,它表示的是一塊連續的虛擬地址空間區域,在函數變量聲明的地方,我們還看到有一個類似的結構體struct vm_struct,這個數據結構也是表示一塊連續的虛擬地址空間區域,那麼,這兩者的區別是什麼呢?在Linux中,struct vm_area_struct表示的虛擬地址是給進程使用的,而struct vm_struct表示的虛擬地址是給內核使用的,它們對應的物理頁面都可以是不連續的。struct vm_area_struct表示的地址空間範圍是0~3G,而struct vm_struct表示的地址空間範圍是(3G + 896M + 8M) ~ 4G。struct vm_struct表示的地址空間範圍爲什麼不是3G~4G呢?原來,3G ~ (3G + 896M)範圍的地址是用來映射連續的物理頁面的,這個範圍的虛擬地址和對應的實際物理地址有着簡單的對應關係,即對應0~896M的物理地址空間,而(3G + 896M) ~ (3G + 896M + 8M)是安全保護區域(例如,所有指向這8M地址空間的指針都是非法的),因此struct vm_struct使用(3G + 896M + 8M) ~ 4G地址空間來映射非連續的物理頁面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章