Arsitektur Komputer ORGANISASI SISTEM KOMPUTER Disadur oleh : Freddy Sebuah komputer digital terdiri dari sebuah sistem interkoneksi processor, memory, dan input/output device. Bahasan ini mempekenalkan 3 komponen tersebut dan interkoneksi mereka. Processor, memory, dan I/O device adalah konsep penting dan akan selalu dibahas pada setiap pelajaran mengenai arsitektur komputer, sehingga perlu untuk memulai pelajaran arsitektur komputer dengan memperhatikan 3 komponen tersebut secara keseluruhan. 1. PROCESSORS Organisasi simple bus –komputer seperti ditunjukkan pada Figure 2.1. CPU (central processing unit) adalah “otak” dari komputer. Fungsinya mengeksekusi program yang dikirimkan ke dalam memory utama dengan mengambil instruksiinstruksinya, memeriksanya, dan kemudian mengeksekusi satu per satu. Komposisi CPU memiliki beberapa bagian yang berbeda. Control unit (CU) bertanggung jawab mengambil instruksi dari memory utama dan menentukan tipenya. Aritmetic and logical unit (ALU) melaksanakan operasi-operasi misalnya seperti penambahan dan Boolean AND yang diperlukan untuk melaksanakan instruksi-instruksi tersebut. CPU juga berisi memory berkecepatan tinggi yang digunakan untuk menyimpan hasil-hasil sementara dan infomarsi kendali tertentu. Memory ini terdiri dari sejumlah register yang masing-masing mempunyai fungsi tertentu. Register yang paling penting adalah program counter (PC), yang menunjuk ke instruksi berikutnya untuk dieksekusi. Central processing unit (CPU) Control unit Arithmetic logical unit (ALU) I/O Devices Registers Main Memory Disk Printer Bus Figure 1. Organisasi komputer sederhana dengan satu CPU dan dua I/O devices Arsitektur Komputer Penamaan “program counter” agaknya adalah sesuatu yang keliru karena ia tidak berhubungan sama sekali dengan “counting” (penghitungan), akan tetapi apa boleh buat istilah ini telah digunakan secara umum. Yang juga penting adalah instruction register (IR), yang menggenggam instruksi yang secara langsung dieksekusi. Banyak komputer mempunyai register-register yang lain juga, beberapanya tersedia pada programmer tingkat 2 dan 3 untuk menyimpan hasilhasil yang segera. 1.1. Eksekusi Instruksi CPU mengeksekusi setiap instruksi dalam sebuah rangkaian dari langkahlangkah kecil: 1. Mengambil instruksi berikutnya dari memori ke dalam instruction register (IR). 2. Mengubah program counter (PC) guna menunjuk ke instruksi selanjutnya. 3. Menentukan tipe instruksi yang baru saja diraih. 4. Jika instruksi menggunakan data di dalam memory, menentukan dimana instruksi tersebut berada. 5. Mengambil data ke dalam internal CPU registers. 6. Mengeksekusi instruksi. 7. Menyimpan hasil di tempat yang layak. 8. Kembali langkah 1 untuk memulai mengeksekusi instruksi selanjutnya. Rangkaian langkah-langkah ini berulang-ulang ini disebut sebagai fetch-decodeexcute cycle. Ia merupakan pusat dari operasi seluruh komputer. Uraian ini menerangkan cara sebuah CPU bekerja menyerupai sebuah program yang ditulis dalam bahasa Inggris. Figure 2 menunjukkan program informal yang ditulis ulang dalam prosedur Pascal. Fakta yang mungkin adalah menulis sebuah program yang bisa meniru fungsi dari sebuah CPU yang memperagakan bahwa sebuah program tidak perlu dieksekusi oleh sebuah “hardware” CPU yang terdiri dari sebuah kotak yang penuh berisi komponen elektronik. Malahan, sebuah program dapat dilaksanakan dengan mempunyai program lain yang mengambil, memeriksa, dan mengeksekusi instruksiinstruksinya. Sebuah program (seperti Fig.2) yang mengambil, memeriksa, dan mengeksekusi instruksi-instruksi program lain disebut sebuah interpreter. Padanan antara processor hardware dan interpreter mempunyai implikasi penting bagi organisasi komputer. Setelah menentukan bahasa mesin (seterusnya kita sebut L saja) untuk sebuah komputer baru. Kelompok desain bisa memutuskan apakah mereka ingin membangun sebuah processor hardware untuk mengeksekusi program-program di dalam L secara langsung, atau apakah mereka malahan menginginkan menulis sebuah interpreter saja. Karena sebuah interpreter memecah instruksi-instruksi mesin targetnya ke dalam langkah-langkah kecil, mesin di mana interpreter dijalankan bisa jadi lebih sederhana dibandingkan hardware processor. Karena alasan ekonomis dan juga Arsitektur Komputer alasan-alasan lain, program-program pada level mesin konvesional dari komputerkomputer sangat modern dilaksanakan oleh interpreter yang berjalan secara total pada mesin level 1 yang lebih primitif yang kita sebut microprogramming level. Type word = … ; address = … ; mem = array[0..4095] of word ; procedure interpreter (memory : mem ; ac : word ; StartingAddress : address) ; {Prosedur ini menginterprestasikan program-program untuk mesin sederhana dengan 1 instruksi per word. Memory terdiri dari sebuah rangkaian word yang berangka 0, …,4095. Mesin mempunyai sebuah processor register yang dinamakan ac, yang digunakan untuk perhitungan aritmatika. Sebagai contoh, instruksi ADD menambahkan sebuah word ke ac. Interpreter terus berjalan sampai run bit dimatikan oleh instruksi HALT. Bentuk dari sebuah proses yang berjalan pada mesin ini terdiri dari memory, program counter, run bit, dan ac. Bentuk awal (initial state) dilewatkan melalui parameter-parameter} var ProgramCounter, DataLocation : address ; InstrRegister, data : word ; DataNeeded : boolean ; InstrType : integer ; RunBit : 0..1 ; begin ProgramCounter := StartingAddress ; RunBit := 1 ; while RunBit = 1 do begin {Mengambil instruksi berikutnya ke dalam instruction register} InstrRegister := memory [ProgramCounter] ; {Memajukan program counter untuk menunjuk kepada instruksi berikutnya} ProgramCounter := ProgramCounter + 1 ; {Membaca kode instruksi dan merekam tipenya} DetermineInstrType(InstrRegister, InstrType} ; {Melokasikan data yang digunakan oleh instruksi} FindData(InstrType, InstrRegister, DataLocation, DataNeeded) ; {Mengambil data dari memory jika ada}; if DataNeeded then data := [memory, DataLocation] ; {Memajukan proses dengan mengeksekusi isntruksi} excute(InstrType, data, memory, ac, ProgramCounter, RunBit) ; end end; Figure 2. Interpreter untuk komputer sederhana. Kumpulan seluruh instruksi yang tersedia bagi programmer pada sebuah level dinamakan instruction set dari level itu. Sejumlah instruksi di dalam instruction set berbeda dari mesin ke mesin dan dari level ke level. Misalnya, Arsitektur Komputer untuk level mesin konvensional, ukuran instruksi berada pada range 20 sampai 300. Instruction set yang besar tidak terlalu diperlukan, lebih baik yang kecil saja. Sebuah instructions set yang besar sering berarti bahwa instruksi-instruksinya sangat tidak umum. Compiler untuk high-level languages, contohnya Ada, Modula 2, dan Pascal, pada umum tampil lebih baik dengan instruction set kecil. Mesin-mesin dengan instruction set sangat kecil dinamakan mesin RISC. 1.2. Organisasi CPU Organisasi internal dari bagian CPU von Neumann klasik ditunjukkan secara rinnci pada Fig.3. Bagian ini disebut data path dan terdiri dari register-register (dengan tipe 1 sampai 16) dan ALU (Arithmetic Logical Unit). Register-register mengumpan dua ALU input register, diberi label A dan B di dalam figure. Register-register ini menggenggam ALU input selama ALU sedang berhitung. A+B A Registers B A B ALU input register ALU A+B ALU output register Figure 3. Data path dari mesin von Neumann ALU sendiri melaksanakan operasi penambahan, pengurangan, dan operasi sederhana lainnya pada input, yang menghasilkan sebuah hasil di dalam output register. Output register ini bisa disimpan kembali ke dalam sebuah register, dan dari sini jika dibutuhkan akan kembali ke memory. Instruksi-instruksi bisa dibagi kedalam tiga kategori: register-memory, register-register, dan memory-memory. Instruksi-instruksi register-memory mengijinkan memory words untuk diraih ke dalam register-register, dimana mereka bisa digunakan sebagai input-input ALU dalam sub-rangkaian instruksi. Sebuah instruksi register-register mengambil dua operand dari register-register, membawa mereka ke ALU input register, melaksanakan beberapa operasinya, kemudian menulis hasilnya kembali ke dalam memory. Operasi dari jalur data adalah jantung dari sebagian besar CPU. Perluasan yang bisa dipertimbangkan, ia mendefinisikan apa yang mesin bisa kerjakan. Arsitektur Komputer 1.3. Eksekusi Instruksi Paralel Para desainer telah berusaha membuat mesin berjalan lebih cepat. Beberapa perluasan, mesin-mesin dapat diaklerasi dengan hanya meningkatkan kinerja hardware. Tetapi, beragam keterbatasan fisik membuat hal tersebut seperti menggapai langit saja. Hukum fisika menyatakan bahwa tak ada satupun benda yang bisa bergerak melebihi kecepatan cahaya, kira-kira 30 cm/nanosecond dalam dalam ruang hampa dan 20 cm/nanosecond dalam kabel baja. Ini berarti bahwa membuat sebuah komputer dengan 1 nanosecond waktu instruksi, jarak total sinyal-sinyal listrik berjalan dalam CPU ke memory dan kembali lagi ke CPU, tidak bisa lebih dari 20 cm. Oleh karena itu computer super cepat haruslah berukuran sangat kecil. Sayangnya, komputer-komputer cepat menghasilkan lebih banyak panas dibandingkan komputer-komputer yang lambat, dan menyesuaikan komputer ke dalam volume kecil menyebabkan penghilangan panas ini menjadi sulit Super komputer kadang-kadang direndam di dalam cairan freon, sebuah pendinginan, agar bisa mentransfer panas keluar secepat mungkin. Terutama sekali, membuat komputer yang berjalan semakin cepat akan semakin sulit, dan juga sangat mahal. Tetapi, pendekatan lain dimungkinkan. Mungkin sekali membuat sebuah mesin dengan banyak ALU yang lebih lambat (dan lebih murah) atau bahkan CPU lengkap dengan kemampuan komputasi yang sama tetapi dengan biaya lebih rendah. Banyak riset telah dicurahkan pada pembuatan mesin-mesin parallel. Dalam bahasan ini, kita akan berkenalan dengan beberapa teknik yang digunakan. Mesin paralel dapat dibagi ke dalam tiga kategori berdasarkan pada seberapa banyak instruksi dan aliran data yang ia miliki, yakni: 1. SISD : Single Instruction stream, Single Data stream. 2. SIMD : Single Instruction stream, Multiple Data stream. 3. MIMD : Multiple Instruction stream, Multiple Data stream. Mesin tradisional von Neumann adalah SISD. Ia memiliki satu aliran instruksi (i.e. satu program), yang dieksekusi oleh satu CPU, dan satu memory yang berisi datanya. Instruksi pertama diambil dari memory kemudian dieksekusi. Setelah itu instruksi kedua diambil dan dieksekusi. Meskipun begitu, dalam model sekuensial ini, sejumlah paralelisme terbatas bisa jadi mengambil dan memulai instruksi berikutnyan sebelum instruksi yang sekarang selesai. CDC 6600, misalnya, mempunyai unit fungsional lebih dari satu (khususnya pada ALU), setiap dari fungsi tersebut bisa melaksanakan operasi tunggal pada kecepatan tinggi, seperti yang diilustrasikan pada Figure 4. Dalam contoh ini, kita mempunyai lima unit fungsional, dua masing-masing untuk operasi-operasi umum penambahan dan perkalian, satu masing-masing untuk pengurangan dan pembagian. Arsitektur Komputer PROCESSORS Registers + + - x : Figure 4. Sebuah CPU dengan lima unit fungsional yang dapat berjalan secara paralel Ide dari desain ini adalah control unit mengambil sebuah insruksi kemudian menyerahkan kepada satu unit fungsional untuk pengeksekusian. Sementara itu, control unit mengambil instruksi berikutnya dan menyerahkan pada unit fungsional yang berbeda. Proses ini berlanjut sampai tidak bisa berlangsung lebih jauh lagi, ini disebabkan seluruh unit fungsional dari tipe yang diperlukan sibuk, atau disebabkan sebuah operand masih sedang dikomputasi. Strategi umum jelas sekali mengandung arti bahwa waktu untuk melaksanakan sebuah operasi jauh lebih lama daripada waktu untuk mengambil instruksi, sehingga sangat umum digunakan untuk operasi-operasi floating-point (bilangan float) yang rumit dan lambat, daripada operasi-operasi integer yang simpel dan cepat. Penyimpanan pada ide ini adal memecah eksekusi dari setiap instruksi ke dalam beberapa bagian. Pada