wrk筆記 申請記憶體的大致流程(x64)

2021-07-10 11:06:02 字數 1029 閱讀 1849

ntallocatevirtualmemory - allocvm.c

1.檢查各引數的有效性,如果當前程序不是引數制定的程序,那麼附加到目標程序。

2.調整需要申請的大小,使之增加到頁面的整數倍。計算需要申請的頁面數。

capturedregionsize = round_to_pages (capturedregionsize);

numberofpages = bytes_to_pages (capturedregionsize);

3.從非分頁記憶體池中申請乙個「短版」mmvad結構體的記憶體。根據引數填充vad的成員。

4.鎖住程序的位址空間,尋找一塊空白位置。獲得這塊空白位置的開始位址(注意這個空白塊64kb對齊)。並且記錄到mmvad中

status = mifindemptyaddressrange (capturedregionsize,

alignment,

(ulong)zerobits,

&startingaddress);

5.將mmvad結構體插入到程序的位址空間中。

status = miinsertvadcharges (vad, process) //在系統bitmap中記錄記憶體開銷。

miinsertvad (vad, process);//在vad樹中插入vad節點

6.根據va開始位址和結束位址建立(pxe,ppe)pde,pte。

pointerpde = migetpdeaddress (startingaddress);

pointerpte = migetpteaddress (startingaddress);

lastpte = migetpteaddress (endingaddress);

//省略部分**

mimakepdeexistandmakevalid (pointerpde, process, mm_noirql);

while (pointerpte <= lastpte)

//省略部分**

pointerpte += 1;

}

linux裝置驅動的大致流程

linux裝置驅動的大致流程 1.檢視原理圖,資料手冊,了解裝置的操作方法 2.在核心中找到相近的驅動程式,以他為模板進行開發,有時需從零開始 3.實現驅動程式的初始化及退出,如向核心註冊和登出這個驅動程式 module init module exit 4.設計所要實現的操作,如open,clos...

cpu讀寫資料的大致流程

一般來說,讀寫資料都是相對於cpu的。當程式載入進記憶體後,指令放在code段,資料放在data段。data段中資料的位址由段暫存器和該資料偏移組成。code段的位址由cs和ip暫存器組成。cpu向記憶體寫資料的時,相當於將資料寫入記憶體位址中。資料的位址經過位址匯流排送給解碼器,解碼器的有效輸出送...

Postmaster主迴圈的大致流程

postmaster.c 中,主迴圈的大致流程如下 main idle loop of postmaster static intserverloop void else now check the select result if selres 0 new connection pending o...