http://linux.die.net/man/2/mlockall爲什麼我們需要在RAM中鎖定進程的地址空間?
mlockall用於()鎖定所有調用進程的虛擬地址空間到RAM中,防止其從存儲器被尋呼的交換區域。
這是爲什麼在實時系統中的重要?
http://linux.die.net/man/2/mlockall爲什麼我們需要在RAM中鎖定進程的地址空間?
mlockall用於()鎖定所有調用進程的虛擬地址空間到RAM中,防止其從存儲器被尋呼的交換區域。
這是爲什麼在實時系統中的重要?
它保證了內存總是在RAM中,從來沒有移動到交換磁盤。這使得訪問這些內存位置的的速度更快,因爲與RAM相比,磁盤速度非常慢。
在實時系統(Linux不是一個RTS順便說一句!),你需要非常低的延遲,從而導致磁盤存取內存訪問通常是內部沒有時間要求嚴格的代碼可以接受的。
好吧,是的,謝謝你粗暴的聲明。那麼,這意味着非常重要的任務在這個實時事件處於活動狀態之前是否會在公羊中找不到任何位置? – 2012-03-22 08:40:05
@AnishaKaul:這意味着該進程將始終以更好的性能運行,因爲與該進程相關的所有頁面都保留在RAM中。但是請注意,如果沒有足夠的物理內存使用'mlockall()',其他進程中的內存分配調用將失敗。 – 2012-03-22 08:42:51
隨着實時處理的關鍵成分是實時組件 - 即你不能等待內存交換進/出。
它可以用於實時應用或高安全性的數據處理。 這是從mlockall用於()文檔報價:
實時應用需要確定性時序,並且,象 調度, 尋呼是意想不到的程序執行延遲的重要原因之一。實時應用程序通常還會使用sched_setscheduler(2)切換到實時調度程序 。 Crypto- 圖形安全軟件經常處理密碼或密鑰等重要字節作爲數據結構。作爲尋呼的結果, 這些祕密可以轉移到以每個 sistent交換商店中,那裏的安全軟件已刪除的祕密後 RAM和終止他們可能是敵人長期訪問。 (但請注意,無論內存鎖定如何,筆記本電腦和某些臺式計算機上的 掛起模式都會將系統RAM的副本保存到磁盤。)
正在使用mlockall()防止延遲的實時進程在 進入時間關鍵部分之前,頁面錯誤應該保留足夠的鎖定堆棧頁面,以便函數調用不會導致頁面錯誤。這可以通過調用一個函數來實現,該函數分配一個足夠大的自動變量(一個數組),並寫入該數組佔用的內存以觸及這些堆棧頁。這樣,足夠的頁面將被映射到棧中,並且可以被鎖定到RAM中。虛擬寫入可確保 甚至在臨界區域中甚至不會發生寫入時複製頁錯誤。
非常感謝。我的錯,我應該在問之前正確地閱讀文檔。 – 2012-03-22 08:57:37
另請參閱Herb Sutter的文章http://www.nwcpp.org/Downloads/2007/Machine_Architecture_-_NWCPP.pdf ....它告訴你更多關於內存延遲問題.... .u可以考慮這些,而設計一個實時系統.... – snibu 2012-03-22 10:28:48