2009-12-05 99 views
1

注:我試圖研究虛擬內存分配的高度概括是整個過程的虛擬地址空間分割成頁

是一種特殊的整個進程的虛擬地址空間分割成頁,大小:

.text 
    .bss 
    .data 

這是否也包括堆空間和堆棧 - 或者這總是不可分頁?

+0

從技術上講,這些是段而不是頁面。分段的大小不限於4K – 2009-12-05 10:43:37

回答

2

首先注意「頁面」只是地址空間的區域。一個「不可分頁」的區域(我假定你的意思是它不能交換到磁盤)仍然在邏輯上被分成頁面,但操作系統可能在這些頁面上實現不同的策略。

最常見的頁面大小是4096字節。許多體系結構支持同時使用多個頁面大小(例如4K頁面和1MB頁面)。但是,操作系統通常只有一個頁面大小,因爲在大多數情況下,管理多個頁面大小的成本遠遠高於其提供的好處。例外存在,但我認爲你不需要擔心它們。

每個虛擬頁面都附有特定的權限,比如它是否可讀,可寫,可執行(因硬件支持而異)。操作系統可以使用它來幫助實施安全性,緩存一致性(用於共享內存)以及將頁面交換出物理內存。

.text.bss.data區不一定是已知的OS(雖然大多數操作系統都瞭解他們,出於安全和性能方面的原因)。

在第一次訪問該頁面之前,操作系統可能不會實際爲堆棧/堆頁面分配內存。操作系統可能會提供系統調用來請求更多的堆/堆棧空間頁面。某些操作系統提供共享內存或共享庫功能,導致地址空間中出現更多區域。取決於操作系統。

1

.data是程序的初始化全局變量的位置。 .bss包含沒有顯式初始值設定項的全局變量(默認值爲0)。堆和堆棧是彼此獨立的存儲區域。進程看到的所有內存都是虛擬內存分頁。一個進程看不到任何東西比虛擬內存。

2

通常,在分頁的操作系統上,處理整個地址空間被分成頁面。每個線性地址包含兩個分量 - 最高有效位的頁碼和最低有效位的頁內偏移量。

例如,對於32位線性地址和4kB頁,高20位是頁碼,低12位是頁偏移量。