Langsung ke konten

Arsip

Memori Virtual

11 artikel
Teknologi 23 Sep 2026 5 min read

fork Linux Memakai Copy-on-Write untuk Menunda Salinan Page Privat

fork() membuat proses baru dengan virtual address space yang berasal dari proses pemanggil, tetapi Linux tidak perlu menggandakan setiap physical page privat ketika syscall selesai. Untuk mapping privat yang writable, kernel dapat mengatur page table parent dan child agar keduanya pada awalnya merujuk physical memory yang sama, sementara operasi write dibatasi oleh state copy-on-write. Desain ini membuat biaya pembuatan proses lebih bergantung pada page table dan bookkeeping kernel daripada seluruh ukuran data privat yang resident. Penyalinan fisik ditunda sampai sebuah write membuat kedua address space harus berbeda.

Linux 19 Sep 2026 5 min read

Write Protection userfaultfd Mengubah Write Memori Menjadi Event Userspace

Sebuah thread dapat mengakses page yang valid dan resident, tetapi tetap berhenti sebelum mengubah isinya. Dengan mode write-protect Linux userfaultfd, page yang terdaftar dapat ditandai sehingga write menghasilkan event page fault pada userfaultfd. Handler di userspace menerima event tersebut, menjalankan bookkeeping, melepas proteksi, lalu membiarkan thread yang tertahan melanjutkan eksekusi. Mekanisme ini berada di antara permission page biasa dan accounting memori tingkat aplikasi. Page tetap menjadi bagian dari address space proses; kernel mengarahkan write fault ke protokol berbasis file descriptor, sehingga aplikasi tidak perlu membangun jalur kontrol serupa di atas mprotect() dan SIGSEGV.

Linux 19 Sep 2026 5 min read

userfaultfd Memindahkan Resolusi Page Fault Terpilih ke User Space

Akses memori biasanya masuk ke jalur page fault kernel dan selesai tanpa aplikasi memilih isi page tepat pada saat itu. Linux userfaultfd mengubah batas tersebut untuk rentang alamat virtual yang didaftarkan: fault terpilih menjadi event pada file descriptor, lalu manager di user space dapat menyediakan atau mengaktifkan page sebelum thread yang mengalami fault melanjutkan eksekusi. Mekanisme ini tidak mengganti page table proses dengan struktur data di user space. Kernel tetap memiliki page-table state dan melakukan operasi mapping akhir. User space memperoleh kendali atas kelas fault tertentu beserta waktu resolusinya.

Teknologi 19 Sep 2026 6 min read

TLB Shootdown Mengoordinasikan Perubahan Page Table Antar-CPU

Sebuah page-table entry dapat berubah di memori ketika CPU lain masih menyimpan translasi alamat lama di translation lookaside buffer (TLB). Karena itu, memperbarui page table saja tidak selalu membuat mapping baru langsung berlaku pada setiap prosesor yang pernah menjalankan address space tersebut. Sistem operasi menutup celah itu dengan invalidasi TLB. Ketika perubahan mapping dapat membuat translasi yang tersimpan menjadi tidak aman, prosesor yang mungkin masih menyimpan translasi tersebut harus menginvalidasinya sebelum kernel menganggap perubahan selesai secara global. Pada sistem multiprosesor, koordinasi invalidasi jarak jauh ini umum disebut TLB shootdown.

Teknologi 19 Sep 2026 6 min read

TLB Shootdown Memperluas Perubahan Page Table ke Banyak CPU

TLB Shootdown Memperluas Perubahan Page Table ke Banyak CPU Mengubah entry page table di memori tidak otomatis menghentikan setiap translasi yang berasal dari entry tersebut. CPU yang sebelumnya memakai mapping dapat menyimpannya di translation lookaside buffer, atau TLB. Pada sistem multiprosesor, CPU lain dapat memiliki salinan cache masing-masing, sehingga perubahan mapping dapat memerlukan koordinasi di luar CPU yang mengubah page table. Linux memperlihatkan pemisahan ini melalui interface TLB flush. Setelah state page table berubah, kode arsitektur harus membuat translasi yang terdampak tidak dapat digunakan pada setiap CPU yang relevan sebelum software bergantung pada mapping baru atau melepaskan memori yang masih dapat dijangkau mapping lama.

Linux 19 Sep 2026 6 min read

PAGEMAP_SCAN Mengelompokkan State Page Table Menjadi Rentang Alamat

Rentang alamat virtual yang besar dapat memiliki hanya sedikit transisi state page. Membaca satu entri pagemap untuk setiap virtual page memang memperlihatkan state pada granularitas page, tetapi user space harus memeriksa rangkaian entri yang panjang. Linux PAGEMAP_SCAN memindahkan filtering ke kernel dan melaporkan span yang cocok sebagai record struct page_region. Interface ini berupa ioctl() pada /proc/PID/pagemap. Request berisi interval alamat, predicate kategori, return mask, dan output vector. Kernel berjalan melalui page table lalu menghasilkan region berurutan yang properti page terpilihnya memenuhi request. Bentuk inspeksi page table berubah dari stream nilai per-page menjadi query rentang yang sudah difilter.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux userfaultfd Memindahkan Penanganan Page Fault Terpilih ke User Space

Page fault biasanya membawa eksekusi dari proses ke kernel dan baru kembali setelah kernel menyelesaikan kondisi virtual-memory atau mengirim error. Linux userfaultfd dapat menyisipkan komponen user-space ke jalur tersebut untuk rentang alamat yang didaftarkan secara eksplisit. Kernel melaporkan fault terpilih melalui file descriptor, memblokir execution context yang mengalami fault saat mode mengharuskannya, lalu menerima ioctl yang menyelesaikan fault tersebut. Ini adalah antarmuka virtual-memory Linux, bukan jaminan memori dari C atau POSIX. Perilakunya bergantung pada fitur kernel yang dinegosiasikan, rentang terdaftar, jenis mapping, dan mode registrasi.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Linux userfaultfd Mengubah Page Fault Menjadi Protokol Userspace

Sebuah thread dapat mengakses alamat virtual yang valid lalu berhenti sebelum akses tersebut selesai karena komponen userspace lain diberi tanggung jawab untuk menyelesaikan page fault. Dengan Linux userfaultfd, rentang memori tertentu dapat mengubah fault menjadi pesan descriptor sementara thread yang mengalami fault tetap tertahan sampai operasi resolusi yang sesuai memungkinkan eksekusi berlanjut. Mekanisme ini bukan pengganti subsistem virtual memory kernel. Kernel tetap mendeteksi fault, memvalidasi rentang yang terdaftar, menahan jalur eksekusi yang terdampak, dan menjalankan operasi page table yang diminta manager. Batas yang berbeda terletak pada partisipasi userspace dalam menentukan kapan dan dengan isi apa sebuah fault diselesaikan.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux mmap Memisahkan Masa Hidup Mapping dari File Descriptor

mmap() berbasis file yang berhasil membuat mapping virtual memory yang tidak bergantung pada file descriptor sumber agar tetap terbuka. Linux secara eksplisit mengizinkan descriptor ditutup segera setelah mmap() selesai tanpa membatalkan mapping. Mapping dan descriptor dengan demikian merupakan referensi terpisah dengan masa hidup yang terpisah. Pemisahan ini mudah terlewat karena keduanya berasal dari file terbuka yang sama. Dampaknya menjadi penting ketika kode menutup descriptor secara agresif, mengganti pathname, melakukan truncate pada file, atau membawa mapping melewati fork(). Alamat mapped bukan read() tertunda melalui descriptor awal; alamat tersebut beroperasi dalam virtual-memory system dengan kontrak mapping tersendiri.

Rekayasa Perangkat Lunak 17 Sep 2026 7 min read

File-Backed Mapping Dapat Bertahan Lebih Lama daripada Ukuran File yang Diasumsikan

Sebuah proses dapat mempertahankan virtual memory mapping yang valid setelah pihak lain memperpendek file yang dipetakan. Rentang alamatnya masih ada di dalam proses, tetapi backing object mungkin tidak lagi memiliki setiap page yang sebelumnya direpresentasikan oleh rentang tersebut. Pada sistem POSIX, akses ke satu page terpetakan penuh yang berada di luar akhir file baru dapat menghasilkan SIGBUS, bukan berperilaku seperti pembacaan file biasa yang gagal. Batas ini membuat file-backed mmap() berbeda dari menyalin byte ke private heap storage. Pointer ke dalam mapping bukan bukti bahwa extent file yang sesuai masih ada. Alamat virtual, lifetime mapping, identitas file, dan ukuran file saat ini merupakan state yang saling berkaitan, tetapi bukan satu objek yang tidak dapat dipisahkan.

Teknologi 16 Sep 2026 7 min read

TLB Menyimpan Cache Translasi Alamat Virtual Terbaru

Prosesor modern umumnya menjalankan program di ruang alamat virtual. Operasi load atau store dapat dimulai dengan alamat virtual, sementara sistem memori pada akhirnya membutuhkan lokasi fisik dan izin akses. Page table menyimpan informasi pemetaan tersebut, tetapi menelusuri hierarkinya untuk setiap akses memori akan menambah pekerjaan yang besar. Translation lookaside buffer, atau TLB, menyimpan translasi alamat yang baru digunakan di dekat prosesor. TLB hit menyediakan informasi pemetaan yang sudah di-cache tanpa full page-table walk. TLB miss memicu pekerjaan translasi tambahan meskipun data aplikasi yang diminta sudah berada di CPU cache.