Transisi Arsitektur Sistem: Analisis Komparatif BIOS vs. UEFI – Bagian 1: Fundamental Mode Eksekusi & Manajemen Memori

Dokumen Teknis Rujukan untuk Pengembangan Sistem Operasi

Penulis: Reza Ervani bin Asmanu

1. Pendahuluan

Dalam sejarah evolusi arsitektur x86, transisi dari Basic Input/Output System (BIOS) menuju Unified Extensible Firmware Interface (UEFI) merepresentasikan lompatan teknologi terbesar dalam tiga dekade terakhir. Bagi seorang Systems Engineer atau pengembang kernel, memahami perbedaan ini bukan sekadar persoalan mengganti perkakas (tools), melainkan memahami perubahan fundamental pada cara Central Processing Unit (CPU) memandang dunia digital.

Artikel bagian pertama ini akan membedah secara mendalam perbedaan lingkungan eksekusi (Execution Environment) antara BIOS dan UEFI pada level register dan pengalamatan memori.

2. Mode Eksekusi Prosesor (CPU Execution Modes)

Perbedaan paling elementer dan krusial terletak pada mode operasi CPU saat detik pertama kode bootloader dieksekusi oleh firmware. Status awal register CPU menentukan seluruh strategi pemrograman yang harus diambil oleh pengembang.

2.1. BIOS: Belenggu Real Mode (16-bit)

Ketika sebuah motherboard berbasis BIOS (atau mode CSM) melakukan POST (Power-On Self-Test), ia memaksa prosesor modern sekelas Intel Core i9 atau AMD Ryzen untuk beroperasi dalam mode 16-bit Real Mode. Mode ini adalah simulasi kompatibilitas mundur (backward compatibility) untuk meniru perilaku prosesor Intel 8086 tahun 1978.

  • Limitasi Register: Register General Purpose hanya selebar 16-bit (AX, BX, CX, DX, SI, DI, SP, BP). Ini berarti operasi aritmatika dan penunjuk data (pointer) secara native hanya mampu menangani angka maksimal $2^{16} – 1$ (65,535).
  • Akses Instruksi: Instruksi modern seperti SSE (Streaming SIMD Extensions) atau AVX untuk operasi vektor tidak tersedia. Register kontrol modern (CR0, CR3, CR4) tidak aktif atau memiliki fungsi terbatas.
  • Implikasi bagi Pengembang: Pengembang OS dibebani tugas berat untuk melakukan “Ritual Transisi”. Kode awal harus ditulis murni dalam Assembly 16-bit untuk menyiapkan Global Descriptor Table (GDT), mengaktifkan A20 Gate, beralih ke Protected Mode (32-bit), menyiapkan Paging, dan akhirnya melompat ke Long Mode (64-bit). Satu kesalahan bit dalam proses ini menyebabkan Triple Fault (CPU Reset).

2.2. UEFI: Kebebasan Long Mode (64-bit)

UEFI (khususnya UEFI Class 3 pada platform x64) menghapus beban sejarah tersebut. Saat fungsi entri (efi_main) dipanggil, CPU sudah berada dalam status 64-bit Long Mode.

  • Ekspansi Register: Seluruh register diperluas menjadi 64-bit (RAX, RBX, dst). Register tambahan R8 hingga R15 yang tidak ada di mode 16/32-bit tersedia sepenuhnya.
  • Instruksi Modern: Seluruh set instruksi modern CPU dapat diakses sejak baris kode pertama.
  • Implikasi bagi Pengembang: Ritual transisi yang rumit dihilangkan. Pengembang dapat langsung menggunakan bahasa tingkat tinggi (C/C++/Rust) karena kompiler dapat memetakan variabel langsung ke register 64-bit tanpa trik segmentasi.

3. Arsitektur Pengalamatan Memori

Perbedaan dalam manajemen memori adalah aspek yang paling signifikan membedakan kompleksitas pemrograman BIOS dibandingkan UEFI.

3.1. BIOS: Segmented Memory Model

Karena register 16-bit hanya mampu menunjuk alamat maksimal 0xFFFF (64 Kilobytes), padahal bus alamat prosesor 8086 mampu mengakses 1 Megabytes (0xFFFFF), BIOS menggunakan mekanisme Segmentasi Memori.

Alamat fisik tidak ditunjuk secara linear, melainkan dihitung menggunakan dua register: Segment Selector (CS, DS, ES, SS) dan Offset.

Rumus Kalkulasi Alamat Fisik:

PhysicalAddress=(Segment×16)+OffsetPhysical Address = (Segment \times 16) + Offset

Contoh Kasus Low-Level (Assembly BIOS):

Bayangkan kita ingin menulis karakter ke Video Memory di alamat fisik 0xB8000. Kita tidak bisa langsung menunjuk alamat tersebut karena 0xB8000 lebih besar dari 16-bit (0xFFFF).

; Cara mengakses 0xB8000 di BIOS (Real Mode)
MOV AX, 0xB800   ; Kita isi Segment dengan 0xB800
MOV ES, AX       ; Pindahkan ke Register Segmen Extra (ES)
MOV DI, 0x0000   ; Offset dimulai dari 0
MOV [ES:DI], 'A' ; CPU menghitung: (0xB800 * 16) + 0 = 0xB8000

Risiko Fatal:

  1. Overlapping Segments: Alamat fisik yang sama dapat diakses dengan kombinasi segment:offset yang berbeda (misal 0000:0010 sama dengan 0001:0000). Ini membingungkan proses debugging.
  2. 1 MB Barrier: Tanpa trik khusus, Real Mode tidak bisa mengakses RAM di atas 1 MB.

3.2. UEFI: Flat Memory Model

UEFI mengadopsi model memori datar (Flat Memory Model). Karena register 64-bit mampu menunjuk alamat hingga 16 Exabytes ($18 \times 10^{18}$ bytes), konsep segmen menjadi usang dan dihapuskan.

Alamat memori bersifat linear dan kontinu. Sebuah pointer C uint64_t *ptr berisi alamat memori yang sesungguhnya (atau alamat virtual yang dipetakan 1:1).

Contoh Kasus Low-Level (UEFI C/Assembly):

Untuk menulis ke Video Memory (Frame Buffer) yang biasanya berada di alamat tinggi (misalnya 0xC0000000):

// Cara mengakses Frame Buffer di UEFI
// Alamat didapat dari GOP (Graphics Output Protocol)
UINT32 *VideoBuffer = (UINT32*)0xC0000000; 
*VideoBuffer = 0xFFFFFFFF; // Tulis langsung tanpa register segmen

Dalam representasi Assembly (x64) di balik layar:

MOV RAX, 0xC0000000 ; RAX (64-bit) muat menampung alamat penuh
MOV [RAX], 0xFFFFFFFF ; Tulis langsung ke alamat tersebut

4. Ringkasan Teknis Bagian 1

FiturLegacy BIOS (16-bit)UEFI (64-bit)
Lebar Register Data16-bit (AX, BX, CX, DX)64-bit (RAX, RBX, RCX, RDX, R8-R15)
Model MemoriSegmented (Segment:Offset)Flat (Linear Pointer)
Batas Alamat Native1 MB (tanpa A20/Unreal Mode)~16 Exabytes
Proteksi MemoriTidak Ada (Program bisa merusak BIOS)Paging & Proteksi (NX Bit, Read-Only)
Instruksi CPUSubset 8086 LegacyFull x64 Instruction Set (SSE, AVX)

Bersambung ke Bagian 2: Analisis Register pada Pemanggilan Layanan (Interrupt vs Protocol).