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...