Jumat, 13 Juli 2012

Organisasi Arsitektur Komputer



Komputer digital terdiri atas komponen-komponen utama prosesor, memori dan perangkat masukan/keluaran. Bab ini akan memberikan gambaran tentang tiga komponen utama tersebut dan akan menjadi langkah awal untuk memahami komputer secara menyeluruh. Prosesor, memori, dan perangkat masukan/keluaran adalah konsep kunci untuk memahami sistem komputer.

A.      Prosesor

Organisasi komputer sederhana ditunjukkan pada Gambar 1  berikut ini. Prosesor atau mikroprosesor merupakan unit pemroses pusat (Central Processing Unit) yang sering dikatakan sebagai “otak” komputer.

Gambar 1. Organisasi komputer sederhana dengan dua perangkan masukan/keluaran
Fungsi prosesor adalah untuk mengeksekusi program yang disimpan dalam memori. Tahapan pelaksanaan instruksi adalah: (1) pengambilan (fecthing) instruksi, (2) memeriksa dan menginterpretasi instruksi, dan (3) mengeksekusi instruksi. Komponen-komponen atau bagian komputer tersebut saling tersambung oleh jalur-jalur konduktor, yang disebut sebagai bus, yang berfungsi sebagai sarana transmisi data, alamat, dan isyarat kendali.
Prosesor sebenarnya terdiri atas beberapa bagian fungsional. Pada masa lalu, prosesor direalisasikan dengan beberapa cip atau beberapa modul rangkaian elektronik. Saat ini prosesor biasanya berupa saru cip rangkaian terpadu. Secara fungsional, prosesor terdiri atas: (1) unit kontrol (control unit) yang bertanggungjawab dalam mengambil instruksi dari memori utama dan memastikan jenisnya untuk diinterpretasi, (2) ALU (arithmetic and logic unit) berfungsi untuk melakukan operasi-operasi aritmetika (jumlah, kurang, kali, bagi, dsb) maupun logika (AND, OR, NOT, SHIFT, dsb).
Prosesor juga berisi memori berukuran kecil, berkecepatan tinggi untuk menyimpan hasil operasi sementara ataupun informasi pengendalian tertentu. Memori ini terdiri atas sejumlah register, masing-masing memiliki ukuran dan fungsi tertentu. Biasanya register-register ini memiliki ukuran lebar yang sama. Isi register dapat dibaca atau dituliskan dengan kecepatan tinggi karena ia berada dalam satu cip dengan prosesornya.
Register paling penting di dalam prosesor adalah Program Counter (PC) atau Pencacah Program, yang berisi alamat memori yang akan diambil kode atau datanya untuk dieksekusi. Register lainnya adalah Instruction Register (IR) atau Register Instruksi, yang menyimpan sementara instruksi yang saat ini sedang dieksekusi. Register-register lain banyak juga diimplementasikan dalam prosesor, ada yang berdifat serbaguna, ada pula yang berfugsi khusus.

1.       Organisasi Prosesor

Organisasi internal dari prosesor yang mengikuti arsitektur von Neumann ditunjukkan pada Gambar 2 berikut ini. Bagian ini disebut sebagai alur data (data path) dan terdiri atas register-register (antara 1-32 buah), ALU, dan beberapa bus yang menghubungkan bagian-bagian tersebut. Register-register memberikan masukan pada dua masukan ALU, yang diberi label A dan B pada Gambar 2 tersebut. Register-register ini menyimpan masukan ALU sementara ALU melakukan beberapa komputasi.

Gambar 2. Alur data pada mesin von Neumman pada umumnya
ALU berfungsi melakukan operasi aritmetika maupun logika terhadap operan pada kedua lengan masukannya dan mengirimkan hasilnya ke register tertentu. Dari register penampung ini (biasanya register khusus yang diberi nama Akumulator) hasil operasi tadi bisa dikirimkan atau dituliskan ke memori ataupun ke perangkat keluaran.
Kebanyakan instruksi yang dijalankan oleh prosesor dapat dibagi menjadi dua kategori, yakni operasi dari register ke memori atau dari register ke register. Instruksi register ke memori memungkinkan data dalam memori diambil dan dimasukkan ke dalam register, di mana selanjutnya dapat digunakan sebagai masukan bagi ALU pada instruksi berikutnya. Satu satuan data dengan lebar tertentu yang dapat ditransfer dari memori ke regiter dan sebaliknya disebut satu kata (word). Instruksi register ke memori lainnya memungkinkan data yang ada di register dipindahkan kembali ke memori.
Instruksi jenis lain adalah instruksi register ke register. Instruksi register ke register pada umumnya mengambil dua operan dari register, memberikannya ke register masukan ALU, melakukan operasi aritmetika atau logika tertentu, dan menyimpan kembali hasilnya ke satu register tertentu. Proses menjalankan dua operan melalui ALU dan menyimpan hasilnya disebut siklus alur data (data cycle path). Semakin cepat siklus alur data, semakin cepat prosesor bekerja.

2.       Eksekusi Instruksi

Prosesor mengeksekusi setiap instruksi dalam sederetan langkah-langkah kecil. Langkah-langkah kecil itu adalah sebagai berikut:
1.       Mengambil instruksi yang akan dijalankan dari memori dan memasukkannya ke dalam register instruksi;
2.       Mengubah isi Program Counter menjadi alamat instruksi berikutnya;
3.       Menentukan jenis instruksi yang baru saja diambil;
4.       Jika instruksi menggunakan word di memory, maka alamat memori tersebut dipastikan keberadaannya;
5.       Mengambil word jika diperlukan, ke dalam register CPU;
6.       Mengeksekusi instruksi;
7.       Kembali ke langkah 1 untuk memulai instruksi berikutnya.
Langkah berurutan tersebut sering disebut sebagai siklus fetch-decode-execute yang merupakan langkah operasi utama semua komputer.
Komputer-komputer generasi awal hanya memiliki perangkat instruksi sederhana dan sedikit jumlahnya. Perangkat instruksi (instruction set) adalah kumpulan instruksi-instruksi yang dapat dieksekusi oleh prosesor. Pada generasi berikutnya, kebutuhan akan komputer dengan kemampuan besar mendorong berkembangnya instruksi yang kompleks. Sebagai contoh, instruksi penjumlahan adalah instruksi sederhana yang dapat dilakukan oleh prosesor dalam satu siklus fetch-decode-execute. Implementasi instruksi perkalian, yang pada dasarnya adalah penjumlahan berulang, dilakukan dalam beberapa siklus fetch-decode-execute dengan instruksi utama yang dilakukan perangkat keras sebenarnya adalah instruksi penjumlahan itu sendiri. Jadi, instruksi perkalian dilakukan dengan mengulang-ulang operasi penjumlahan. Operasi penjumlahan dilakukan oleh perangkat keras prosesor, perulangannya ditentukan oleh program atau deretan instruksi.
Pada masa awal perkembangan prosesor, diketahui bahwa instruksi yang lebih kompleks mampu mempercepat eksekusi program.  Instruksi yang makin kompleks lebih baik karena eksekusi operasi individual kadang-kadang saling tumpang tindih, atau dieksekusi secara paralel dengan menggunakan perangkat keras yang berbeda. Untuk komputer yang berharga mahal dan dengen kinerja sangat tinggi, biaya untuk menambahkan perangkat keras ke dalam cip atau sistem prosesor (bila diimplementasikan dengan modul-modul rangkaian) sudah diperhitungkan.  Jadi, komputer yang mahal dan berkinera tinggi memiliki lebih banyak instruksi daripada yang berharga murah. Meskipun demikian, pada perkembangan berikutnya, meningkatnya biaya pengembangan perangkat lunak dan kebutuhan akan kompatibilitas antar komputer menciptakan kebutuhan untuk mengimplementasikan instruksi kompleks pada komputer murah di mana biaya jauh lebih penting dari pada kecepatan operasi.

3.       RISC versus CISC

Selama tahun 1970-an, banyak eksperimen dilakukan untuk menggunakan instruksi-instruksi sangat kompleks, yang dimungkinkan dilakukan oleh prosesor dengan perantaraan interpreter. Perancang mencoba mendekatkan “semantic gap” antara apa yang bisa dikerjakan oleh mesin dan apa yang diperlukan oleh bahasa tingkat tinggi. Hampir semua peneliti berfikir tentang merancang mesin yang sederhana, sebagaimana sekarang dilakukan untuk merancang sistem operasi, jaringan, pengolah naskah yang lebih sederhana.
Salah satu grup peneliti yang mengikuti kecenderungan itu dan mencoba mengimplementasikan   ide Seymour Cray mengenai minikomputer berkinerja tinggi adalah grup yang dipimpin oleh John Cocke dari IBM. Karya mereka menghasilkan minikomputer eksperimental yang diberi nama 801. Meskipun IBMtidak pernah memasarkan mesin ini dan hasilnya tidak dipublikasikan sampai beberapa tahun kemudian, beritanya menyebar  dan para peneliti lain memulai  meneliti hal yang sama.
Pada tahun 1980, satu grup di Berkeley di bawah pimpinan David Patterson dan Carlo Sequinmemulai merancang CPU VLSIyang tidak menggunakan interpreter. Mereka mengenalkan istilah RISC untuk konsep ini dan memberi nama prosesornya sebagai RISC I CPU atau disingkat sebagai RISC II.  Tidak lama kemudian, pada tahun 1981, di Stanford, John Henessy merancang dan membuat cip yang agak berbeda yang diberinama MIPS. Cip ini bergulir menjadi produk komersial penting, SPARC dan MIPS.
Prosesor-prosesor baru tersebut secara signifikan berbeda dari pada prosesor komersial yang ada di pasaran saat itu. Oleh karena prosesor baru ini tidak harus kompatibel ke belakang dengan produk yang ada sebelumnya maka perancang bebas memilih perangkat instruksi baru yang akan memaksimalkan performa keseluruhannya. Meskipun titik berat semula adalah pada instruksi yang sederhana dan dapat dieksekusi dengan sangat cepat, segera dapat diketahui bahwa merancang instruksi yang dapat dieksekusi dengan cepat adalah kunci bagi kinerja prosesor yang tinggi.
Pada waktu prosesor sederhana pertama kali dirancang, karakteristik yang memikat perhatian semua orang adalah sangat sedikitnya jumlah instruksi yang dimiliki oleh prosesor, yakni hanya sekitar 50. Jumlah instruksi ini jauh lebih kecil dibandingkan dengan angka 200 sampai 300 buah instruksi yang dimiliki oleh komputer DEC VAX dan mainframe IBM. RISC adalah singkatan dari Reduced Instruction Set Computer, dikontraskan dengan CISC (Complex Instruction Set Computer) yang merujuk pada komputer VAX yang mendominasi pemilikan komputer di departemen komputer universitas.
Singkat cerita, terjadi persaingan antara dua kubu, yakni kubu yang mengklaim RISC lebih baik dibandingkan dengan CISC yang saat itu didominasi oleh komputer-komputer yang sudah mapan (antara lain VAX, Intel, dan mainframe IBM). Kubu RISC mengklaim bahwa cara terbaik untuk merancang komputer adalah dengan memberikan sedikit perangkat instruksi sederhana yang dieksekusi dalam satu siklus alur data, misalnya, mengambil data dari dua register, mengoperasikannya (aritmetika ataupun logika), dan menyimpan kembali hasilnya ke register. Argumentasinya adalah, meskipun mesin RISC memerlukan 4-5 instruksi untuk menjalankan apa yang dilakukan oleh mesin CISC, jika mesin RISC mampu mengeksekusi 10 kali lebih cepat maka mesin RISC akan bekerja lebih cepat. Perlu dicatat bahwa saat itu kecepatan memori utama sepadan dengan kecepatan unit control sehingga lambatnya interpretasi menurunkan kinerja mesin, sesuatu yang menguntungkan bagi mesin RISC.
Mungkin anda berfikir, kalau benar teknologi RISC (yang dimiliki antara lain oleh prosesor UltraSPARC dari Sun) unggul dibandingkan mesin CISC (misalnya Pentium dari Intel) mengapa prosesor Intel tepat unggul di pasaran?
Masalah utamanya adalah isu mengenai kompatibilitas dan jutaan dolar investasi yang telah ditanamkan untuk perangkat lunak bagi mesin-mesin Intel. Masalah lain adalah, Intel telah memanfaatkan ide yang sama di dalam mesin CISC. Mulai generasi 486, prosesor Intel berintikan mesin RISC yang mengeksekusi instruksi paling sederhana (dan paling umum) dalam satu siklus alur data sementara instruksi-instruksi yang kompleks dieksekusi dengan cara CISC. Hasil akhirnya adalah untuk instruksi-instruksi yang sederhana dan umum, eksekusinya sangat cepat, dan tidak cukup cepat untuk instruksi yang kurang umum. Meskipun pendekatan hibrid ini menjadikan prosesor Intel tidak secepat prosesor yang murni RISC, performa keseluruhannya cukup kompetitif, lagi pula masih memungkinkan perangkat lunak lama dioperasikan pada prosesor generasi barutanpa perlu modifikasi. Ini adalah keuntungan kompatibilitas yang tidak dimiliki oleh komputer RISC murni.

4.       Prinsip Perancangan Komputer Modern

Saat ini telah lewat tigadekade sejak mesin RISC pertama kali dikenalkan. Beberapa prinsip perancangan RISC diterima sebagai cara yang baik untuk merancang komputer berdasarkan teknologi perangkat keras saat ini. Jika perubahan besar pada teknologi perangkat keras ini terjadi (misalnya suatu teknik pembuatan menjadikan siklus memori 10 kali lebih cepat daripada waktu siklus CPU saat ini), prinsip perancangan ini bisa saja berubah. Jadi, para perancang senantiasa harus mencermati perkembangan teknologi karena mungkin saja akan berpengaruh terhadap perancangan sistem.
Jadi, ada beberapa prinsip perancangan, kadang-kadang disebut prinsip perancangan RISC yang berupaya diikuti oleh para perancang prosesor serbaguna. Kendala eksternal, misalnya perlunya kompatibilitas dengan sistem yang telah dibuat sebelumnya, selalu menjadi salah satu yang harus dikompromikan dari waktu ke waktu.
Beberapa prinsip perancangan prosesor modern, antara lain:
1.       Seluruh instruksi dieksekusi langsung oleh perangkat keras.
Seluruh instruksi yang umum harus dieksekusi oleh perangkat keras secara langsunng, tidak diinterpretasi oleh mikroinstruksi. Menghilangkan unit interpretasi memberikan kecepatan yang tinggi bagi kebanyakan instruksi. Pada komputer yang mengimplementasikan perangkat instruksi CISC, instruksi yang lebih kompleks mungkin dipecah-pecah menjadi beberapa bagian yang dieksekusi sebagai urutan mikroinstruksi. Langkah ekstra ini memperlambat mesin, tetapi untuk instruksi-instruksi yang jarang digunakan hal ini masih bisa diterima;
2.       Memaksimalkan kecepatan instruksi diissue (diterbitkan).
Komputer modern menggunakan banyak trik untuk memaksimalkan performanya, diantaranya dengan mencoba memulai pengambilan atau penerbitan sebanyak mungkin instruksi perdetik. Jika anda dapat menerbitkan 500 juta instruksi per detik, anda dapat membangun prosesor berkecepatan 500 MIPS, tidak peduli berapa lamanya instruksi-instruksi tersebut selesai dilaksanakan. MIPS adalah kependekan dari Millions of Instruction Per Second.  Prinsip ini menyarankan bahwa paralelisme, yakni mengeksekusi instruksi secara paralel dapat memegang peran penting dalam memperbaiki performa, karena penerbitan sejumlah besar instruksi yang lambat dalam waktu yang singkathanya dimungkinkan jika banyak instruksi dapat dieksekusi sekaligus.  Meskipun instruksi selalu ditemui dalam program secara berurutan, instruksi-instruksi tersebut tidak selalu diterbitkan secara berurutan (karena mungkin saja sumber daya yang diperlukan sedang sibuk) dan juga mungkin tidak perlu diselesaikan secara berurutan. Tentu saja jika instruksi 1 mengisi register dan instruksi 2 menggunakan isi register tersebut, kita harus berhati-hati agar instruksi 2 tidak membaca isi register sampai isinya telah benar sesuai dengan yang dikehendaki.    
3.       Instruksi harus mudah didekode
Batas kritis yang mempengaruhi kecepatan penerbitan instruksi adalah pendekodean instruksi satu persatu untuk menentukan sumber daya apa sajakah yang diperlukan. Apapun bantuan yang dapat menolong mekanisme proses ini sangat diperlukan. Misalnya dengan membuat instruksi teratur, panjangnya tertentu dan tetap, sedikit jumlah field-nya, dan sebagainya. Semakin sedikit format berbeda semakin baik.
4.       Hanya instruksi Load dan Store yang merujuk ke memori.
Salah satu cara untuk memecah operasi ke dalam step-step yang berbeda adalah menjadikan operan bagi kebanyakan instruksidatang dan kembali ke register dalam prosesor. Operasi untuk memindahkan operan dari memori ke register dapat dilakukan oleh instruksi lainnya.
5.       Sebanyak mungkin disediakan register
Karena mengakses memori relatif lambat, maka banyak semakin register yang tersedia (paling kurang 32) semakin baik sehingga satu word sekaligus dapat disimpan sampai tidak lagi diperlukan.

0 komentar:

Posting Komentar

Diberdayakan oleh Blogger.