Virtual Address Space (VMA) 或 Process Address Space
術語
-
mm_struct
- 每個 Process 都有一個 mm_struct
- mm_struct 含有當中 Page Global Directory (PGD)
- 當中含有許多 physical page frame
-
Linear Address Space
- 記體體系統所有空間,可以透過線性或直接透過地址進行定址,當中 Linear Address Space 記憶體是線性並且連續的。
-
Flat Address Space
Segments
對於 elf 當中,會將透過 segment 的機制分配各種權限,並且一個 segment 當中可以放入多個 section,如 bss section 放到可以寫可讀的 segment 當中,在描述上,稱之 .data
, .bss
為 section 會比較合理。
在 ELF format 中,上述幾個 section 也是放在 section 的儲存位置。
參見
- assembly - Section vs. segment? - Stack Overflow
- linux - What’s the difference of section and segment in ELF file format - Stack Overflow
Linux 的 Address space
kernel 的 address space
- offset: 0xC0000000 (x86)
要怎麼知道不同程式語言的內存結構
如果是指 virtual address space,最底層跟機器有關,會影響上面程式實作的方法,再來 page 跟作業系統與硬體(如 MMU)有關,執行檔格式跟 loader, linker 相關,windows 和 linux 的 memory layout 是不同的,編譯器也會影響 linker, loader 的參數,往上可能是標準函式庫的實作,比如 dlmalloc 這類 allocator,是實作在 glibc 這類函數庫中,然後有些程式可能會自己實作記憶體管理機制,比如 chrome 就有實踐自己的分配機制與 GC。
也因此如果要了解不同語言的內存結構,首先需要知道這個語言底下是採用哪些軟體框架與架構、函式庫、編譯器、作業系統、硬體等等。
Reference
- assembly - What is the difference between linear ,physical ,logical and virtual memory address? - Stack Overflow
- Understanding The Linux Virtual Memory Manager by Mel Gorman
- Virtual address spaces - Microsoft Docs
Operating System Process System Program