os211

Operating Systems 2021 - 1

Home | Week1 | Week2 | Week3 | Week4 | Week5 | Week6 | Week7 | Week8 | Week9 | Week10 | Key | Rank | Log

Top 10 List of Week 07

1. Busy Waiting

Tulisan ini membahas process synchronization, tepatnya busy waiting. Busy waiting adalah ketika loop dieksekusi terus menerus untuk mengecek kondisi di critical section. Post ini sangat menarik karena banyak perumpamaan dan ilustrasi, meme, yang digunakan untuk menjelaskan konsep busy waiting tersebut.

2. Race Condition

Page ini berisi QNA mengenai Race Condition pada software secara umum. Topik-topik yang ada di dalamnya diantaranya:

3. Critical Section dalam Process Synchronization

Critical section adalah bagian kode dimana suatu process melakukan perubahan pada variabel, file, dan sebagainya. Critical section dapat dicapai setelah process melalui entry section, kemudian selesai dilakukan melalui exit. Entri diatur oleh wait() dan exit diatur oleh signal().

4. Peterson’s Solution for Critical Section Problem

Peterson’s Solution ini merupakan salah satu software solution yang sebenarnya tidak digunakan pada arsitektur modern. Cara ini membatasi pada dua process yang eksekusinya berselingan antara critical section dan remainder section. Data yang digunakan kedua process adalah sebuah variabel turn yang menandakan giliran untuk memasuki critical section dan boolean array flag[] yang menandakan apakah process siap masuk critical section.

5. Deadlock

Deadlock adalah kondisi ketika beberapa process masing-masing memegang resource dan saling ingin mengakses resource yang diokupasi process lainnya. Terdapat 4 kondisi yang mengakibatkan terjadinya deadlock (Coffman Condition) yaitu Mutual Exclusion, Hold and Wait, No Pre-emption dan Circular Wait.

6. Deadlock Handling

Cara menghandle deadlock yang paling umum adalah r e s t a r t. Selain itu, deadlock dapat dicegah dengan mendesain sistem yang tidak memungkinkan terjadinya deadlock, yaitu dengan mutual exclusion, hold and wait, active approach, timeout, circular wait, dan no pre-emption. Page pada poin Deadlock Prevention juga menjelaskan hal ini. Cara lain dalam menghandle deadlock adalah dengan menghindarinya (avoidance). Metodenya antara lain dengan Resource Allocation Graph dan Bankers’ Algorithm.

7. Deadlock Prevention

Untuk mencegah kondisi deadlock di atas, beberapa cara yang dilakukan antara lain dengan lock ordering, lock timeout, dan detection sebelum deadlock. Lock ordering dilakukan dengan menentukan urutan agar skenario dimana terjadi deadlock tidak terjadi. Lock timeout untuk menentukan bahwa suatu thread hanya dapat mencoba melakukan lock selama beberapa lama hingga berhenti untuk mencoba lock, namun cara ini tetap tidak bagus untuk banyak thread. Cara detection di sini menggunakan struktur data yang mencatat locks. Penjelasan (dalam bahasa Java) dapat dilihat juga dalam bentuk video di page ini.

8. Binary and Counting Semaphore

Semaphore adalah shared variable antar process dan digunakan untuk menentukan apakah suatu resource boleh diakses atau tidak dalam mengatasi masalah sinkronisasi process. Operasi yang dilakukan adalah wait() yang mengurangi nilai argumen (jika sebelumnya tidak 0) dan signal() yang menambah nilai argumen.

9. Mutex vs Semaphore

Mutex lock dan sempahore adalah beberapa solusi dalam mengatasi masalah critical section dalam process synchronization. Mutex adalah mekanisme meng-acquire dan me-release locks, sedangkan semaphore adalah mekanisme signalling untuk menandakan memungkinkan atau tidaknya akses ke critical section. Pada page ini digambarkan bahwa mutex locks adalah satu kunci untuk sebuah toilet yang dapat dipass antar pengguna yang selesai menggunakan toilet dengan yang lain. Sedangkan semaphore adalah bagaimana antar pengguna toilet menunggu dan mengisyaratkan dari beberapa toilet yang ada, toilet mana yang sedang digunakan maupun yang tidak.

10. Monitors

Monitor adalah cara melakukan process synchronization yang non-hardware selain mutex dan semaphore. Monitor ini merupakan Abstract Data Type yang mengenkapsulasi mutex yang memungkinkan hanya satu process dalam suatu waktu yang aktif.

Repo

Here is the Github Repo