Mikroprosesor: Evolusi Komputasi Program Tersimpan
Pada awal komputasi, perintis seperti Alan Turing dan John von Neumann menyadari bahwa mesin yang benar-benar berguna harus melakukan lebih dari sekadar mengeksekusi daftar perintah—ia harus mampu menyimpan, mengambil, dan memodifikasi data dalam kumpulan memori yang sama. Wawasan ini mengarah pada konsep stored-program computer.
Mesin teoretis Turing bergantung pada pita akses sekuensial untuk menyimpan instruksi program dan data. Sirkuit kontrol membaca pita, melakukan operasi, dan menulis ulang hasil ke pita atau memindahkan pita untuk membaca data baru. Sistem modern mengganti pita itu dengan random-access memory (RAM), mencapai tujuan yang sama dengan kecepatan dan fleksibilitas yang jauh lebih besar.
Analogi yang berguna datang dari kontrol mesin-alat otomatis awal. Sistem kontrol numerik (NC) open-loop memandu mesin bor atau bor dengan mengikuti instruksi yang dienkode sebagai lubang pada pita kertas. Mesin bergerak buta, mengikuti pita tanpa menyadari keadaan benda kerja.
Karena perangkat ini “buta” terhadap lingkungannya, ia tidak dapat mengkompensasi perubahan seperti ekspansi logam atau aus alat. Programmer juga harus memprediksi setiap urutan instruksi yang mungkin, karena pita tersebut baca saja dan mesin tidak memiliki memori internal untuk melacak statusnya.
Peningkatan ke finite-state machine (FSM) memberikan alat memori yang rudimenter: dengan mengumpulkan beberapa bit data kembali ke logika alamat, sistem dapat mengingat state sederhana seperti “pendingin nyala” atau “alat dalam posisi.” Namun ini masih jauh dari fleksibilitas yang benar.
Keberuntungan datang dengan closed-loop numerical control (CNC), di mana program dapat menulis data baru ke memori yang dapat ditulis (RAM). Sistem kontrol kemudian dapat mencatat apa yang telah dilakukan dan menyesuaikan dengan perubahan yang terdeteksi sensor—mirip dengan tukang mesin yang mencatat catatan pada kertas korek untuk direferensi nanti.
Ilmuwan komputer lama bermimpi tentang mesin yang dapat memodifikasi kode mereka sendiri, mencerminkan bagaimana otak manusia memperkuat sinaps melalui pengalaman. Untuk program yang memodifikasi diri sendiri untuk dapat dilakukan, kode yang dapat dieksekusi harus tinggal di memori yang dapat ditulis yang sama yang menyimpan data—sebuah konsep yang tetap berada di garis depan penelitian saat ini.
Sebagian besar perangkat lunak masih mengikuti urutan instruksi yang tetap, mengubah hanya bidang data terpisah. Untuk benar-benar mendukung model program tersimpan, kita membutuhkan lebih dari sekadar FSM; kita membutuhkan memori baca/tulis, unit pemrosesan data, dan kontroler yang canggih.
Memori baca/tulis mudah disediakan oleh chip static atau dynamic RAM—terjangkau dan cepat. Operasi logika ditangani oleh Arithmetic Logic Unit (ALU), yang dapat melakukan fungsi aritmatika dan Boolean.
Control Unit mengatur gerakan data di antara memori, ALU, dan perangkat eksternal. Ia menggunakan tri-state buffer untuk merute data pada bus dan logika decoding untuk menerjemahkan kode instruksi biner menjadi tindakan.
Contoh instruksi mungkin: “Tambahkan nilai di alamat 0010 dengan nilai di alamat 1101,” atau “Hitung paritas byte di alamat 0111.” Pemetaan dari kode biner ke operasi adalah arbitrer, seperti standar ASCII awal, meskipun instruction set biasanya khusus produsen.
Saat memori baca/tulis, ALU, dan Control Unit diintegrasikan—sering pada satu chip—mereka membentuk processor. Processor dengan memori eksternal minimal disebut microprocessor; dikombinasikan dengan sirkuit kontrol bus, ia menjadi Central Processing Unit (CPU).
Operasi CPU diungkapkan dalam siklus fetch/execute. program counter menyimpan alamat instruksi berikutnya. Control Unit membaca alamat itu ke dalam memory address bus, mengambil instruksi dari RAM, dan menyimpannya dalam register sementara.
Jika instruksi membutuhkan operand, Control Unit menerbitkan akses memori tambahan, merute data yang diambil ke register ALU. ALU kemudian melakukan operasi yang diminta, menempatkan hasil dalam accumulator. Akhirnya, program counter bertambah, dan siklus berulang.
Microprocessor (CPU)
--------------------------------------
| ** Program counter ** |
| (increments address value sent to |
| external memory chip(s) to fetch |==========> Address bus
| the next instruction) | (to RAM memory)
--------------------------------------
| ** Control Unit ** |<=========> Control Bus
| (decodes instructions read from | (to all devices sharing
| program in memory, enables flow | address and/or data busses;
| of data to and from ALU, internal | arbitrates all bus communi-
| registers, and external devices) | cations)
--------------------------------------
| ** Arithmetic Logic Unit (ALU) ** |
| (performs all mathematical |
| calculations and Boolean |
| functions) |
--------------------------------------
| ** Registers ** |
| (small read/write memories for |<=========> Data Bus
| holding instruction codes, | (from RAM memory and other
| error codes, ALU data, etc; | external devices)
| includes the "accumulator") |
--------------------------------------
Bahkan operasi paling sederhana membutuhkan banyak mikro-langkah. Aritmatika kompleks seperti perpangkatan melibatkan iterasi berulang dari fungsi dasar. Pertimbangkan ribuan siklus yang harus dilakukan mesin grafis simulator penerbangan untuk merefresh layar setiap frame.
Kecepatan luar biasa siklus fetch/execute membuat hal ini mungkin. Beberapa desain menyematkan program kecil—disebut microcode—di dalam ROM internal. Microcode menangani sub-langkah operasi kompleks, memungkinkan programmer untuk mengeluarkan satu instruksi tingkat tinggi alih-alih menulis setiap detail.
Dengan cara ini, processor mengandung processor: sebuah program yang berjalan di dalam sebuah program yang menyederhanakan pengembangan sambil mempertahankan performa.