Bagaimana Komputer Bekerja: Penjelasan dari Tingkat Terbawah
Dimulai dengan Tekanan Tombol
Anda menekan huruf ‘A’ pada keyboard.
Dalam waktu kurang dari 1 milidetik, karakter tersebut muncul di layar.
Terlihat sederhana? Kenyataannya, dalam 1 milidetik itu, sinyal listrik melewati setidaknya 6 lapisan abstraksi, melalui puluhan komponen perangkat keras, dan melintasi beberapa bus untuk menyelesaikan interaksi “sederhana” ini.
Esensi komputer bukanlah komputasi, melainkan abstraksi.
Setiap lapisan menyembunyikan kompleksitas di bawahnya dan hanya mengekspos antarmuka yang bersih ke lapisan di atasnya. Karena abstraksi inilah programmer dapat menulis kode dalam bahasa tingkat tinggi tanpa perlu peduli bagaimana elektron mengalir melalui transistor.
Hari ini, kita menelusuri perjalanan lengkap sinyal tekanan tombol, melihat bagaimana komputer, melalui lapisan demi lapisan abstraksi, mengubah tindakan fisik menjadi karakter di layar.
Lapisan Pertama: Dari Sinyal Fisik ke Kode Pindai

Apa yang Anda tekan bukanlah huruf, melainkan sakelar.
Di bawah setiap tombol pada keyboard terdapat sakelar mekanis. Saat Anda menekan tombol ‘A’, sakelar menutup dan arus mengalir. Ini adalah realitas fisik paling dasar — hanya nyala dan mati, tidak ada ‘A’.
Tugas pengontrol keyboard adalah menerjemahkan sinyal fisik ini menjadi angka yang dapat dipahami komputer.
Bagaimana caranya?
Pemindaian Matriks
Lebih dari 100 tombol pada sebuah keyboard. Jika masing-masing memiliki kabel sendiri yang terhubung ke komputer, kabel keyboard akan lebih tebal dari jari Anda. Jadi keyboard menggunakan desain yang cerdas: pemindaian matriks.
Bayangkan sebuah papan catur, dengan garis baris dan garis kolom yang saling bersilangan. Setiap tombol berada di persimpangan. Pengontrol dengan cepat memberi energi pada setiap baris dan mendeteksi apakah ada arus pada setiap kolom. Jika kolom 5 mendeteksi arus saat baris 3 diberi energi, itu berarti tombol di baris 3, kolom 5 telah ditekan.
Dari sinilah kode pindai (scan code) berasal — sebuah angka yang mewakili posisi tombol.
Menekan ‘A’ mungkin menghasilkan kode pindai 0x1E. Melepas ‘A’ menghasilkan 0x9E (dengan bit tinggi tambahan yang menunjukkan “lepas”).
Lapisan pertama selesai: tindakan fisik → pengkodean digital.
Tapi belum selesai. Kode pindai masih berada di buffer internal keyboard, menunggu untuk dikirim.
Lapisan Kedua: Dari Perangkat I/O ke Memori

Kode pindai harus mencapai CPU, tetapi CPU tidak bisa hanya duduk menunggu input keyboard.
CPU beroperasi pada miliaran operasi per detik; input keyboard datang pada puluhan input per detik. Jika CPU memeriksa “apakah ada input keyboard?” sebelum setiap instruksi, 99,9999% waktunya akan terbuang.
Apa solusinya? Mekanisme interupsi.
Interupsi: Versi Perangkat Keras dari “Hubungi Saya Saat Anda Siap”
Filosofi desain interupsi mencerminkan kehidupan sehari-hari: Anda tidak menelepon kurir setiap 5 menit menanyakan “apakah paket saya sudah sampai?” Sebaliknya, kurir menelepon Anda ketika mereka tiba.
Setelah pengontrol keyboard menghasilkan kode pindai, ia mengirim sinyal Permintaan Interupsi (IRQ) ke CPU.
Sinyal ini melewati pengontrol interupsi (8259A atau padanan modernnya) dan diberikan nomor interupsi. Keyboard biasanya IRQ1, nomor interupsi 0x21.
Setelah mengeksekusi setiap instruksi, CPU memeriksa apakah ada sinyal interupsi. Jika ada, ia menjeda pekerjaan saat ini dan menangani interupsi tersebut.
Tabel Vektor Interupsi
Bagaimana CPU tahu cara menangani interupsi keyboard?
Di memori terdapat Tabel Vektor Interupsi (Interrupt Vector Table) yang menyimpan alamat rutin penangan untuk setiap nomor interupsi. Ini seperti buku telepon: nomor interupsi 0x21 sesuai dengan alamat penangan keyboard.
Ketika CPU menerima interupsi keyboard:
- Mendorong Penghitung Program (PC), register status, dll. ke dalam tumpukan
- Mencari tabel menggunakan nomor interupsi untuk menemukan alamat penangan
- Melompat ke penangan dan mengeksekusinya
Penangan keyboard membaca kode pindai melalui port I/O (biasanya 0x60), lalu menyimpannya di buffer keyboard di memori.
Lapisan kedua selesai: peristiwa I/O → data di memori.
Sekarang kode pindai sudah aman di memori. Tapi itu masih kode pindai, bukan karakter ‘A’.
Lapisan Ketiga: Dari Kode Pindai ke Karakter

Kode pindai 0x1E mewakili “posisi tombol A pada keyboard”, bukan karakter ‘A’.
Mengapa? Karena tombol yang sama dapat mewakili karakter yang berbeda pada keyboard di berbagai negara. Orang Amerika menekannya dan mendapatkan ‘A’; orang Prancis menekannya dan mendapatkan ‘Q’ (tata letak keyboard mereka berbeda).
Sistem operasi bertanggung jawab untuk mengonversi kode pindai menjadi karakter.
Subsistem Input
Sistem operasi modern semuanya memiliki Subsistem Input (Input Subsystem), yang menangani:
- Membaca kode pindai dari buffer kernel
- Mengonversinya menjadi karakter berdasarkan tata letak keyboard saat ini
- Menangani tombol pengubah (Shift+A = ‘A’ kapital, Ctrl+C = perintah salin)
- Mengirimkan karakter ke jendela yang aktif
Konversi ini melibatkan tabel pemetaan tata letak keyboard. Registry Windows berisi HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts, yang menyimpan pemetaan untuk berbagai bahasa.
Setelah konversi, karakter ‘A’ ditempatkan dalam antrean pesan, menunggu untuk dibaca oleh aplikasi.
Lapisan ketiga selesai: pengkodean tergantung perangkat keras → pengkodean karakter terpadu.
Lapisan Keempat: Dari Karakter ke Piksel

Aplikasi menerima karakter ‘A’ dan perlu menampilkannya di layar.
Tapi apa yang Anda lihat bukanlah karakter — melainkan piksel.
Monitor hanya memahami piksel — warna apa yang dimiliki setiap titik. Karakter ‘A’ adalah pola yang terdiri dari sekumpulan piksel, disimpan dalam file font.
Rendering Font
Ketika Anda mengetik ‘A’, aplikasi akan:
- Mencari file font (misalnya Microsoft YaHei, SimSun)
- Mendapatkan deskripsi glyph untuk ‘A’ (kurva vektor atau bitmap)
- Menskalakan glyph sesuai ukuran font
- Rasterisasi: mengonversi kurva vektor menjadi kisi piksel
- Menerapkan anti-aliasing untuk tepi yang lebih halus
Data piksel ini ditulis ke memori video (VRAM), yaitu memori pada kartu grafis.
Dari VRAM ke Layar
Pengontrol tampilan pada kartu grafis membaca data dari VRAM 60 kali per detik (60Hz), mengonversinya menjadi sinyal video, dan mengirimkannya ke monitor.
Monitor menerima sinyal, mengontrol warna setiap piksel, dan Anda melihat karakter ‘A’.
Lapisan keempat selesai: pengkodean karakter → matriks piksel.
Lapisan Kelima: Bagaimana CPU Mengeksekusi Instruksi-instruksi Ini

Semua operasi yang disebutkan di atas — pemindaian, interupsi, konversi, rendering — pada akhirnya harus dieksekusi oleh CPU.
Bagaimana CPU mengeksekusi instruksi?
Siklus Instruksi: Ambil-Decode-Eksekusi
Eksekusi sebuah instruksi memiliki tiga tahap:
-
Ambil (Fetch)
- Penghitung Program (PC) menyimpan alamat instruksi berikutnya
- Kirim alamat ke memori, ambil instruksi
- Simpan instruksi di Register Instruksi (IR)
-
Decode (Decode)
- Unit kontrol menganalisis kode operasi instruksi
- Menentukan operasi apa yang akan dilakukan (penjumlahan? muat? lompat?)
- Menentukan di mana operand berada
-
Eksekusi (Execute)
- Unit Logika dan Aritmatika (ALU) melakukan perhitungan
- Atau mengakses memori untuk membaca/menulis data
- Memperbarui Penghitung Program
Kemudian ulangi.
Sebuah Contoh
Misalkan CPU perlu mengeksekusi ADD R1, R2, R3 (menjumlahkan nilai di R2 dan R3, simpan di R1):
- Ambil: Baca kode mesin untuk instruksi ini dari memori
- Decode: Kenali ini sebagai instruksi penjumlahan, operand di R2 dan R3
- Eksekusi: ALU mengirim nilai R2 dan R3 ke penjumlah, menulis hasil ke R1
Setiap instruksi selesai dalam nanodetik.
Lapisan kelima selesai: bahasa tingkat tinggi → instruksi mesin → sinyal listrik.
Biaya Abstraksi
Abstraksi tidak gratis.
Setiap lapisan abstraksi memiliki biaya kinerja:
- Pemindaian keyboard: beberapa mikrodetik
- Penanganan interupsi: puluhan mikrodetik
- Konversi OS: ratusan mikrodetik
- Rendering font: beberapa milidetik
- Penulisan VRAM: beberapa mikrodetik
Semuanya digabungkan, inilah “latensi input” (input lag) yang Anda rasakan, biasanya antara 10 hingga 50 milidetik.
Bagi orang biasa, latensi ini dapat diabaikan. Tapi bagi pemain e-sports, ini adalah perbedaan hidup dan mati. Itulah mengapa mereka menggunakan keyboard mekanis (aktivasi lebih cepat), monitor dengan refresh rate tinggi (144Hz+), dan koneksi kabel (nirkabel menambah latensi ekstra).
Satu Hal yang Perlu Diingat
Esensi komputer adalah abstraksi: enkapsulasi kompleksitas, hanya ekspos antarmuka yang sederhana.
Perjalanan sinyal tekanan tombol:
Sakelar fisik → kode pindai → interupsi → buffer memori → pengkodean karakter → antrean pesan → rendering font → VRAM → piksel
Setiap lapisan hanya melakukan satu hal: menerima keluaran yang disederhanakan dari lapisan di bawahnya, memprosesnya, dan menyediakan antarmuka yang disederhanakan ke lapisan di atasnya.
Justru abstraksi berlapis inilah yang memungkinkan manusia menguasai sistem komputer yang sangat kompleks.
Programmer tidak perlu tahu bagaimana pemindaian keyboard bekerja — mereka hanya perlu membaca nilai kembali dari getchar().
Programmer tidak perlu tahu bagaimana kartu grafis merender — mereka hanya perlu memanggil fungsi DrawText().
Kekuatan abstraksi adalah membuat kompleksitas menjadi terkelola.
