2011-08-05 26 views
17

Tôi đang nghĩ đến việc bao gồm các cờ PE IMAGE_FILE_REMOVABLE_RUN_FROM_SWAPIMAGE_FILE_NET_RUN_FROM_SWAP PE vào tệp thi hành của mình.Có rủi ro nào liên quan đến IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP hoặc IMAGE_FILE_NET_RUN_FROM_SWAP không?

Ý tưởng là để ngăn chặn ngoại lệ không thường xuyên được nhìn thấy bởi khách hàng chạy thực thi từ mạng, ví dụ khi khối lượng mạng không kết nối lại sau khi ngủ. Cho đến nay, chúng tôi luôn khuyên khách hàng nên chạy tập tin thực thi từ khối lượng được kết nối cục bộ.

Tuy nhiên, tôi không biết đủ về bộ nhớ ảo, bộ tải, v.v. để biết những gì, nếu có, rủi ro có liên quan đến việc sử dụng các cờ PE này.

Ví dụ, nếu tôi làm điều này thì bộ nhớ vật lý của tôi sẽ được bộ nhớ thực thi nhiều hơn, đặc biệt nếu có nhiều phiên bản chạy thi hành cùng một lúc?

Tôi rất tiếc vì tôi không thể đưa ra nhiều ví dụ về rủi ro tiềm ẩn hơn, nhưng đó là bản chất của câu hỏi của tôi. Tôi có cảm giác rằng có thể có những nhược điểm để làm điều này nhưng chỉ đơn giản là không biết những gì những nhược điểm có thể được.

+0

Nó nên làm cho một khởi đầu lạnh chậm hơn vì toàn bộ EXE được sao chép vào tệp hoán trang. Không có ý tưởng nếu Windows là đủ thông minh để chia sẻ các trang, tôi kinda nghi ngờ nó. Process Explorer sẽ cho bạn biết, hãy xem Private Bytes. –

+0

@Hans EXE có được sao chép vào tệp hoán trang khi tải hay là các trang được sao chép ở đó nếu chúng được phân trang không? Và tôi nên giải thích Bytes riêng như thế nào? Tôi thực sự không biết gì về hoạt động của bộ nhớ ảo. –

+0

Thao tác trên trang là vấn đề, không phải là trang. Vì vậy, có, tất cả các trang phải được sao chép để chúng có thể được phân trang sau này. Private byte là số lượng VM không thể chia sẻ được. –

Trả lời

11

Trình tải PE hoạt động cùng nhau với trình quản lý bộ nhớ ảo. Nói một cách đơn giản, tệp thực thi của bạn không được tải quá nhiều theo yêu cầu. Và, tất nhiên, yêu cầu-paged out. Kể từ khi thực thi được khóa và không thay đổi, điều này hoạt động khá tốt. Không cần trao đổi; RAM chỉ chứa các phần MRU.

Cờ PE thay đổi điều này. Nếu các điều kiện được thỏa mãn, tệp thực thi không bị khóa và có thể thay đổi/biến mất. Điều này có nghĩa là VMM phải giữ tất cả các trang của nó trong RAM hoặc hoán đổi, ngay cả khi khởi động. Đó là rất nhiều việc sao chép và sử dụng RAM, nhưng kết quả là việc mất mạng không còn gây ra lỗi trang. Và khi RAM yếu, các trang không thể bị hủy bỏ nhưng phải được lưu để trao đổi.

Cụ thể, các cờ này hoạt động nếu và chỉ khi các điều kiện được thỏa mãn. IMAGE_FILE_NET_RUN_FROM_SWAP không ảnh hưởng đến các ứng dụng được chạy cục bộ. Vì vậy, khách hàng duy nhất trả giá bằng RAM/hoán đổi là những khách hàng chọn.

+1

Cảm ơn bạn đã trả lời. Các thử nghiệm của tôi dường như chỉ ra rằng tệp thực thi bị khóa. Tôi không thể xóa nó khi nó chạy ra khỏi ổ đĩa mạng. Có ngụ ý về việc sử dụng bộ nhớ vật lý nếu nhiều trường hợp được chạy không? Tôi đoán là không phải các trang vẫn được chia sẻ giữa các quy trình khác nhau. Nếu tôi hiểu bạn một cách chính xác thì ý nghĩa hiệu suất duy nhất là nếu hệ điều hành quyết định trang ra một số tệp thực thi, thì các trang đó được sao chép sang trao đổi thay vì đơn giản bị hủy bỏ. –

+2

@DavidHeffernan Hình ảnh được sao chép để hoán đổi tại thời điểm tải, không phải lúc thời gian mở trang. (Đó là loại điểm của lá cờ, sau khi tất cả.) Họ chỉ đơn giản là loại bỏ tại thời điểm ra-out, vì đã có một bản sao an toàn trong trao đổi. –

+0

Cảm ơn bạn @Raymond. Tôi nghĩ rằng tôi hiểu các vấn đề đủ tốt ngay bây giờ.Về cơ bản vấn đề của tôi ở đây là sự hiểu biết của tôi về hệ thống bộ nhớ ảo không đầy đủ. Tôi phải đào các cuốn sổ bên trong sổ của tôi và chải lên. –

Các vấn đề liên quan