Apa yang membuat Anda berpikir mremap
bisa efisien untuk menukar satu halaman 4k? Paling tidak, bolak-balik ke kernelspace bahkan hanya untuk membaca satu nilai (seperti pid) dan mengembalikannya akan lebih mahal daripada memindahkan 4k data. Dan itu sebelum kita sampai pada biaya invalidasi cache/TLB untuk memetakan ulang memori, yang saya tidak cukup mengerti untuk menjawab dalam jawaban ini, tetapi yang seharusnya memiliki biaya yang serius.
mremap
pada dasarnya berguna untuk satu hal:mengimplementasikan realloc
untuk besar alokasi yang dilayani oleh mmap
. Dan secara umum, maksud saya mungkin setidaknya 100rb.
Tampaknya tidak ada mekanisme lahan pengguna yang lebih cepat untuk mengurutkan ulang halaman memori selain memcpy(). mremap() jauh lebih lambat dan karenanya hanya berguna untuk mengubah ukuran area memori yang sebelumnya ditetapkan menggunakan mmap().
Tapi tabel halaman harus sangat cepat, saya mendengar Anda berkata! Dan mungkin bagi pengguna untuk memanggil fungsi kernel jutaan kali per detik! Referensi berikut membantu menjelaskan mengapa mremap() sangat lambat:
"An Introduction to Intel Memory Management" adalah pengantar yang bagus untuk teori pemetaan halaman memori.
"Konsep utama memori virtual Intel" menunjukkan cara kerjanya secara lebih mendetail, jika Anda berencana membuat OS Anda sendiri :-)
"Berbagi Tabel Halaman di Kernel Linux" menunjukkan beberapa keputusan arsitektur pemetaan halaman memori Linux yang sulit dan pengaruhnya terhadap performa.
Melihat ketiga referensi bersama-sama maka kita dapat melihat bahwa sejauh ini hanya ada sedikit upaya dari arsitek kernel untuk mengekspos pemetaan halaman memori ke lahan pengguna dengan cara yang efisien. Bahkan di kernel, manipulasi tabel halaman harus dilakukan dengan menggunakan hingga tiga kunci yang akan lambat.
Selanjutnya, karena tabel halaman itu sendiri terdiri dari 4k halaman, dimungkinkan untuk mengubah kernel sehingga halaman tabel halaman tertentu unik untuk utas tertentu dan dapat diasumsikan memiliki akses tanpa kunci selama durasi proses. Ini akan memfasilitasi manipulasi yang sangat efisien dari halaman tabel halaman tertentu melalui user-land. Tapi ini bergerak di luar cakupan pertanyaan awal.