爲mlockall
手冊頁上我的內核3.0說你如何理解mlockall手冊頁?
mlockall用於()鎖映射到 調用進程的地址空間中所有頁面。這包括代碼頁,數據和堆棧 段以及共享庫,用戶空間內核數據,共享內存和內存映射文件 。當呼叫成功返回時,所有映射的頁面保證 駐留在RAM中;頁面 保證留在RAM中,直到稍後解鎖。
後來說,使用mlockall用於(),以防止對 頁面故障延遲
實時進程進入 時間關鍵部分之前應該預留足夠的鎖定堆棧頁,這樣就沒有調用 函數 可能導致頁面錯誤。這可以通過調用一個分配足夠大的自動變量(一個數組)的函數來實現,並且寫入該數組佔用的內存以觸及這些堆棧頁。這樣, 足夠的頁面將被映射爲堆棧並且可以被鎖定到RAM中。虛擬寫入確保甚至在臨界區域中甚至不會發生寫入時複製頁面錯誤。
我知道這個系統調用無法猜測將會達到的最大堆棧大小,因此無法鎖定堆棧的頁面。但爲什麼上面顯示的男人的第一部分說,這也是爲堆棧完成的?這個手冊頁是否有錯誤,還是僅僅意味着鎖定是爲初始堆棧大小完成的?
請注意,Linux最初爲每個進程提交128k的堆棧空間,似乎沒有辦法調整/覆蓋它。因此,'mlockall'將鎖定至少128k,這比任何合理的程序都需要更多。 – 2012-04-05 00:56:00