reactos作業系統實現 20

2021-04-24 07:26:32 字數 1729 閱讀 1904

#001/* setup the idle thread */

#002keinitializethread(initprocess,

#003initthread,

#004null,

#005null,

#006null,

#007null,

#008

null,

#009idlestack);

......

#033

#034/* set up the thread-related fields in the prcb */

#035prcb->currentthread = initthread;

#036prcb->nextthread = null;

#037prcb->idlethread = initthread;

#038

#039/* initialize the kernel executive */

#040expinitializeexecutive(number, loaderblock);

上面這句就是呼叫函式

expinitializeexecutive

來初始化核心執行體的功能,它是核心所有功能管理初始化,比如核心物件管理器,核心記憶體管理,還有硬體抽象層

hal的初始化。具體的部分**如下:

#001void

#002ntapi

#003expinitializeexecutive(in ulong cpu,

# 004

inploader_parameter_block loaderblock)

#005

上面主要檢查引導引數是否正確,如果不正確就進入處理出錯,直接停在出錯位置上,把出錯碼輸出。

#029

#030/* initialize prcb pool lookaside pointers */

#031exinitpoollookasidepointers();

上面是初始化

prcb

裡的後備列表緩衝區指標,那麼什麼是後備列表呢?堆管理器管理著系統和使用者的堆記憶體,它把堆空間分為相同尺寸的塊

(block)

。堆管理器會根據堆分配請求,去選擇乙個合適尺寸的未使用的塊。顯然,這個過程需要點時間。如果你需要固定尺寸的記憶體塊,但是你事先並不知道它的大小和使用頻率,這樣的話為了效能的原因,你還是使用後備列表(

lookaside lists

)的,後備列表是只有核心模式才有的。

後備列表和系統記憶體池的主要的區別是什麼呢?後備列表只可以分配固定大小的事先定義尺寸的記憶體塊。後備列表會快很多,因為它不需要去搜尋可用的未分配的記憶體。

當你剛接觸後備列表,你需要解決的問題不是怎麼建立後備列表,而是管理你要分配的記憶體塊。

後備列表(

lookaside list

)是一組事先分配的相同尺寸的記憶體塊。這些塊有些在使用,有些沒被使用。當有記憶體分配請求的時候,系統會遍歷這個列表尋找最近的未分配的塊。如果未分配的塊找到了,分配請求就很快被滿足了。否則系統必須從分頁或不分頁記憶體池去分配。根據列表中分配行為發生的頻率,系統會自動調整未分配塊的數量來滿足分配請求,分配的頻率越高,會有越多的塊被儲存在後備列表中。後備列表如果總是不被使用,也會自動減少空間大小。

其實後備列表就是儲存一些最近使用的空閒記憶體的記憶體塊。

reactos作業系統實現 178

sendmessagew函式主要用來向視窗傳送訊息。下面就是它的實現 001 lresult winapi 002 sendmessagew hwnd wnd,003 uint msg,004 wparam wparam,005 lparam lparam 006 028 029 填寫訊息結構。03...

reactos作業系統實現 187

隨著全球化的發展,開發軟體都是面向多語言的環境。目前大多數程式都是採用不同字型來顯示不同語言的辦法,那麼有沒有一種更好的辦法,一種字型就可以解決全球語言的顯示呢?答案肯定的,它就是採用邏輯字型ms shell dlg和ms shell dlg2。比如開發應用程式時,就看到在資源裡可以設定ms she...

reactos作業系統實現 193

selectobject函式是將物件選定到指定的裝置場境中。具體實現 如下 001 hgdiobj 002 winapi 003 selectobject hdc hdc,004 hgdiobj hgdiobj 005 016 獲取選擇dc的物件正確的控制代碼。017 hgdiobj gdifixu...