Memori Fisik

Manajemen memori pada Linux mengandung dua komponen utama yang berkaitan dengan:

  1. Pembebasan dan pengalokasian halaman/blok pada main memori.

  2. 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:

  1. 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.

  2. Zona NORMAL. Tempat di memori fisik dimana penanganan permintaan-permintaan yang berhubungan dengan pemanggilan routine untuk alokasi halaman/blok dalam menjalankan proses.

  3. 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

ZonePhysical Memory
ZONE_DMA< 16 MB
ZONE_NORMAL16 - 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.


Gambar 9.1. Contoh Alokasi Memori dengan Algoritma Buddy

Contoh Alokasi Memori dengan Algoritma Buddy

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.