Saya tahu bahwa ketika halaman cache halaman diubah, itu ditandai kotor dan memerlukan penulisan kembali, tetapi apa yang terjadi ketika:
Skenario: File / apps / EXE, yang merupakan file yang dapat dieksekusi, di-paging ke halaman cache sepenuhnya (semua halamannya ada di cache / memori) dan dijalankan oleh proses P
Rilis berkelanjutan kemudian menggantikan / apps / EXE dengan executable baru.
Asumsi 1: Saya berasumsi bahwa proses P (dan siapa pun dengan deskriptor file yang mereferensikan yang dapat dieksekusi) akan terus menggunakan yang lama, di memori / apps / EXE tanpa masalah, dan setiap proses baru yang mencoba mengeksekusi jalur itu akan mendapatkan executable baru.
Asumsi 2: Saya berasumsi bahwa jika tidak semua halaman file dipetakan ke dalam memori, semuanya akan baik-baik saja sampai ada kesalahan halaman yang membutuhkan halaman dari file yang telah diganti, dan mungkin akan terjadi segfault?
Pertanyaan 1: Jika Anda meng-mlock semua halaman file dengan sesuatu seperti vmtouch apakah itu mengubah skenario sama sekali?
Pertanyaan 2: Jika / apps / EXE berada pada NFS jarak jauh, apakah itu akan membuat perbedaan? (Saya kira tidak)
Harap perbaiki atau validasikan 2 asumsi saya dan jawab 2 pertanyaan saya.
Mari kita asumsikan ini adalah kotak CentOS 7.6 dengan semacam kernel 3.10.0-957.el7
Pembaruan: Memikirkan lebih jauh, saya ingin tahu apakah skenario ini tidak berbeda dengan skenario halaman kotor lainnya ..
Saya kira proses yang menulis biner baru akan membaca dan mendapatkan semua halaman cache karena semuanya dipetakan, dan kemudian semua halaman itu akan ditandai kotor. Jika mereka di-mlock, mereka hanya akan menjadi halaman tidak berguna yang menempati memori inti setelah hitungan ref menjadi nol.
Saya curiga ketika program yang saat ini dijalankan berakhir, apa pun akan menggunakan biner baru. Dengan asumsi itu semua benar, saya kira itu hanya menarik ketika hanya beberapa file yang di-paging.