Ruang alamat virtual

Prosesor menggunakan alamat virtual saat membaca atau menulis ke lokasi memori. Selama operasi ini, prosesor menerjemahkan alamat virtual menjadi alamat fisik.

Ada beberapa manfaat mengakses memori menggunakan alamat virtual:

  • Program dapat menggunakan berbagai alamat virtual yang berdampingan untuk mengakses buffer memori besar yang tidak berdampingan dalam memori fisik.

  • Program dapat menggunakan berbagai alamat virtual untuk mengakses buffer memori yang lebih besar dari memori fisik yang tersedia. Ketika memori fisik rendah, manajer memori menyimpan halaman memori fisik (biasanya berukuran 4 kilobyte) ke file disk. Sistem memindahkan halaman data atau kode antara memori fisik dan disk sesuai kebutuhan.

  • Alamat virtual yang digunakan oleh proses yang berbeda diisolasi. Kode dalam satu proses tidak dapat mengubah memori fisik yang sedang digunakan oleh proses lain atau sistem operasi.

Rentang alamat virtual yang tersedia untuk proses dikenal sebagai ruang alamat virtual proses. Setiap proses mode pengguna memiliki ruang alamat virtual privatnya sendiri.

  • Proses 32-bit biasanya memiliki ruang alamat virtual dalam rentang 2 gigabyte 0x00000000 melalui 0x7FFFFFFF.

  • Proses 64-bit pada Windows 64-bit memiliki ruang alamat virtual dalam rentang 128-terabyte 0x000'000000000 sampai 0x7FFF'FFFFFFFF.

Berbagai alamat virtual terkadang disebut rentang memori virtual. Untuk informasi selengkapnya, lihat Batas Ruang Memori dan Alamat.

Diagram berikut mengilustrasikan beberapa fitur utama ruang alamat virtual.

Diagram memperlihatkan ruang alamat virtual untuk dua proses 64-bit, Notepad.exe dan MyApp.exe.

Diagram menunjukkan ruang alamat virtual untuk dua proses 64-bit: Notepad.exe dan MyApp.exe. Setiap proses memiliki ruang alamat virtual sendiri, mulai dari 0x000'0000000 hingga 0x7FF'FFFFFFFF. Setiap blok ber bayangan mewakili satu halaman (ukuran 4 kilobyte) memori virtual atau fisik. Proses Notepad menggunakan tiga halaman alamat virtual yang berdekatan, mulai dari 0x7F7'93950000. Namun, ketiga halaman alamat virtual yang bersebelahan ini memetakan ke halaman yang tidak bersebelahan dalam memori fisik. Selain itu, kedua proses menggunakan halaman memori virtual yang dimulai pada 0x7F7'93950000, tetapi halaman virtual ini memetakan ke halaman memori fisik yang berbeda.

Ruang pengguna dan ruang sistem

Proses seperti Notepad.exe dan MyApp.exe berjalan dalam mode pengguna. Komponen sistem operasi inti dan banyak driver berjalan dalam mode kernel yang lebih istimewa. Untuk informasi selengkapnya tentang mode prosesor, lihat Mode pengguna dan mode kernel.

Setiap proses mode pengguna memiliki ruang alamat virtual privatnya sendiri, tetapi semua kode yang berjalan dalam mode kernel berbagi satu ruang alamat virtual yang disebut ruang sistem. Ruang alamat virtual untuk proses mode pengguna disebut ruang pengguna.

Di Windows 32-bit, total ruang alamat virtual yang tersedia adalah 2^32 byte (4 gigabyte). Biasanya, 2 gigabyte yang lebih rendah digunakan untuk ruang pengguna, dan 2 gigabyte atas digunakan untuk ruang sistem.

Diagram yang mengilustrasikan pembagian total ruang alamat virtual yang tersedia di Windows 32-bit ke ruang pengguna dan ruang sistem.

Di Windows 32-bit, Anda dapat menentukan (pada waktu boot) bahwa lebih dari 2 gigabyte tersedia untuk ruang pengguna. Namun, ini berarti lebih sedikit alamat virtual yang tersedia untuk ruang sistem. Anda dapat meningkatkan ukuran ruang pengguna hingga sebanyak 3 gigabyte, hanya menyisakan 1 gigabyte untuk ruang sistem. Untuk meningkatkan ukuran ruang pengguna, gunakan BCDEdit /set increaseuserva.

Dalam Windows 64-bit, jumlah teoritis ruang alamat virtual adalah 2^64 byte (16 exabyte), tetapi hanya sebagian kecil dari rentang 16-exabyte yang benar-benar digunakan.

Kode yang berjalan dalam mode pengguna dapat mengakses ruang pengguna tetapi bukan ruang sistem. Pembatasan ini mencegah kode mode pengguna membaca atau mengubah struktur data sistem operasi yang dilindungi. Kode yang berjalan dalam mode kernel dapat mengakses ruang pengguna dan ruang sistem. Artinya, kode yang berjalan dalam mode kernel dapat mengakses ruang sistem dan ruang alamat virtual dari proses mode pengguna saat ini.

Driver yang berjalan dalam mode kernel harus berhati-hati ketika langsung membaca dari atau menulis ke alamat di ruang pengguna. Skenario berikut mengilustrasikan alasannya.

  1. Program mode pengguna memulai permintaan untuk membaca beberapa data dari perangkat. Program ini menyediakan alamat awal buffer untuk menerima data.

  2. Rutinitas driver perangkat, berjalan dalam mode kernel, memulai operasi baca dan mengembalikan kontrol ke pemanggilnya.

  3. Kemudian, perangkat mengganggu utas yang sedang berjalan untuk menunjukkan bahwa operasi baca selesai. Rutinitas driver mode kernel menangani gangguan pada utas arbitrer ini, yang termasuk dalam proses arbitrer.

  4. Pada titik ini, driver tidak boleh menulis data ke alamat awal yang disediakan program mode pengguna di Langkah 1. Alamat ini berada di ruang alamat virtual proses yang memulai permintaan, yang kemungkinan tidak sama dengan proses saat ini.

Kumpulan halaman dan kumpulan yang tidak di-halaman

Di ruang pengguna, semua halaman memori fisik dapat di-page out ke file disk sesuai kebutuhan. Di ruang sistem, beberapa halaman fisik dapat di-page out dan yang lain tidak bisa. Ruang sistem memiliki dua wilayah untuk mengalokasikan memori secara dinamis: kumpulan halaman dan kumpulan yang tidak di-halaman.

Memori yang dialokasikan dalam kumpulan halaman dapat di-page out ke file disk sesuai kebutuhan. Memori yang dialokasikan dalam kumpulan yang tidak di-halaman tidak pernah dapat di-page out ke file disk.

Diagram yang memperlihatkan perbedaan antara alokasi memori di kumpulan halaman.

Simpul perangkat dan tumpukan perangkat

Mode pengguna dan mode kernel