62
Bab 9. Memori Linux
9.1. Pendahuluan
Alokasi memori pada Linux menggunakan dua buah alokasi yang utama, yaitu algoritma buddy dan slab. Untuk algoritma buddy, setiap routine pelaksanaan alokasi ini dipanggil, maka blok memori
berikutnya akan diperiksa. Jika ditemukan dia dialokasikan, namun jika tidak maka daftar tingkat berikutnya akan diperiksa. Jika ada blok bebas, maka akan dibagi jadi dua, yang satu dialokasikan
dan yang lain dipindahkan ke daftar yang dibawahnya. Sedangkan algoritma slab menggunakan slab yang dibentuk dari halaman-halaman memori fisik yang berdekatan dan digunakan terutama untuk
kegiatan pengalokasian memori fisik.
Linux juga menggunakan variasi dari algoritma clock. Thread dari kernel Linux akan dijalankan secara periodik. Jika jumlah halaman yang bebas lebih sedikit dari batas atas halaman bebas, maka
thread tersebut akan berusaha untuk membebaskan tiga halaman. Jika lebih sedikit dari batas bawah halaman bebas, thread tersebut akan berusaha untuk membebaskan enam halaman dan tidur untuk
beberapa saat sebelum berjalan lagi.
9.2. Memori Fisik
Manajemen memori pada Linux mengandung dua komponen utama yang berkaitan dengan: 1. Pembebasan dan pengalokasian halamanblok 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 MK, 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 halamanblok 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
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.
63
Gambar 9.1. 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.
9.3. Slab
Alokasi slab bertujuan untuk mengalokasikan struktur data obyek kernel yang dibutuhkan di memori fisik untuk menjalankan proses tertentu. Alokasi slab menggunakan algoritma slab. Slab
dibentuk dari halaman-halaman memori fisik yang berdekatan serta digunakan terutama untuk kegiatan pengalokasian memori fisik. Sebuah cache pada disk terdiri dari satu atau lebih slab, dan
diisi oleh beberapa obyek. Obyek merupakan bentuk instansiasi dari struktur data kernel yang direpresentasikan oleh cache yang bersangkutan.
Ketika sebuah cache dibentuk, maka semua obyek di dalam cache tersebut berstatus free, dan ketika terjadi sebuah permintaan dari suatu proses, maka obyek-obyek yang dibutuhkan untuk memenuhi
permintaan tersebut akan diset berstatus used. Kemudian obyek-obyek yang berstatus used tersebut yang telah dikelompokkan ke dalam slab-slab akan dipetakan dari cache ke dalam memori fisik.
Sebuah slab dapat berstatus: 1. Full. Semua obyek di dalam slab tersebut adalah used.
2. Empty. Semua obyek di dalam slab tersebut adalah free. 3. Partial. Ada obyek yang used dan ada pula yang free.
Keuntungan algoritma slab: 1. Tidak terdapatnya fragmentasi pada memori fisik, karena ukuran obyek-obyek tersebut telah
ditetapkan sesuai dengan yang dibutuhkan proses dalam membantu melakukan kerjanya di memori fisik.
2. Permintaan oleh memori cepat terpenuhi dengan mendayagunakan kerja dari cache yang
64
dibentuk pada disk.
Gambar 9.2. Contoh Alokasi Slab
9.4. Memori Virtual
Manajemen memori melakukan tugas penting dan kompleks berkaitan dengan: 1. Memori utama sebagai sumber daya yang harus dialokasikan dan dipakai bersama diantara
sejumlah proses yang aktif. Agar dapat memanfaatkan prosesor dan fasilitas MK secara efisien, maka diinginkan memori yang dapat menampung sebanyak mungkin proses.
2. Upaya agar programmer atau proses tidak dibatasi kapasitas memori fisik di sistem komputer. Linux memanfaatkan memori virtual untuk mendukung kinerja sistem. Sebagai sistem operasi
multiprogramming, memori virtual dapat meningkatkan efisiensi sistem. Sementara proses menunggu bagiannya di- swap in ke memori, menunggu selesainya operasi MK dan proses
di-block, jatah waktu prosesor dapat diberikan ke proses-proses lain.
Sistem memori virtual Linux berperan dalam mengatur beberapa hal: 1. Mengatur ruang alamat supaya dapat dilihat oleh tiap proses.
2. Membentuk halaman-halaman yang dibutuhkan. 3. Mengatur lokasi halaman-halaman tersebut dari disk ke memori fisik atau sebaliknya, yang biasa
disebut swapping. Sistem memori virtual Linux juga mengatur dua view berkaitan dengan ruang alamat:
1. Logical View. Mendeskripsikan instruksi-instruksi yang diterima oleh sistem memori virtual
mengenai susunan ruang alamat.
2. Physical View. Berupa entri-entri tabel halaman, dimana entri-entrinya akan menentukan apakah
halaman itu berada di memori fisik yang sedang dipakai untuk proses atau masih berada di disk yang berarti belum dipakai.
65