Tôi biết rằng khi một trang bộ đệm trang được sửa đổi, nó bị đánh dấu bẩn và yêu cầu phải viết lại, nhưng điều gì xảy ra khi:
Kịch bản: Tệp / ứng dụng / EXE, là tệp thực thi, được phân trang hoàn toàn vào bộ đệm của trang (tất cả các trang của nó nằm trong bộ đệm / bộ nhớ) và được thực hiện theo quy trình P
Phát hành liên tục sau đó thay thế / ứng dụng / EXE bằng một tệp thực thi hoàn toàn mới.
Giả định 1: Tôi giả sử rằng quy trình P (và bất kỳ ai khác có bộ mô tả tệp tham chiếu tệp thực thi cũ) sẽ tiếp tục sử dụng bộ nhớ / ứng dụng / EXE cũ mà không gặp sự cố và bất kỳ quy trình mới nào cố gắng thực hiện đường dẫn đó sẽ nhận được thực thi mới.
Giả định 2: Tôi giả sử rằng nếu không phải tất cả các trang của tệp được ánh xạ vào bộ nhớ, mọi thứ sẽ ổn cho đến khi có lỗi trang yêu cầu các trang từ tệp đã được thay thế và có thể xảy ra lỗi segfault?
Câu hỏi 1: Nếu bạn khóa tất cả các trang của tệp với một cái gì đó như vmtouch, điều đó có làm thay đổi kịch bản không?
Câu hỏi 2: Nếu / apps / EXE nằm trên NFS từ xa, điều đó có tạo ra sự khác biệt nào không? (Tôi cho là không)
Vui lòng sửa hoặc xác nhận 2 giả định của tôi và trả lời 2 câu hỏi của tôi.
Giả sử đây là hộp CentOS 7.6 với một số loại hạt nhân 3.10.0-957.el7
Cập nhật: Suy nghĩ thêm về nó, tôi tự hỏi liệu kịch bản này không khác gì bất kỳ kịch bản trang bẩn nào khác ..
Tôi cho rằng quá trình viết nhị phân mới sẽ thực hiện đọc và nhận tất cả các trang bộ đệm vì tất cả đều được phân trang và sau đó tất cả các trang đó sẽ bị đánh dấu bẩn. Nếu chúng bị khóa, chúng sẽ chỉ là những trang vô dụng chiếm bộ nhớ cốt lõi sau khi số lượng ref giảm về không.
Tôi nghi ngờ khi các chương trình hiện đang kết thúc, mọi thứ khác sẽ sử dụng nhị phân mới. Giả sử tất cả đều đúng, tôi đoán nó chỉ thú vị khi chỉ một số tệp được phân trang.