Pemetaan Memori Program

Pada Linux, binary loader tidak perlu me-load berkas biner ke memori fisik, melainkan dengan cara memetakan halaman dari binary file ke region dari memori virtual. Sehingga hanya ketika program mengakses halaman tertentu akan menyebabkan page fault yang mengakibatkan halaman yang dibutuhkan di-load ke memori fisik.

Dalam pemetaan program ke memori juga terjadi proses load dan eksekusi. Eksekusi dari kernel Linux dilakukan oleh panggilan terhadap system call exec(). System call exec() memerintahkan kernel untuk menjalankan program baru di dalam proses yang sedang berlangsung atau current process, dengan cara meng- overwrite current execution dengan initial context dari program baru yang akan dijalankan. Untuk meng-overwrite dan mengeksekusi, akan dilakukan dua kegiatan, yakni:

  1. Memeriksa apakah proses baru yang dipanggil memiliki izin untuk melakukan overwrite terhadap berkas yang sedang dieksekusi.
  2. Kernel memanggil loader routine untuk memulai menjalankan program. Loader tidak perlu untuk me-load isi dari berkas program ke memori fisik, tetapi paling tidak mengatur pemetaan program ke memori virtual.

Gambar 9.4. Executable and Linking Format

Executable and Linking Format

Linux menggunakan tabel loader untuk loading program baru. Dengan menggunakan tabel tersebut, Linux memberikan kesempatan bagi setiap fungsi untuk me-load program ketika system call exec() dipanggil. Linux menggunakan tabel loader, karena format standar berkas binary Linux telah berubah antara kernel Linux 1.0 dan 1.2. Format Linux versi 1.0 menggunakan format a.out, sementara Linux baru (sejak 1.2) menggunakan format ELF. Format ELF memiliki fleksibilitas dan ekstensibilitas dibanding dengan a.out karena dapat menambahkan sections baru ke binary ELF, contohnya dengan menambahkan informasi debugging, tanpa menyebabkan loader routine menjadi bingung. Saat ini Linux mendukung pemakaian baik format binary ELF dan a.out pada single running system karena menggunakan registrasi dari multiple loader routine.