可執行文件的裝載與進程
覆蓋裝入和頁映射是兩種典型的動態裝載方法
進程創建的三步
1.建立一個獨立的虛擬地址空間
2.讀取可執行文件頭,而且創建虛擬空間與可執行文件的映射關係。
3.將CPU的指令寄存器設置成可執行文件的入口地址,啓動運行。程序員
常見段權限組合:操作系統
- 以代碼段爲表明的權限爲可讀可執行段
- 以數據段和BSS段爲表明的權限爲可讀可寫段
- 以只讀數據段爲段表的權限爲只讀的段
操做系統經過給進程空間劃分出一個個VMA來管理進程的虛擬空間:
基本原則就是將相同權限屬性的、有相同映像文件的映射成一個VMA,一個進程基本能夠分爲以下幾種VMA區域:進程
- 代碼VMA:權限只讀、可執行;有映像文件。
- 數據VMA:權限可讀寫、可執行;有映像文件。
- 堆VMA:權限可讀寫、可執行;無映像文件,匿名,可向上擴展。
- 棧VMA:權限可讀寫、不可執行;無映像文件,匿名,可向下擴展。
知識雜項
- Linux malloc最大申請空間2.9G左右,Windows malloc最大申請空間1.5G左右。
參考
《程序員的自我修養》擴展