我有一個令人困惑的概念,關於在x86 linux機器上分割分頁的過程。如果有人澄清從開始到結束所涉及的所有步驟,會很高興。根據頁面分割內存的程序壽命
x86使用分頁分段內存技術進行內存管理。
任何人都可以解釋一下從一個可執行.elf格式文件從硬盤加載到主內存到它死亡的時刻發生了什麼。編譯時,可執行文件有不同的部分(文本,數據,堆棧,堆,bss)。這將如何加載?他們將如何在頁面分割內存技術下建立起來。
想知道如何爲加載的程序設置頁表?想知道如何設置GDT表。寄存器如何加載?爲什麼說它的邏輯地址(當MMU的分段單元是一個32位的機器時,它是48位(16位段選擇器+ 32位偏移量),其他16位將如何存儲?從ram訪問的任何東西必須是32位或4字節如何訪問16位的其餘部分(要加載到段寄存器)?
在此先感謝問題可以有很多事情,但希望得到澄清的可執行文件的整個生命週期。會很高興,如果一些答案,向上拉動此討論。
謝謝亞歷克斯,我已經理解90%的解釋...想問...在非x86系統的情況下,如何評估段選擇器?另外,爲什麼偏移量(邏輯地址中的第二個數字)是16/32/64? –
糾正我....當一個程序從硬盤進入內存;程序段被分配了邏輯地址(16位選擇器+ 32偏移量)?這個16位選擇器是如何發現的(是由編譯器完成的)...在選擇器加載到GDT的時候,GDT表中沒有與當前程序對應的條目嗎?如果是的話,GDT表格條目是如何填充的? –
並非所有CPU都具有與x86 CPU段等同的功能。如果他們這樣做,他們的工作方式取決於CPU。我無法談論抽象的非x86 CPU的具體細節,至少需要首先選擇一個特定的CPU。 :) x86 CPU在操作數大小及其在內存中的尋址方面有幾種不同的操作模式。 –