Mekanisme Eksekusi Program: Tinjauan Arsitektur Perangkat Keras

Oleh: Reza Ervani bin Asmanu

Dalam rekayasa sistem operasi, memahami jalur data (data path) fisik adalah fundamental. Seringkali terjadi miskonsepsi bahwa CPU mengeksekusi program langsung dari media penyimpanan (SD Card). Secara arsitektur, hal ini tidak mungkin terjadi karena perbedaan protokol bus dan kecepatan akses.

Untuk memahami bagaimana kode kernel.img dieksekusi oleh prosesor BCM2835 pada Raspberry Pi 1, kita harus membedah proses ini menjadi dua fase perangkat keras yang distinktif: Fase Pemuatan (Loading) dan Fase Eksekusi (Runtime).

1. Fase Pemuatan: Migrasi dari Flash Storage ke SDRAM

Pada Raspberry Pi (SoC BCM2835), arsitektur booting sedikit unik karena GPU (Graphics Processing Unit) bertindak sebagai pengelola utama sebelum CPU aktif.

Alur data pada fase ini bergerak satu arah:

SD Card (Storage) —> System Bus —> SDRAM (Memory)

  1. Inisialisasi I/O: Saat daya dinyalakan, GPU (VideoCore IV) menginisialisasi antarmuka SDIO untuk dapat berkomunikasi dengan SD Card.
  2. Pembacaan Sektor: GPU membaca blok data biner dari file kernel.img yang tersimpan di partisi FAT32 SD Card.
  3. Penulisan ke Memori: Data tersebut disalin byte-per-byte ke dalam chip SDRAM (Synchronous Dynamic RAM). Sesuai konfigurasi config.txt (atau default), data ini diletakkan mulai dari alamat fisik 0x8000.
  4. Aktivasi CPU: Setelah seluruh kode program tersalin ke SDRAM, GPU mengirim sinyal reset ke inti CPU ARM1176JZF-S dan mengatur Program Counter (PC) CPU ke alamat 0x8000.

Implikasi Teknis: Setelah fase ini selesai, CPU tidak lagi berinteraksi dengan SD Card untuk menjalankan kode program. Seluruh instruksi kini berada di dalam SDRAM yang bersifat volatile (sementara) namun berkecepatan tinggi.

2. Fase Eksekusi: Interaksi CPU dan Register (Load/Store Architecture)

Raspberry Pi menggunakan arsitektur ARM yang berbasis RISC (Reduced Instruction Set Computer). Salah satu karakteristik utama arsitektur ini adalah Load/Store Architecture. Artinya, Unit Aritmatika & Logika (ALU) di dalam CPU tidak memiliki jalur sirkuit langsung untuk memanipulasi data yang masih berada di SDRAM.

Alur data pada fase ini bersifat siklik (berulang):

SDRAM <—-> Register <—–> ALU

Setiap operasi instruksi tunggal (misalnya penjumlahan variabel) harus melalui langkah-langkah keras berikut:

A. Fetch (Pengambilan Instruksi)

CPU membaca alamat memori yang ditunjuk oleh Program Counter (PC) dari SDRAM. Data biner yang diambil ini bukanlah data variabel, melainkan Opcode (kode instruksi mesin). Instruksi ini masuk ke Instruction Register di dalam CPU untuk diterjemahkan (decode).

B. Load (Pemuatan Data)

Jika instruksi tersebut memerlukan data (misalnya: LDR r1, [0x2000] – Load Register), maka:

  1. Control Unit mengaktifkan jalur alamat memori ke SDRAM.
  2. Data variabel disalin dari sel memori SDRAM.
  3. Data masuk ke General Purpose Register (GPR) di dalam CPU (misalnya r1).

C. Execute (Eksekusi di ALU)

Sekarang data sudah berada di dalam Register.

  1. ALU membaca nilai langsung dari Register r1.
  2. ALU melakukan operasi elektronik (misalnya pergeseran bit atau penjumlahan).
  3. Hasil operasi ditulis kembali ke Register lain (misalnya r0).

D. Store (Penyimpanan Kembali)

Jika hasil perhitungan perlu disimpan permanen ke memori, instruksi STR (Store Register) dieksekusi:

  1. CPU mengambil nilai hasil dari Register r0.
  2. CPU mengirim data tersebut melalui bus sistem menuju SDRAM.
  3. Data ditulis ke sel memori fisik di SDRAM.

Kesimpulan Arsitektur

Register adalah komponen memori internal CPU yang berfungsi sebagai buffer operasional.

  • SD Card hanyalah gudang arsip pasif.
  • SDRAM adalah area kerja utama tempat kode dan data diletakkan.
  • Register adalah satu-satunya area di mana manipulasi data elektronik benar-benar terjadi.

Dalam pemrograman Assembly yang kita lakukan, kita secara manual mengendalikan perpindahan data antara SDRAM dan Register ini, memberikan kita kendali absolut atas efisiensi perangkat keras.