2011-08-05 45 views
17

我正在考慮將IMAGE_FILE_REMOVABLE_RUN_FROM_SWAPIMAGE_FILE_NET_RUN_FROM_SWAP PE標誌包含到我的可執行文件中。是否存在與IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP或IMAGE_FILE_NET_RUN_FROM_SWAP相關的風險?

這個想法是爲了防止從網絡運行可執行文件的客戶端看到偶爾出現的異常,例如網絡卷在睡眠後無法重新連接。到目前爲止,我們一直建議客戶從本地連接的捲上運行可執行文件。

但是,我對虛擬內存,加載器等知之甚少,知道使用這些PE標誌會帶來哪些風險。

例如,如果我這樣做,我的可執行文件會消耗更多的物理內存,特別是如果同時運行多個可執行文件實例?

對不起,我不能舉出更多潛在風險的例子,但這是我的問題的本質。我有一種感覺,可能會有這樣做的缺點,但根本不知道這些缺點可能是什麼。

+0

由於整個EXE都被複制到分頁文件中,所以它應該冷啓動較慢。不知道Windows是否足夠聰明以共享頁面,我有點懷疑它。 Process Explorer會告訴你,看看私人字節。 –

+0

@Hans在加載時EXE是否被複制到分頁文件中,或者是否在頁面被複制時複製到頁面中?我應該如何解讀私人字節?我對虛擬內存的運作真的很無知。 –

+0

頁面輸入操作是問題,而不是頁面輸出。所以是的,所有的頁面都必須被複制,以便以後可以分頁。私人字節數是不可共享的虛擬機數量。 –

回答

11

PE加載程序與虛擬內存管理器一起工作。簡而言之,您的可執行文件並沒有像需求頁面那樣加載太多。當然,需求已經被調出。由於可執行文件被鎖定並且不會更改,所以這很有效。不需要交換; RAM只包含MRU部分。

PE標誌改變了這一點。如果條件滿足,則可執行文件未鎖定並可能更改/消失。這意味着即使在啓動時,VMM也必須將其所有頁面保留在RAM或交換中。這是很多複製和RAM使用,但結果是網絡的丟失不再導致頁面錯誤。當內存不足時,頁面不能被丟棄,但必須保存爲交換。

特別是,這些標誌工作當且僅當條件滿足。 IMAGE_FILE_NET_RUN_FROM_SWAP不影響本地運行的應用程序。所以支付RAM /交換價格的唯一客戶是那些選擇的客戶。

+1

謝謝您的回答。我的測試似乎表明可執行文件被鎖定。當它從網絡捲上運行時,我無法將其刪除。如果運行多個實例,是否會對物理內存使用造成影響?我猜想不是頁面仍然在不同的進程之間共享。如果我正確地理解了你的話,唯一的性能暗示是,如果操作系統決定分頁出一些可執行文件,是否這些頁面被複制到交換而不是簡單地丟棄。 –

+2

@DavidHeffernan圖像在加載時被複制到交換位置,而不是在頁面輸出時。 (畢竟,這是旗幟的一點。)它們在頁面輸出時被簡單地丟棄,因爲swap中已經有一個安全的副本。 –

+0

謝謝@Raymond。我想我現在已經足夠了解這些問題了。從根本上說,我的問題在於我對虛擬內存系統的理解不完整。我必須挖出我的窗戶內部書並刷新。 –

相關問題