我對內核或系統編程非常陌生,處理虛擬地址空間和內核地址空間?怎麼樣?
我有幾個與虛擬內存有關的問題。主要與靜態與運行時間有關[即ELF和加載/鏈接等],具體到linux-x86。
我的理解可能是完全錯誤的......
我知道的虛擬內存,它的分裂1G/3G。在用戶模式下進程無法訪問PAGE_OFFSET之上的地址 - PAGE_OFFSET是虛擬地址。
在靜態時間ELF定義進程虛擬空間?
如果ELF定義的虛擬地址空間,然後做ELF還定義了內核的虛擬地址空間?怎麼樣?我假設內核虛擬地址空間在運行時動態映射?
如果內核地址空間映射到進程地址空間,那麼爲什麼進程大小(虛擬)也包含內核大小呢?
- 何時以及如何將此內核地址空間映射/鏈接? 像,在共享庫的情況下,特定的文件被vm結構等指向。
- 是否當代碼流遇到系統調用?例如。
可執行文件大小是否完全決定進程大小(虛擬)?在什麼情況下有所不同或者完全不同。
任何解釋整體流程的文章?
編譯 - >鏈接/負載 - >虛擬內存結構(內核地址空間/共享對象等)
我知道它很龐大的,但對整體流程的說明會工作。
在一篇文章中有太多問題,其中一些問題('內核是否僅爲用戶進程使用虛擬地址)在很多時候被問過。 – Tsyvarev
一些答案我在這裏和其他帖子.. http://stackoverflow.com/questions/14540656/why-kernel-needs-virtual-addressing ..... 編輯帖子相應 –