Oleh : Reza Ervani bin Asmanu
Dalam pengembangan sistem operasi (OS Development) pada arsitektur Intel x86, memahami peta memori (Memory Map) adalah langkah fundamental yang tidak bisa ditawar. Berbeda dengan arsitektur modern berbasis ARM (seperti Raspberry Pi) yang cenderung linear, memori pada PC x86 memiliki sejarah panjang yang menciptakan struktur yang unik, terkotak-kotak, dan penuh dengan aturan warisan (legacy).
Artikel ini akan mengupas struktur memori komputer, mulai dari 1 Megabyte pertama tempat proses booting terjadi, hingga area luas di atasnya tempat sistem operasi modern bekerja.
Bagian 1: “Taman Kanak-Kanak” (0 – 1 MB Pertama)
Saat komputer x86 pertama kali dinyalakan, prosesor berjalan dalam mode yang disebut Real Mode (16-bit). Dalam mode ini, prosesor hanya mampu “melihat” memori sebesar 1 Megabyte (MB). Wilayah sempit ini sudah dikavling-kavling sejak era IBM PC tahun 1980-an untuk kegunaan yang spesifik.
Berikut adalah peta alokasi memori pada 1 MB pertama (0x00000 – 0xFFFFF):
ALAMAT (Hex) FUNGSI / KEGUNAAN
---------------------------------------------------------
0xFFFFF [ AKHIR MEMORI 1 MB (Top of Memory) ]
|
| BIOS ROM (Firmware)
| Area ini berisi kode asli BIOS motherboard.
0xF0000
---------------------------------------------------------
| BIOS Extension / Hardware Mapped
| Biasanya digunakan oleh firmware VGA card
| atau Network card.
0xC0000
---------------------------------------------------------
0xBFFFF
| VIDEO MEMORY (VGA Buffer)
|-------------> 0xB8000 [ TEXT MODE BUFFER ]
| Target kernel awal untuk mencetak karakter.
| (Segment ES: 0xB800)
0xA0000
---------------------------------------------------------
0x9FFFF
| EXTENDED CONVENTIONAL MEMORY
| Area bebas yang bisa digunakan Kernel.
0x07E00
---------------------------------------------------------
0x07DFF
|-------------> 0x07C00 [ BOOT SECTOR ]
| Titik Pendaratan (Entry Point).
| BIOS memuat 512 byte kode kita di sini.
0x07C00
---------------------------------------------------------
0x00500
| BIOS DATA AREA (BDA) & IVT
| Area sakral sistem. Jangan ditimpa.
0x00000 [ AWAL MEMORI ]
---------------------------------------------------------
Titik-Titik Krusial:
- 0x7C00 (The Entry Point): Mengapa kode bootloader kita selalu diawali dengan direktif
[org 0x7c00]? Karena BIOS telah diprogram untuk menyalin 512 byte pertama dari media penyimpanan (Flashdisk/Harddisk) tepat ke alamat ini. Ini adalah “pintu gerbang” kita masuk ke memori. - 0xB8000 (Video Memory): Di sinilah letak keunikan x86. Untuk menampilkan huruf di layar, kita tidak memanggil API sistem operasi, melainkan menulis langsung ke alamat ini. Karena kita berada di mode 16-bit, kita menggunakan skema Segmentation (Segment
0xB800* 16 + Offset0) untuk mencapai alamat fisik0xB8000.
Bagian 2: “Dunia Luar” (Extended Memory di Atas 1 MB)
Tentu saja, komputer modern memiliki RAM 4 GB, 8 GB, atau lebih. Di mana sisanya? Sisa memori tersebut berada di atas batas 1 MB, yang disebut sebagai Extended Memory.
Namun, ada aturan keras di dunia x86: Selama prosesor masih dalam Real Mode (16-bit), memori di atas 1 MB ini tidak terlihat (Invisible). Untuk mengaksesnya, kita harus mengubah mode prosesor ke Protected Mode (32-bit) atau Long Mode (64-bit).
Berikut adalah peta memori global pada sistem modern:
ALAMAT (Fisik) FUNGSI / KEGUNAAN
-----------------------------------------------------------
(Max RAM) [ UJUNG MEMORI FISIK ]
|
| (High Memory - 64-bit)
| Area ini hanya bisa diakses OS 64-bit.
|
4 GB (0xFFFFFFFF) ---------------------------------------
|
| [ MMIO HOLE - Lubang Hardware ]
| (PCI Express, VRAM GPU, APIC)
|
| PENTING: Ini BUKAN RAM.
| Menulis ke sini berarti mengirim perintah
| ke perangkat keras (VGA, SSD, USB).
|
3 GB (Estimasi) ---------------------------------------
|
| [ EXTENDED MEMORY ]
| (RAM Bebas / Free Space)
|
| Di sinilah Kernel OS modern (Linux/Windows)
| dan aplikasi pengguna dialokasikan.
|
0x10FFF0 ---------------------------------------
| [ HMA - High Memory Area ]
0x100000 (1 MB) ---------------------------------------
| [ BATAS TEMBOK 1 MB (Real Mode Limit) ]
0x000000 [ Legacy Real Mode Area (Lihat Bagian 1) ]
-----------------------------------------------------------
Konsep Penting di Extended Memory:
- MMIO Hole (Lubang Hardware):Mirip dengan konsep Memory Mapped I/O di Raspberry Pi (di mana GPIO berada di alamat tertentu), PC x86 juga memetakan perangkat kerasnya ke alamat memori bagian atas (biasanya di bawah 4 GB). Itulah sebabnya jika Anda memasang RAM 4 GB, sistem operasi mungkin hanya mendeteksi “3.8 GB Usable”, karena sebagian alamatnya “dicuri” untuk komunikasi hardware.
- Transisi Mode:Untuk “naik kelas” dari taman bermain 1 MB ke dunia luas Extended Memory, seorang pengembang OS harus melakukan ritual inisialisasi hardware, antara lain:
- Mengaktifkan A20 Line: Membuka gerbang sirkuit yang memblokir akses memori di atas 1 MB.
- Mengatur GDT (Global Descriptor Table): Menggantikan sistem segmen kuno dengan tabel deskriptor memori yang aman.
- Mengubah Register CR0: Mengubah bit terakhir pada register kontrol CPU untuk beralih ke mode 32-bit.
Kesimpulan
Memahami peta memori ini memberikan kita wawasan mengapa pengembangan sistem operasi di x86 terasa lebih kompleks dibandingkan arsitektur lain. Kita tidak hanya berurusan dengan kode program, tetapi juga dengan sejarah evolusi komputer yang menumpuk selama puluhan tahun.
Saat ini, proyek bootloader sederhana kita bermain di kotak pasir aman 0x7C00. Namun, tujuan akhir dari sebuah sistem operasi adalah menembus batas 1 MB tersebut dan mengelola gigabyte RAM yang tersedia di Extended Memory.
