Bab 6: Manajemen Memori — Dari Tebakan E820 menuju Presisi GetMemoryMap

Sebuah sistem operasi hanya sekuat kemampuannya mengelola memori. Tanpa peta memori yang akurat, kernel akan buta dan berisiko menimpa data penting milik hardware atau firmware. Dalam pengembangan RezaOS, kita berpindah dari metode kuno BIOS yang seringkali tidak konsisten menuju sistem pemetaan memori UEFI yang sangat mendetail dan terstandarisasi.

Artikel ini akan membedah bagaimana UEFI memberikan informasi RAM yang jauh lebih kaya dibandingkan metode E820 pada BIOS Legacy.


1. Era BIOS: Panggilan Int 15h, E820 yang Terbatas

Pada sistem BIOS, satu-satunya cara standar bagi bootloader untuk mengetahui kapasitas RAM adalah dengan memanggil interupsi INT 15h dengan register EAX diisi nilai 0xE820.

Karakteristik E820:

  • Output Sederhana: BIOS akan memberikan daftar entri memori. Setiap entri biasanya hanya terdiri dari: Alamat Mulai, Panjang Memori, dan Tipe (1 untuk tersedia, 2 untuk dipesan/reserved).
  • Kurang Detail: BIOS tidak memberi tahu kita apakah sebuah memori digunakan oleh driver video, konfigurasi ACPI, atau data penting lainnya. Semuanya seringkali hanya dikategorikan sebagai “Reserved”.
  • Inkonsistensi: Berbeda vendor BIOS (Award, AMI, Phoenix) seringkali memberikan peta memori yang sedikit berbeda untuk hardware yang sama, memaksa pengembang OS membuat banyak kode pengecekan tambahan.

2. Era UEFI: Fungsi GetMemoryMap yang Komprehensif

UEFI memperkenalkan fungsi GetMemoryMap yang tersedia melalui Boot Services. Alih-alih hanya memberikan daftar alamat, UEFI memberikan array dari struktur data yang disebut EFI_MEMORY_DESCRIPTOR.

Kelebihan GetMemoryMap:

  • Tipe Memori yang Spesifik: UEFI mendefinisikan lebih dari 14 tipe memori yang berbeda. Ini memungkinkan RezaOS untuk mengetahui dengan pasti apa yang sedang terjadi di dalam RAM.
  • Atribut Memori: Selain alamat dan ukuran, UEFI memberi tahu kita atribut memori tersebut (apakah memori ini bisa dibaca, ditulis, dieksekusi, atau apakah ia bersifat non-volatile/tidak hilang saat mati lampu).

3. Memahami Tipe Memori di UEFI

Berikut adalah beberapa tipe memori krusial yang dilaporkan oleh UEFI dan sangat penting bagi strategi kernel RezaOS:

  • EfiConventionalMemory: Ini adalah “harta karun” bagi OS. RAM ini kosong dan siap digunakan sepenuhnya oleh kernel.
  • EfiLoaderCode/Data: Area di mana file bootloader RezaOS kita saat ini berada. Kita tidak boleh menimpa area ini sebelum proses booting selesai.
  • EfiBootServicesCode/Data: Area memori yang digunakan oleh firmware UEFI selama booting. Setelah kita memanggil ExitBootServices(), area ini bisa kita “reclaim” (ambil alih) untuk menjadi RAM tambahan bagi OS.
  • EfiRuntimeServicesCode/Data: Memori yang digunakan oleh fungsi-fungsi UEFI yang tetap hidup setelah OS berjalan (seperti jam sistem atau shutdown). Dilarang keras menimpa area ini.

4. Tabel Perbandingan Teknis: BIOS vs UEFI

FiturBIOS (E820)UEFI (GetMemoryMap)
Metode AksesSoftware Interrupt (INT 15h)C Function Call (GetMemoryMap)
Jumlah Tipe MemoriBiasanya hanya 5 tipe dasarMinimal 14+ tipe terperinci
Informasi AtributTidak adaAda (Read, Write, Execute, UC, WC, dll)
Struktur Data20-24 byte per entriMinimal 48 byte (Descriptor)
FleksibilitasKaku, sulit diperluasSangat Modular & Terukur

5. Implementasi pada RezaOS: Mencari “Rumah” untuk Kernel

Dalam pengembangan RezaOS, kita menggunakan GetMemoryMap untuk strategi alokasi awal:

  1. Iterasi Map: Kita menelusuri seluruh daftar memori yang diberikan UEFI.
  2. Filter Conventional: Kita mencari blok EfiConventionalMemory yang cukup besar untuk menampung Kernel.
  3. Persiapan Paging: Berdasarkan atribut dari UEFI, kita bisa menentukan bagian RAM mana yang harus dipasangi proteksi (misalnya bagian kode hanya boleh Read/Execute, sedangkan bagian data Read/Write).

Kesimpulan

Manajemen memori di UEFI bukan sekadar daftar alamat, melainkan sebuah inventaris hardware yang sangat detail. Dengan GetMemoryMap, RezaOS tidak perlu lagi “menebak-nebak” keamanan memori. Presisi yang diberikan UEFI memungkinkan kita membangun manajemen memori kernel (PMM – Physical Memory Manager) yang jauh lebih stabil dan aman sejak hari pertama.


Next Step: Pada Bab 7, kita akan masuk ke bagian yang paling memanjakan mata: Grafik Modern. Kita akan membahas GOP (Graphics Output Protocol) dan bagaimana kita menggambar pixel langsung ke layar tanpa harus menyentuh register VGA yang kuno.