在創建物理內存分配器來編寫內核時,我試圖創建一個數組struct page_frame
,其中陣列的每個成員都代表給定的物理4KB內存塊。在物理內存中動態創建數組
目前內核加載到物理存儲器地址從到0x000000000
physfree
剩餘塊從physfree
到physEnd
是空閒塊。我想physfree
之後創建我struct page_frame
陣列和保持陣列中存儲器的每個塊中的元件從0
到physEnd
索引的數量此數組中因而應該physEnd/4096
。問題是,physEnd直到運行時才知道,所以我不知道如何動態分配這樣的數組。目前,以下內容不會填充struct page_frame
的數組,因爲只有第一個元素memBlocks[1]
顯示爲正確的struct page_frame
,其他元素不會正確初始化。
struct page_frame* memBlocks;
memBlocks = (struct page_frame*)kernbase + physfree;
int count = 0;
for(char* i = (char*) 0; i < (char*) ALIGNUP(physEnd)-PAGESIZE; i+=PAGESIZE)
{
//The new page frame to be placed in array
struct page_frame insert;
insert.used = 1;
memBlocks[count] = insert;
count++;
}
如何在我的內核頂部的地址上動態創建這樣一個數組,以便我可以跟蹤我的空閒物理塊?我試圖利用指向memBlocks
結構的指針,並將其設置爲kernbase + physfree
(因爲虛擬內存當前已啓用)後的地址。然後我想要數組中的每個元素只佔用sizeof(struct page_frame)
。我是否正確訪問memBlocks
的元素,方法是將它們編入索引memBlocks[i]
?還是有更好的方法來創建這樣一個數組?
不知道爲什麼,這個問題正在向下投了反對票。如果有一個地方可以改進,並且您投票了,請發表評論。 – sreisman
在您的代碼示例中,實際上_not沒有按照需要工作?請更清楚地說明預期結果和目前結果。還請添加'memBlocks'聲明。 –