Manajemen memori pada Linux mengandung dua komponen utama yang berkaitan dengan:
Pembebasan dan pengalokasian halaman/blok pada main memori.
Penanganan memori virtual.
Berdasarkan arsitektur Intel x86, Linux memisahkan memori fisik ke dalam tiga zona berbeda, dimana tiap zona mengindentifikasikan blok (region) yang berbeda pada memori fisik. Ketiga zona tersebut adalah:
Zona DMA (Direct Memory Access). Tempat penanganan kegiatan yang berhubungan dengan transfer data antara CPU dengan M/K, dalam hal ini DMA akan menggantikan peran CPU sehingga CPU dapat mengerjakan instruksi lainnya.
Zona NORMAL. Tempat di memori fisik dimana penanganan permintaan-permintaan yang berhubungan dengan pemanggilan routine untuk alokasi halaman/blok dalam menjalankan proses.
Zona HIGHMEM. Tempat yang merujuk kepada memori fisik yang tidak dipetakan ke dalam ruang alamat kernel.
Tabel 9.1. Pembagian Zona Pada Arsitektur Intel x86
| Zone | Physical Memory |
|---|---|
| ZONE_DMA | < 16 MB |
| ZONE_NORMAL | 16 - 896 MB |
| ZONE_HIGHMEM | > 896 MB |
Memori manager di Linux berusaha untuk mengefisienkan ruang alamat pada memori fisik, agar memungkinkan lebih banyak proses yang dapat bekerja di memori dibandingkan dengan yang sudah ditentukan oleh kernel. Oleh karena itu, digunakanlah dua macam teknik alokasi, yaitu alokasi halaman yang ditangani oleh page allocator dan alokasi slab yang ditangani oleh slab allocator.
Alokasi halaman menggunakan algoritma
buddy
yang bekerja sebagai berikut. Pada saat kegiatan alokasi
data di memori, blok di memori yang disediakan oleh kernel
kepada suatu proses akan dibagi menjadi dua blok yang
berukuran sama besar. Kejadian ini akan terus berlanjut
hingga didapat blok yang sesuai dengan ukuran data
yang diperlukan oleh proses tersebut. Dalam hal ini
page allocator
akan memanggil system call
kmalloc() yang kemudian
akan memerintahkan kernel untuk melakukan kegiatan
pembagian blok tersebut.
Akan tetapi, algoritma buddy memiliki kelemahan , yaitu kurang efisien. Sebagai contoh, misalnya ada 1 MB memori. Jika ada permintaan 258 KB, maka yang akan digunakan sebesar 512 KB. Tentu hal ini kurang efisien karena yang dibutuhkan hanya 258 KB saja.