Diberdayakan oleh Blogger.

Rabu, 30 September 2015

Bagian 1.2, Event Asinkron: Loop Polling dan Interupsi

by Joielechong sipayung  |  in Pengenalan Pemrograman Menggunakan Java at  Rabu, September 30, 2015

Artikel ini merupakan bagian buku Pengenalan Pemrograman Menggunakan Java


Sebelumnya: Cycle Ambil dan Eksekusi: Bahasa Mesin

Bagian 1.2

Event Asinkron: Loop Polling dan Interupsi


CPU menghabiskan sebagian besar waktunya untuk mengambil instruksi dari memori dan mengeksekusinya. Tetapi CPU dan memori utama hanyalah dua diantara banyak komponen pada sistem komputer nyata. Sistem yang lengkap dari komputer mencakup beberapa perangkat seperti:
  • - Hard disk atau solid state drive untuk menyimpan berkas program dan data. (Perlu diingat bahwa memori utama hanya memegang sejumlah informasi yang relatif kecil dan memegangnya selama sumber daya tetap nyala. Hard disk atau solid state drive digunakan sebagai tempat penyimpanan permanen untuk jumlah informasi yang lebih besar, tetapi program harus dimuat dari disk ke memori utama sebelum program tersebut dieksekusi. Hard disk menyimpan data pada piringan magnetis yang berputar, sedangan solid state drive merupakan perangkat elektronis murni tanpa bagian yang bergerak.)
  • - Keyboard dan mouse untuk masukan pengguna.
  • -Monitor dan printer yang digunakan untuk menampilkan keluaran komputer.
  • - Perangkat keluaran audio yang memungkinan komputer untuk mengeluarkan suara.
  • - Antarmuka jaringan yang memungkinkan komputer untuk berkomunikasi dengan komputer lainnya yang terhubung dengannya pada sebuah jaringan, baik secara nirkabel atau dengan kabel.
  • - Scanner yang mengubah gambar ke kode dalam bilangan biner yang dapat disimpan dan diolah oleh komputer.

Daftar perangkat ini bisa ditambahkan lagi, ini karena sistem komputer dibangun sedemikian rupa sehingga dapat dilakukan penambahan perangkat baru dengan mudah. Terkadang CPU harus berkomunikasi dan mengontrol perangkat-perangkat tersebut. CPU hanya bisa melakukan hal ini dengan mengeksekusi instruksi bahasa mesin (hanya inilah yang bisa dilakukan CPU, titik). Cara kerjanya adalah untuk setiap perangkat di sistem terdapat sebuah driver perangkat, yang terdiri dari perangkat lunak yang akan dieksekusi CPU saat sedang berurusan dengan perangkat tersebut. Pemasangan perangkat baru pada sistem umumnya terdiri dari dari langkah: menghubungkan perangkat secara fisik ke komputer, dan memasang perangkat lunak driver dari perangkat. Tanpa driver dari perangkat, perangkat fisik saja akan tidak berguna, karena CPU tidak akan bisa berkomunikasi dengan perangkat tersebut.


Sebuah sistem komputer yang terdiri dari banyak perangkat biasanya diorganisasikan dengan menggabungkan satu perangkat dengan perangkat lainnya ke satu atau lebih bus. Sebuah bus merupakan sebuah kumpulan kabel yang membawa berbagai macam informasi diantara perangkat-perangkat yang terhubung ke kabel-kabel tersebut. Kabel-kabel ini membawa data, alamat, dan sinyal kontrol. Sebuah alamat akan mengarahkan data ke perangkat tertentu dan kemungkinan ke sebuah register tertentu atau lokasi tertentu dari perangkat tersebut. Sinyal kontrol dapat digunakan , sebagai contoh, oleh sebuah perangkat untuk memberitahukan perangkat lain bahwa data telah tersedia di bus data untuk perangkatnya. Sebuah sistem komputer sederhana dapat di organisasikan sebagai berikut:

Diagram bus dengan perangkat yang terpasang


Saat ini, perangkat seperti keyboard, mouse, dan antarmuka jaringan dapat menghasilkan masukan yang perlu untuk diproses oleh CPU. Bagaiaman CPU mengetahui bahwa data telah ada? ? Salah satu gagasan sederhana, yang tidak memuaskan, adalah CPU tetap memeriksa data yang masuk secara berulang-ulang. Saat CPU menemukan data, ia memproses data tersebut. Metode ini disebut polling, dikarenakan CPU menjajaki perangkat masukan secara berkala untuk mencari tahu apakah perangkat memiliki masukan data untuk dilaporkan. Sayangnya, meskipun polling sangat sederhana, metode ini juga sangat tidak efisien. CPU dapat menghabiskan banyak waktu hanya untuk menunggu masukan.


Untuk menghindari ketidakefisienan ini, interupsi lebih sering digunakan sebagai pengganti polling. Interupsi merupakan sinyal yang dikirimkan oleh perangkat lain ke CPU. CPU merespon sinyal interrupt dengan mengesampingkan apapun yang dilakukannya untuk merespon interupsi tersebut. Setelah CPU telah menangani interupsi tersebut, CPU akan kembali ke hal yang dilakukannya sebelum interupsi terjadi. Sebagai contoh, saat kamu menekan tombol di keyboard komputer maka sebuah interupsi keyboard dikirimkan ke CPU. CPU akan merespon sinyal tersebut dengan menginterupsi yang sedang dilakukannya, membaca tombol yang kamu tekan, memprosesnya, dan kembali ke pekerjaan yang dilakukan CPU sebelum kamu menekan tombol tersebut.


Sekali lagi, kamu harus mengerti bahwa hal tersebut merupakan proses mekanis murni: Sebuah perangkat mensinyalkan interupsi hanya dengan mengaktifkan sebuah kabel. CPU dibangun sedemikian rupa sehingga saat kabel diaktifkan, CPU akan menyimpan informasi yang memadai tentang apa yang dikerjakannya saat ini sehingga ia dapat kembali ke keadaan yang sama nantinya. Informasi ini terdiri atas isi dari register internal yang penting seperti program counter. Kemudian CPU akan melompat ke lokasi memori tertentu yang telah ditentukan sebelumnya dan memulai mengeksekusi perintah yang tersimpan di sana. Intruksi- intruksi tersebut membentuk sebuah interrupt handler yang melakukan proses yang diperlukan dalam merespon interupsi. (Interrupt handler ini merupakan bagian dari perangkat lunak driver perangkat yang mensinyalkan interupsi.) Pada bagian akhir dari interrupt handler terdapat instruksi yang memerintahkan CPU untuk melompat kembali ke tugas yang sebelumnya dilakukan; Hal ini dilakukan dengan mengembalikan keadaan yang telah disimpan sebelumnya.


Interupsi memampukan CPU untuk mengatasi event asinkron. Dalam cycle ambil dan eksekusi reguler, berbagai hal terjadi dalam urutan yang telah ditentukan; semua yang terjadi "disinkronisasikan" dengan semua hal yang lainnya. Interupsi memungkinan CPU untuk mengatasi event yang terjadi "secara asinkron" dengan efisien, yakni yang terjadi dalam waktu yang tidak terprediksi.


Sebagai contoh lain bagaimana interupsi digunakan, pertimbangkan apa yang terjadi saat CPU memerlukan pengaksesan data yang disimpan di hard disk. CPU hanya dapat mengakses data secara langsung hanya jika data tersebut berada dalam memori utama. Data di disk harus disalin ke memori sebelum dapat diakses. Sayangnya, dalam skala kecepatan CPU beroperasi, disk drive sangatlah lambat. Ketika CPU memerlukan data dari disk, ia memberikan sinyal ke disk drive yang memerintahkannya untuk menentukan lokasi data dan mempersiapkannya. (Sinyal ini dikirim secara sinkron, di bawah kontrol dari program reguler.) Kemudian, daripada menunggu dalam waktu yang panjang dan tak terprediksi yang diperlukan disk drive untuk mengerjakan hal tersebut, CPU melanjutkan kerjanya yang lain. Ketika disk drive selesai mempersiapkan data, ia akan memberikan sinyal interupsi ke CPU. Interrupt handler kemudian dapat membaca data yang telah diminta.



Sekarang mungkin kamu telah memperhatikan bahwa kesemuanya tersebut masuk akal jika CPU sebenarnya memiliki beberapa tugas yang harus dikerjakan. Jika ia tidak memiliki hal lain yang lebih baik untuk dikerjakan, maka CPU mungkin akan menghabiskan waktunya melakukan polling terhadap masukan atau menunggu selesainya operasi disk drive. Semua komputer modern menggunakan metode multitasking untuk melakukan beberapa tugas bersamaan. Beberapa jenis komputer dapat digunakan oleh beberapa orang secara bersamaan. dikarenakan CPU sangatlah cepat, maka ia dapat memindahkan perhatiannya secara cepat dari satu pengguna ke pengguna lainnya dengan memberikan pecahan waktu untuk tiap pengguna sesuai gilirannya. Aplikasi dari multitasking ini disebut timesharing. Namun komputer personal modern dengan satu pengguna juga menggunakan multitasking. Sebagai contoh, pengguna dapat menulis paper sementara jam di komputer tetap menunjukkan waktu dan sebuah berkas sedang didownload dari jaringan.


Setiap tugas individual yang dilakukan CPU disebut sebagai thread. (Atau proses; ada perbedaan teknis antara thread dan proses, tetapi hal tersebut tidak penting disini, karena hanya thread yang digunakan di Java.) Banyak CPU secara harfiah dapat mengeksekusi lebih dari satu thread secara serentak -- CPU seperti ini memiliki banyak "inti", dimana setiap inti dapat menjalankan sebuah thread -- tetapi selalu ada batasan dari jumlah thread yang bisa dieksekusi dalam waktu yang sama. Karena sering sekali ada banyak thread yang dapat dieksekusi secara serentak, maka komputer harus mampu memindahkan perhatiannya dari satu thread ke thread lainnya, sama seperti komputer timesharing mengubah perhatiannya dari satu pengguna ke pengguna lainnya. Secara umum, thread yang sedang dieksekusi akan tetap berjalan sampai salah satu dari beberapa hal ini terjadi:

  • - Thread mungkin secara sukarela menyerahkan kontrolnya, untuk memberikan kesempatan untuk berjalan pada thread lainnya.
  • - Thread mungkin perlu menunggu beberapa event asinkron terjadi. Sebagai contoh, thread mungkin meminta beberapa data dari disk drive, atau ia mungkin menunggu pengguna menekan sebuah tombol. Sementara ia menunggu, thread akan diblok, dan thread lain, jika ada, membeli kesempatan untuk berjalan. Saat event yang ditunggu terjadi, interupsi akan "membangunkan" thread sehingga ia dapat meneruskan kegiatannya.
  • - Thread mungkin telah habis menggunakan potongan waktu yang diberikan dan ditunda kegiatannya untuk memberikan kesempatan thread lain berjalan. Tidak semua komputer dapat menunda "secara paksa" sebuah thread dengan cara tersebut; Komputer yang dapat melakukannya disebut menggunakan preemptive multitasking. Untuk melakukan preemptive multitasking, sebuah komputer memerlukan perangkat timer khusus yang menghasilkan sebuah interupsi secara berkala, misal 100 kali per detik. Ketika interupsi timer terjadi, CPU memiliki kesempatan untuk berpindah dari satu thread ke thread lainnya, tidak peduli apakah thread yang lagi bekerja menyukainya atau tidak. Semua komputer desktop dan laptop modern, dan bahkan smartphone dan tablet yang umum pun, menggunakan preemptive multitasking.

Pengguna biasa dan bahkan juga programmer biasa, tidak perlu berhubungan dengan interupsi dan interrupt handler. Mereka dapat berkonsentrasi pada tugas atau thread berbeda yang mereka ingin komputer lakukan; rincian akan bagaimana komputer melakukan semua tugas-tugas tersebut tidaklah penting untuk mereka. Bahkan kenyataannya, banyak pengguna, dan juga banyak programmer, dapat mengabaikan thread dan multitasking sama sekali. Tetapi, thread telah semakin menjadi penting dikarenakan komputer semakin canggih dan semakin memanfaatkan pengunaan multitasking dan multiproses. Dan kenyataannya, kemampuan untuk bekerja dengan thread menjadi hal yang esensial sebagai bagian dari kemampuan programmer. Untungnya, Java memiliki dukungan yang baik untuk thread, yang dibangun ke dalam bahasa pemrograman Java sebagai konsep pemrograman dasas. Pemrograman dengan thread akan dibahas di Bab 12.


Dasar konsep dari event asinkron secara umum sama pentingnya baik dalam Java dan pemrograman modern. Meskipun programmer kenyataannya tidak secara langsung berhadapan dengan interupsi, tetapi mereka sering mendapati bahwa mereka menulis event handlers, sama seperti interrupt handler yang dipanggil secara asinkron saat event tertentu terjadi. "Pemrograman berbasis event-driven" ini memiliki citarasa yang berbeda dari kebanyakan pemrograman sinkron tradisional. Kita akan memulai dengan jenis pemrograman tradisional, yang masih digunakan untuk memrogram tugas individual, tetapi kita akan kembali ke thread dan event nantinya, yang dimulai di Bab 6




Perangkat lunak yang melakukan penanganan semua interupsi, menangani komunikasi antar pengguna dan perangkat keras, dan mengontrol thread mana yang diperboleh untuk berjalan disebut Sistem Operasi. Sistem operasi merupakan perangkat lunak dasar dan penting yang tanpanya komputer tidak akan berfungsi. Program lainnya seperti pengolah kata dan penjelajah web, bergantung pada sistem operasi. Sistem operasi yang umumnya dikenal adalah Linux, beberapa versi Windows, dan Mac OS.


Sebelumnya: Cycle Ambil dan Eksekusi: Bahasa Mesin

0 comments:

Silahkan tinggalkan komentar anda: