Langsung ke konten

Arsip

Virtual Memory

7 artikel
Linux 23 Sep 2026 4 min read

MADV_DONTFORK Mengecualikan Range Memori dari Address Space Child

MADV_DONTFORK mengubah satu bagian spesifik dari pembuatan proses di Linux: mapping yang ditandai dengan advice ini tidak dibuat tersedia pada child hasil fork(). Parent tetap memiliki mapping tersebut. Child dimulai tanpa range address itu, sehingga address yang valid pada parent tidak otomatis valid pada child. Ini adalah kontrol semantik terhadap pewarisan mapping, bukan sekadar petunjuk cache. Operasi ini termasuk extension madvise() khusus Linux yang dapat mengubah perilaku memori yang terlihat oleh program.

Linux 19 Sep 2026 5 min read

process_madvise Menerapkan Memory Advice Lintas Batas Proses

Sebuah proses dapat memakai memory untuk pekerjaan yang koordinasinya berada di komponen lain. Linux process_madvise() memungkinkan koordinator eksternal menerapkan virtual-memory advice terpilih ke rentang dalam proses target tanpa menyuntikkan kode ke proses tersebut. Target diidentifikasi melalui pidfd, sedangkan rentang alamat diberikan sebagai array struct iovec. Susunan ini memisahkan keputusan memory policy dari kode yang memiliki mapping. Runtime manager, service supervisor, atau memory controller dapat meminta perlakuan berorientasi reclaim atau prefetch untuk proses lain, dengan tetap tunduk pada dukungan kernel dan pemeriksaan permission. System call ini tidak memindahkan ownership mapping, tidak membekukan target, dan tidak membuat address space target menjadi statis.

Linux 19 Sep 2026 4 min read

MADV_FREE Menandai Page Anonim untuk Reclaim Tertunda

MADV_FREE tidak langsung mengganti private anonymous page dengan nol. Operasi ini menandai page yang memenuhi syarat sebagai data yang boleh dibuang, lalu Linux dapat me-reclaim-nya kemudian. Sebelum reclaim benar-benar terjadi, byte lama masih dapat terlihat. Penulisan sebelum reclaim membatalkan status tersebut pada page yang ditulis. Karakteristik waktu ini membedakan MADV_FREE dari advice yang langsung mengubah keadaan range yang terlihat oleh proses. Kontraknya adalah reclamation tertunda: aplikasi menyatakan bahwa isi lama tidak lagi diperlukan, sedangkan kernel menentukan kapan memori fisik diambil kembali.

Linux 18 Sep 2026 5 min read

userfaultfd Mengubah Page Fault Menjadi Event Userspace

Sebuah thread dapat mengalami fault pada virtual address lalu tetap terblokir sementara thread atau proses userspace lain menentukan state page yang membuat akses tersebut dapat dilanjutkan. userfaultfd menyediakan batas ini dengan mengubah page fault terpilih menjadi message pada file descriptor dan memasangkan message tersebut dengan ioctl untuk menyelesaikan fault. Mekanisme ini tidak menggantikan page-fault machinery milik kernel. Kontrol userspace disisipkan pada range dan kelas fault yang didaftarkan, sementara kernel tetap memiliki page table, pemblokiran fault, dan transisi yang membuat page dapat diakses kembali.

Rekayasa Perangkat Lunak 18 Sep 2026 7 min read

MAP_SHARED mmap Menghubungkan Write Memori dengan State Page Berbasis File

Mapping MAP_SHARED yang writable memungkinkan proses mengubah state berbasis file dengan memory store biasa. Byte diakses melalui virtual memory, bukan dikirim lewat write(), tetapi mapping tersebut tetap berpartisipasi dalam state filesystem: perubahan dapat terlihat melalui shared mapping lain dan file I/O, lalu dirty page dapat ditulis kembali ke storage. Antarmuka ini menyatukan beberapa mekanisme ke dalam satu rentang alamat. CPU store, page fault, residensi page cache, writeback filesystem, dan persistensi storage dapat terlibat dalam siklus hidup byte yang sama. Menyamakan store yang berhasil dengan output file yang sudah durable menghapus batas yang tetap dipisahkan oleh sistem operasi.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

userfaultfd Memindahkan Resolusi Missing Page ke User Space

Sebuah thread dapat mengakses alamat virtual yang valid lalu berhenti sebelum akses selesai karena page tersebut belum memiliki backing yang present. Pada range yang didaftarkan dengan UFFDIO_REGISTER_MODE_MISSING, Linux dapat melaporkan fault itu melalui userfaultfd alih-alih menyelesaikannya sepenuhnya di kernel. Manager di user space kemudian menentukan isi page yang menjadi terlihat sebelum akses yang tertahan dilanjutkan. Mekanisme ini memindahkan kendali atas satu bagian penanganan page fault. Kernel tetap mendeteksi fault, memvalidasi virtual memory area, menahan eksekusi yang mengalami fault, dan memasang mapping melalui antarmuka UFFDIO_*. User space memperoleh kendali atas isi dan waktu resolusi untuk fault yang terdaftar.

Linux 17 Sep 2026 4 min read

Truncating File yang Dipetakan Dapat Memicu SIGBUS

Sebuah process dapat tetap memiliki rentang address mmap() yang valid setelah operasi lain mengecilkan backing file, lalu menerima SIGBUS ketika menyentuh mapped page yang berada di luar akhir file baru. Mapping-nya sendiri tidak hilang. Backing object-nya tidak lagi mencakup setiap page yang semula direferensikan oleh virtual mapping. Boundary ini mudah terlewat karena mapping lifetime dan file size adalah state yang terpisah. Menutup file descriptor awal tidak membatalkan mapping yang sudah terbentuk, dan mengecilkan file tidak bertindak seperti munmap() pada setiap process yang memetakannya.