MultiTasking & Multithreading
• Multitasking:
– Ada lebih dari satu program bekerja (seolah) pada waktu yang sama.
– SO menjatahkan CPU ke program-program berbeda dengan suatu cara untuk memberikan pengaruh dari concurrency.
--> konkurensi mengacu pada kemampuan bagian atau unit program, algoritma, atau masalah yang berbeda untuk dieksekusi out-of-order atau dalam urutan parsial, tanpa mempengaruhi hasil akhir. Hal ini memungkinkan untuk eksekusi paralel dari unit-unit konkuren, yang secara signifikan dapat meningkatkan kecepatan keseluruhan eksekusi dalam sistem multi-prosesor dan multi-core. Dalam istilah yang lebih teknis, konkurensi mengacu pada properti penguraian suatu program, algoritma, atau masalah ke dalam komponen atau unit yang dipesan sendiri atau dipesan sebagian.
– Ada dua jenis multitasking - preemptive dan cooperative.
Preemptive multitasking adalah tugas di mana sistem operasi komputer menggunakan beberapa kriteria untuk memutuskan berapa lama untuk dialokasikan ke salah satu tugas sebelum memberikan tugas lain giliran untuk menggunakan sistem operasi. Tindakan mengambil kendali sistem operasi dari satu tugas dan memberikannya ke tugas lain disebut preempting . Kriteria umum untuk preempting adalah waktu yang telah berlalu (sistem semacam ini kadang-kadang disebut pembagian waktu atau pemotongan waktu ). Dalam beberapa sistem operasi, beberapa aplikasi dapat diberikan prioritas lebih tinggi daripada aplikasi lain, memberikan kontrol program prioritas lebih tinggi segera setelah mereka dimulai dan mungkin irisan waktu yang lebih lama.
Multitasking kooperatif , juga dikenal sebagai multitasking non-preemptive , adalah gaya multitasking komputer di mana sistem operasi tidak pernah memulai perubahan konteks dari proses yang berjalan ke proses lain. Sebagai gantinya, proses secara sukarela menghasilkan kontrol secara berkala atau ketika idle atau secara logis diblokir untuk memungkinkan beberapa aplikasi dijalankan secara bersamaan. Jenis multitasking ini disebut "kooperatif" karena semua program harus bekerja sama agar skema penjadwalan berfungsi. Dalam skema ini, penjadwal proses suatu sistem operasi dikenal sebagai penjadwal kooperatif, memiliki perannya dikurangi untuk memulai proses dan membiarkan mereka mengembalikan kendali kembali ke proses itu secara sukarela
• Multithreading:
– Perluasan ide multitasking dengan membolehkan program mempunyai banyak task.
– Setiap task di dalam program dinamakan thread.
Teknik Concurrency Control
Ada dua teknik concurrency control utama yang mengijinkan transaksi untuk berjalan dengan aman dalam subjek paralel untuk constraint tertentu, yaitu locking dan metode timestamp tertentu. Locking dan timestamping adalah pendekatan konservatif karena mereka menyebabkan transaksi ditunda dalam kasus mereka konflik dengan transaksi lain pada beberapa waktu di masa yang akan datang. Metode optimistik, didasarkan pada premis bahwa konflik itu jarang ditemui, jadi mereka mengijinkan transaksi untuk lanjut tidak tersinkronisasi dan hanya mengecek konflik di bagian akhir, ketika transaksi melakukan operasi commit.
Metode Locking
Locking adalah sebuah prosedur yang digunakan untuk mengendalikan akses bersamaan ke data. Ketika sebuah transaksi sedang mengakses database, sebuah lock mungkin menolak akses ke transaksi lain untuk mencegah hasil yang salah (Connolly, 2005, p587 ). Ada dua macam lock, yaitu shared lock dan exclusive lock yang harus digunakan sebelum melakukan akses membaca ataupun menulis terhadap database. Penggunaan lock ini adalah untuk menjaga konsistensi data didalam database. Jika sebuah transaksi mempunyai sebuah shared lock pada sebuah item data, transaksi tersebut dapat membaca item tapi tidak dapat mengubah datanya ( Connolly, 2005, p588 ). Jika sebuah transaksi mempunyai sebuah exclusive lock pada sebuah item data, transaksi tersebut dapat membaca dan mengubah item data (Connolly, 2005, p588 ).
Lock digunakan dengan cara sebagai berikut:
Transaksi apapun yang membutuhkan akses pada sebuah item data harus melakukan lock terhadap item tersebut, meminta shared lock untuk akses membaca saja atau sebuah exclusive lock untuk akses membaca dan menulis.
Jika item belum dikunci oleh transaksi lain, lock tersebut akan dikabulkan
Jika item sedang dikunci, DBMS menentukan apakah permintaan ini compatible dengan lock saat ini.
Jika diminta shared lock pada sebuah item yang sudah mempunyai shared lock terpasang padanya, permintaan itu akan dikabulkan. Selain itu, transaksi harus menunggu sampai lock yang ada terlepas.
Sebuah transaksi lanjut memegang lock sampai transaksi tersebut melepasnya baik pada waktu eksekusi ataupun pada waktu transaksi tersebut berakhir (abort atau commit). Efek operasi tulis akan terlihat pada transaksi lain hanya pada waktu exclusive lock telah dilepas.
Two Phase Locking adalah sebuah transaksi yang mengikuti protokol two-phase locking jika semua operasi locking mendahului operasi unlock pertama pada transaksi (Connolly, 2005, p589 ).
Aturan-aturannya adalah sebagai berikut :
Sebuah transaksi harus mendapatkan sebuah lock pada item sebelum beroperasi pada item tersebut. Lock tersebut bisa berupa baca atau tulis, tergantung dari tipe akses yang dibutuhkan
Sebelum transaksi melepaskan sebuah lock, transaksi tersebut tidak akan pernah mendapatkan lock baru lainnya.
• Multitasking:
– Ada lebih dari satu program bekerja (seolah) pada waktu yang sama.
– SO menjatahkan CPU ke program-program berbeda dengan suatu cara untuk memberikan pengaruh dari concurrency.
--> konkurensi mengacu pada kemampuan bagian atau unit program, algoritma, atau masalah yang berbeda untuk dieksekusi out-of-order atau dalam urutan parsial, tanpa mempengaruhi hasil akhir. Hal ini memungkinkan untuk eksekusi paralel dari unit-unit konkuren, yang secara signifikan dapat meningkatkan kecepatan keseluruhan eksekusi dalam sistem multi-prosesor dan multi-core. Dalam istilah yang lebih teknis, konkurensi mengacu pada properti penguraian suatu program, algoritma, atau masalah ke dalam komponen atau unit yang dipesan sendiri atau dipesan sebagian.
– Ada dua jenis multitasking - preemptive dan cooperative.
Preemptive multitasking adalah tugas di mana sistem operasi komputer menggunakan beberapa kriteria untuk memutuskan berapa lama untuk dialokasikan ke salah satu tugas sebelum memberikan tugas lain giliran untuk menggunakan sistem operasi. Tindakan mengambil kendali sistem operasi dari satu tugas dan memberikannya ke tugas lain disebut preempting . Kriteria umum untuk preempting adalah waktu yang telah berlalu (sistem semacam ini kadang-kadang disebut pembagian waktu atau pemotongan waktu ). Dalam beberapa sistem operasi, beberapa aplikasi dapat diberikan prioritas lebih tinggi daripada aplikasi lain, memberikan kontrol program prioritas lebih tinggi segera setelah mereka dimulai dan mungkin irisan waktu yang lebih lama.
Multitasking kooperatif , juga dikenal sebagai multitasking non-preemptive , adalah gaya multitasking komputer di mana sistem operasi tidak pernah memulai perubahan konteks dari proses yang berjalan ke proses lain. Sebagai gantinya, proses secara sukarela menghasilkan kontrol secara berkala atau ketika idle atau secara logis diblokir untuk memungkinkan beberapa aplikasi dijalankan secara bersamaan. Jenis multitasking ini disebut "kooperatif" karena semua program harus bekerja sama agar skema penjadwalan berfungsi. Dalam skema ini, penjadwal proses suatu sistem operasi dikenal sebagai penjadwal kooperatif, memiliki perannya dikurangi untuk memulai proses dan membiarkan mereka mengembalikan kendali kembali ke proses itu secara sukarela
• Multithreading:
– Perluasan ide multitasking dengan membolehkan program mempunyai banyak task.
– Setiap task di dalam program dinamakan thread.
Teknik Concurrency Control
Ada dua teknik concurrency control utama yang mengijinkan transaksi untuk berjalan dengan aman dalam subjek paralel untuk constraint tertentu, yaitu locking dan metode timestamp tertentu. Locking dan timestamping adalah pendekatan konservatif karena mereka menyebabkan transaksi ditunda dalam kasus mereka konflik dengan transaksi lain pada beberapa waktu di masa yang akan datang. Metode optimistik, didasarkan pada premis bahwa konflik itu jarang ditemui, jadi mereka mengijinkan transaksi untuk lanjut tidak tersinkronisasi dan hanya mengecek konflik di bagian akhir, ketika transaksi melakukan operasi commit.
Metode Locking
Locking adalah sebuah prosedur yang digunakan untuk mengendalikan akses bersamaan ke data. Ketika sebuah transaksi sedang mengakses database, sebuah lock mungkin menolak akses ke transaksi lain untuk mencegah hasil yang salah (Connolly, 2005, p587 ). Ada dua macam lock, yaitu shared lock dan exclusive lock yang harus digunakan sebelum melakukan akses membaca ataupun menulis terhadap database. Penggunaan lock ini adalah untuk menjaga konsistensi data didalam database. Jika sebuah transaksi mempunyai sebuah shared lock pada sebuah item data, transaksi tersebut dapat membaca item tapi tidak dapat mengubah datanya ( Connolly, 2005, p588 ). Jika sebuah transaksi mempunyai sebuah exclusive lock pada sebuah item data, transaksi tersebut dapat membaca dan mengubah item data (Connolly, 2005, p588 ).
Lock digunakan dengan cara sebagai berikut:
Transaksi apapun yang membutuhkan akses pada sebuah item data harus melakukan lock terhadap item tersebut, meminta shared lock untuk akses membaca saja atau sebuah exclusive lock untuk akses membaca dan menulis.
Jika item belum dikunci oleh transaksi lain, lock tersebut akan dikabulkan
Jika item sedang dikunci, DBMS menentukan apakah permintaan ini compatible dengan lock saat ini.
Jika diminta shared lock pada sebuah item yang sudah mempunyai shared lock terpasang padanya, permintaan itu akan dikabulkan. Selain itu, transaksi harus menunggu sampai lock yang ada terlepas.
Sebuah transaksi lanjut memegang lock sampai transaksi tersebut melepasnya baik pada waktu eksekusi ataupun pada waktu transaksi tersebut berakhir (abort atau commit). Efek operasi tulis akan terlihat pada transaksi lain hanya pada waktu exclusive lock telah dilepas.
Two Phase Locking adalah sebuah transaksi yang mengikuti protokol two-phase locking jika semua operasi locking mendahului operasi unlock pertama pada transaksi (Connolly, 2005, p589 ).
Aturan-aturannya adalah sebagai berikut :
Sebuah transaksi harus mendapatkan sebuah lock pada item sebelum beroperasi pada item tersebut. Lock tersebut bisa berupa baca atau tulis, tergantung dari tipe akses yang dibutuhkan
Sebelum transaksi melepaskan sebuah lock, transaksi tersebut tidak akan pernah mendapatkan lock baru lainnya.
Deadlock
Deadlock adalah jalan buntu yang dapat terjadi ketika dua atau lebih transaksi masing-masing menunggu lock yang sedang dipegang oleh transaksi lainnya untuk dilepas.
• Deadlock adalah error yang dapat diselesaikan dengan multithread.
• Terjadi saat dua atau lebih thread saling menunggu selama tak terbatas untuk melepaskan kunci.
• Misal: thread-1 memegang kunci object-1 dan menunggu kunci dari object-2. Thread-2 memegang kunci object-2 dan menunggu kunci dari object-1.
• Tidak satu pun thread (ini) dapat diproses. Masing-masing selalu menunggu yang lain untuk melepaskan kunci yang dibutuhkannya
Hanya ada satu cara untuk menghancurkan deadlock, yaitu abort satu atau lebih transaksi. Ada tiga cara untuk menangani deadlock, yaitu timeout, deadlock prevention dan deadlock detection and recovery.
Timeout
Pendekatan sederhana pada pencegahan deadlock adalah berdasarkan lock timeout. Dengan pendekatan ini, sebuah transaksi yang meminta sebuah lock akan menunggu hanya sampai periode waktu tertentu yang didefinisikan sistem.
Deadlock Prevention
Pendekatan lain untuk mencegah deadlock adalah untuk memesan transaksi menggunakan timestamp transaksi. Dua algoritma telah ditemukan oleh Rosenkrantz. Algoritma pertama, Wait-Die, mengijinkan hanya transaksi yang lebih tua untuk menunggu yang lebih muda, jika tidak transaksi dibatalkan (die/mati) dan restart dengan timestamp yang sama, sehingga lama kelamaan transaksi tersebut akan menjadi transaksi aktif tertua dan tidak akan mati. Algoritma kedua, Wound-wait, menggunakan pendekatan simetrikal. Hanya transaksi yang lebih muda yang dapat menunggu untuk yang lebih tua. Jika transaksi yang lebih tua meminta lock yang dipegang oleh transaksi yang lebih muda, transaksi yang lebih muda digagalkan.
Deadlock Detection
Deadlock detection biasanya ditangani oleh konstruksi wait-for graph (WFG) yang menunjukkan ketergantungan transaksi, yaitu transaksi Ti tergantung pada Tj jika transaksi Tj memegang lock pada sebuah item data yang ditunggu oleh Ti.
WFG adalah sebuah directed graph G = (N, E ) yang terdiri dari satu set node N dan satu set directed edge E, yang dikonstruksi sebagai berikut
Buat sebuah node untuk setiap transaksi.
Buat sebuah directed edge Ti → Tj , jika transaksi Ti menunggu untuk melakukan lock sebuah item yang sedang di-lock oleh Tj.
Deadlock terjadi jika dan hanya jika WFG mengandung sebuah cycle. Gambar di atas menunjukkan WFG yang menunjukkan deadlock antara dua transaksi.
Referensi :
Connolly T dan Begg C. (2005). Database Systems: A Practical Approach in Design, Implementation, and Management. Fourth Edition. Addison Wesley. Longman Inc., USA.
Deadlock adalah jalan buntu yang dapat terjadi ketika dua atau lebih transaksi masing-masing menunggu lock yang sedang dipegang oleh transaksi lainnya untuk dilepas.
• Deadlock adalah error yang dapat diselesaikan dengan multithread.
• Terjadi saat dua atau lebih thread saling menunggu selama tak terbatas untuk melepaskan kunci.
• Misal: thread-1 memegang kunci object-1 dan menunggu kunci dari object-2. Thread-2 memegang kunci object-2 dan menunggu kunci dari object-1.
• Tidak satu pun thread (ini) dapat diproses. Masing-masing selalu menunggu yang lain untuk melepaskan kunci yang dibutuhkannya
Hanya ada satu cara untuk menghancurkan deadlock, yaitu abort satu atau lebih transaksi. Ada tiga cara untuk menangani deadlock, yaitu timeout, deadlock prevention dan deadlock detection and recovery.
Timeout
Pendekatan sederhana pada pencegahan deadlock adalah berdasarkan lock timeout. Dengan pendekatan ini, sebuah transaksi yang meminta sebuah lock akan menunggu hanya sampai periode waktu tertentu yang didefinisikan sistem.
Deadlock Prevention
Pendekatan lain untuk mencegah deadlock adalah untuk memesan transaksi menggunakan timestamp transaksi. Dua algoritma telah ditemukan oleh Rosenkrantz. Algoritma pertama, Wait-Die, mengijinkan hanya transaksi yang lebih tua untuk menunggu yang lebih muda, jika tidak transaksi dibatalkan (die/mati) dan restart dengan timestamp yang sama, sehingga lama kelamaan transaksi tersebut akan menjadi transaksi aktif tertua dan tidak akan mati. Algoritma kedua, Wound-wait, menggunakan pendekatan simetrikal. Hanya transaksi yang lebih muda yang dapat menunggu untuk yang lebih tua. Jika transaksi yang lebih tua meminta lock yang dipegang oleh transaksi yang lebih muda, transaksi yang lebih muda digagalkan.
Deadlock Detection
Deadlock detection biasanya ditangani oleh konstruksi wait-for graph (WFG) yang menunjukkan ketergantungan transaksi, yaitu transaksi Ti tergantung pada Tj jika transaksi Tj memegang lock pada sebuah item data yang ditunggu oleh Ti.
WFG adalah sebuah directed graph G = (N, E ) yang terdiri dari satu set node N dan satu set directed edge E, yang dikonstruksi sebagai berikut
Buat sebuah node untuk setiap transaksi.
Buat sebuah directed edge Ti → Tj , jika transaksi Ti menunggu untuk melakukan lock sebuah item yang sedang di-lock oleh Tj.
Deadlock terjadi jika dan hanya jika WFG mengandung sebuah cycle. Gambar di atas menunjukkan WFG yang menunjukkan deadlock antara dua transaksi.
Referensi :
Connolly T dan Begg C. (2005). Database Systems: A Practical Approach in Design, Implementation, and Management. Fourth Edition. Addison Wesley. Longman Inc., USA.
_________________________________
Superscalar versus Superpipelined
Alternative Computer Organizations
Multiprogramming and Multiprocessing
Parallel and Pipelined ALU
Multicore
Multiprocessor
Tidak ada komentar:
Posting Komentar