Pengertian Sinkronisasi dan Proses Pada Sistem Operasi - Dalam ilmu komputer, sinkronisasi mengacu pada salah satu dari dua proses yang berbeda tetapi terkait: sinkronisasi proses, dan sinkronisasi data. Sinkronisasi proses mengacu pada gagasan bahwa banyak proses yang nantinya, pada titik tertentu, akan bergabung atau berjabat tangan, dalam rangka untuk mencapai kesepakatan atau komitmen untuk suatu urutan tindakan tertentu. Sinkronisasi data mengacu pada gagasan menjaga beberapa salinan dari dataset dalam koherensi dengan satu sama lain, atau untuk menjaga integritas data. Proses sinkronisasi primitif biasanya digunakan untuk mengimplementasikan sinkronisasi data dan proses ini dilakukan oleh fungsi lain diluar sistem utama dari sistem operasi.
Thread atau Proses sinkronisasi
Thread sinkronisasi atau serialisasi adalah penerapan mekanisme tertentu untuk memastikan bahwa dua thread atau proses yang berjalan secara bersamaan tidak mengeksekusi bagian yang sama dari sebuah program pada saat yang sama, hal ini disebut mutual exclusion. Jika satu thread telah mulai mengerjakan bagian dari sebuah program secara serial, yang disebut critical section, maka setiap thread lain yang mencoba untuk mengeksekusi bagian yang sama ini harus menunggu sampai thread pertama selesai. Jika langkah-langkah sinkronisasi tersebut tidak diambil, dapat mengakibatkan kondisi ‘perlombaan’ di mana nilai-nilai variabel menjadi tidak tidak terduga dan tergantung pada timing dari thread atau proses konteks switch.
Selain menyediakan mutual exclusion, sinkronisasi juga harus waspada terhadap hal-hal berikut:
Sinkronisasi digunakan untuk mengontrol akses untuk menentukan tahapan baik dalam sistem multiprocessing skala kecil seperti dalam lingkungan multithreaded ataupun dalam komputer multiprosesor, dan dalam komputer terdistribusi yang terdiri dari ribuan unit komputer - di bidang perbankan dan sistem database, di server web, dan sebagainya.
Critical Section
Apa itu Critical Section?
Dalam pemrograman konkuren, bagian kritis (Critical Section) adalah bagian dari kode yang mengakses ‘shared resource’ baik berupa struktur data atau perangkat yang tidak boleh bersamaan diakses oleh lebih dari satu thread eksekusi. ‘Critical section’ biasanya akan berhenti dalam waktu yang tetap, dan thread, task, atau proses akan harus menunggu untuk waktu yang tetap pula untuk memasuk kedalam critical section (alias bounded waiting). Beberapa mekanisme sinkronisasi diperlukan pada ‘entry’ dan ‘exit’ dari critical section untuk memastikan penggunaan eksklusif, misalnya semaphore.
Dengan pengontrolan yang hati-hati pada variabel yang dimodifikasi baik di dalam dan di luar critical section, akses bersamaan ke suatu tahapan dapat dicegah. Critical Section biasanya digunakan ketika sebuah program multithreaded harus merubah beberapa variabel yang terkait tanpa membuat konfilik dengan thread terpisah lain. Dalam situasi terkait, bagian kritis dapat digunakan untuk memastikan shared resource, misalnya printer, hanya dapat diakses oleh satu proses pada suatu waktu.
Seberapa kritis bagian diimplementasikan bervariasi antara sistem operasi.
Metode yang paling sederhana adalah untuk mencegah perubahan pengendalian prosesor di dalam critical section. Pada sistem uni-prosesor, hal ini dapat dilakukan dengan menonaktifkan interupsi untuk masuk ke critical section, menghindari system call yang dapat menyebabkan context switch sementara sebuah program sedang berada di dalam critical section, dan memulihkan interupsi ke kondisi sebelumnya pada saat keluar dari critical section. Setiap thread eksekusi yang memasuki setiap critical section akan, pada implementasi ini, mencegah thread lain, termasuk interupsi, untuk diberikan waktu proses CPU atau medapatkan critical section hingga program atau thread yang ada di critical section selesai dieksekusi. Hal ini disebut Brute-Force.
Pendekatan brute force ini dapat diperbaiki dengan menggunakan Semaphore. Untuk memasuk ke dalam critical section, thread harus memperoleh semaphore, yang rilis pada saat meninggalkan critical section. thread lain dicegah dari memasuki critical section pada saat yang sama dengan thread tersebut, tetapi bebas untuk mendapatkan kontrol dari CPU dan mengeksekusi kode lain, termasuk bagian penting lainnya yang dilindungi oleh Semaphore yang berbeda.
Beberapa kebingungan ada di literatur tentang hubungan antara critical section yang berbeda dalam program yang sama. Sangat jelas bahwa sebuah sumber daya yang harus dilindungi dari akses bersamaan harus dapat diakses oleh beberapa entry point dalam kode. Jika sebuah sumber daya hanya dapat diakses melalui entry point tunggal, maka proses multithreaded tidak akan menjadi pertimbangan yang diperlukan. Setiap sumber daya harus dijaga oleh sebuah "global" semaphore untuk semua. Apakah setiap bagian sekarang menjadi bagian kritis, atau semua bagian dijaga oleh semaphore yang sama secara agregat bagian kritis tunggal? Kebingungan ini jelas dalam definisi bagian kritis seperti "... sepotong kode yang hanya dapat dilakukan oleh satu proses atau thread pada satu waktu
Kernel level critical sections
Biasanya, critical section mencegah migrasi proses dan thread antara prosesor dan preemption terhadap proses-proses dan thread-thread oleh interupsi dan proses/thread lainnya.
Critical section sering mengizinkan ‘nesting’. ‘Nesting’ memungkinkan beberapa critical section yang dimasuki dan ditinggalkan dengan sedikit proses tambahan.
Ketika scheduler meng-interupt proses atau thread yang sedang berjalan di critical section, maka scheduler akan membiarkan proses atau thread yang sedang berjalankan menyelesaian critical section proses tersebut, atau akan menjadwalkan proses atau thread yang datang untuk mendapatkan kuantum lengkap di lain waktu. Scheduler tidak akan memigrasi proses atau thread ke prosesor lain, dan tidak akan juga menjadwalkan proses atau thread lain untuk mengambil-alih sementara proses atau thread yang saat ini berjalan di critical section.
Demikian pula, jika interupsi terjadi ketika sebuah critical section berjalan, informasi interupsi ini dicatat untuk proses selanjutnya, dan eksekusi dikembalikan ke proses atau thread di critical section. Setelah critical section diselesaikan, dan dalam beberapa kasus kuantum yang dijadwalkan selesai, interrupt yang tertunda akan dieksekusi. Konsep penjadwalan kuantum ini berlaku untuk "Round Robin" dan algorithma penjadwalan serupa.
Karena bagian kritis dapat terjadi hanya pada prosesor yang dipergunakan, maka sinkronisasi hanya diperlukan dalam prosesor tersebut. Hal ini memungkinkan critical section dikerjakan tanpa terasa. Dan tidak perlu ada sinkronisasi interprocessor, hanya sinkronisasi stream program (perintah). Kebanyakan CPU multi-prosesor memberikan kesempatan yang baik untuk proses interupsi dijalankan terhadap proses yang sedang berjalan sehingga penanganan critical section menjadi tidak terasa.
Melaksanakan interupsi dan scheduler yang tertunda di setiap pintu keluar dari semua critical section merupakan bagian dari proses peningkatan kinerja (performance enhancements). Selain itu, interupsi juga dapat dikirim ke prosesor lain untuk eksekusi.
Critical section tidak boleh digunakan sebagai penguncian primitif yang panjang. Critical section seharusnya cukup singkat sehingga ketika critical section akan dimasukkan, dieksekusi, dan keluar tanpa sempat terjadi interupsi, bahkan dari shceduler hardware.
Kernel level critical section adalah bagian dasar dari proses lockout software.
Semaphore
Dalam ilmu komputer, khususnya di sistem operasi, semaphore adalah sebuag variabel atau tipe data abstrak yang digunakan untuk mengendalikan akses, oleh beberapa proses, ke sumber daya umum dalam pemrograman paralel atau lingkungan multi user.
Sebuah cara mudah untuk membayangkan semaphore adalah sebuah catatan terhadap berapa banyak unit sumber daya tertentu yang tersedia, digabungkan dengan suatu operasi untuk mendapatkan catatan berapa banyak unit yang dibutuhkan dan berapa banyak unit yang tersedia. atau menjadi bebas, dan, jika perlu , tunggu sampai unit sumber daya tersebut tersedia. Semaphore adalah alat yang berguna dalam pencegahan kondisi perebutan sumber daya; Namun, penggunaannya tidak berarti menjaminan bahwa program bebas dari masalah ini. Semaphore yang digunakan untuk menghitung sumber daya yang ada disebut Counting Semaphore, sedangkan Semaphore yang dibatasi dengan nilai-nilai 0 dan 1 (atau terkunci / dibuka, tidak tersedia / tersedia) disebut Binary Semaphore.
Misalkan perpustakaan memiliki 10 ruang belajar identik, yang akan digunakan oleh salah satu mahasiswa pada suatu waktu. Untuk mencegah perselisihan, siswa harus meminta ruang dari meja depan jika mereka ingin memanfaatkan ruang belajar. Jika tidak ada ruang bebas, siswa menunggu di meja sampai seseorang selesai menggunakan ruangan. Ketika seorang siswa telah selesai menggunakan sebuah ruangan, mahasiswa harus kembali ke meja dan menunjukkan bahwa satu ruangan telah menjadi bebas.
Petugas di meja depan tidak melacak kamar yang ditempati atau siapa yang menggunakannya, juga tidak dia tahu jika ruangan yang benar-benar digunakan, hanya jumlah kamar kosong yang tersedia yang ia tahu jika semua siswa benar-benar menggunakan kamar mereka dan mengembalikan kunci ketika mereka selesai. Ketika seorang siswa meminta ruang, petugas akan mengurangi nomor ini. Ketika seorang siswa melepaskan ruang, petugas meningkatkan nomor ini. Setelah akses ke ruang diberikan, ruangan dapat digunakan selama yang diinginkan, dan tidak diperbolehkan untuk memesan kamar sebelumn kamarnya kosong.
Dalam skenario ini hitungan meja depan mewakili semaphore, kamar adalah sumber daya, dan siswa mewakili proses. Nilai dari semaphore dalam skenario ini adalah awalnya 10. Ketika seorang siswa meminta ruang dia diberikan akses dan nilai semaphore diubah menjadi 9. Setelah siswa berikutnya datang, itu turun menjadi 8, kemudian 7 dan seterusnya. Jika seseorang meminta ruang dan nilai yang dihasilkan dari semaphore akan negatif, mereka dipaksa untuk menunggu sampai sebuah ruangan dibebaskan (dan menghitung meningkat dari 0).
Bentuk semafor paling sederhana adalah "semafor biner", digunakan untuk mengendalikan akses kepada satu resource, atau disebut juga Mutual Exclusion. Sebuah semafor biner selalu diinisialisasi dengan nilai 1. Ketika resource sedang digunakan, thread yang menggunakan akan mengurangi nilai ini menjadi 0, dan setelah selesai, menginkrementasi kembali nilainya menjadi 1 untuk menandakan resource yang sekarang bebas.
Konkurensi
Dalam ilmu komputer, concurrency adalah properti sistem di mana beberapa komputasi dijalankan secara bersamaan, dan berpotensi berinteraksi satu sama lain. komputasi dapat dijalankan pada beberapa core dalam chip prosesor yang sama, beberapa thread di-preemptive berdasarkan waktu pada prosesor yang sama, atau sebuah komputasi dieksekusi pada prosesor terpisah secara fisik.
Karena komputasi dalam sistem konkurensi dapat berinteraksi satu sama lain ketika mereka dieksekusi, jumlah kemungkinan jalur eksekusi dalam sistem bisa menjadi sangat besar, dan hasil yang dihasilkan bisa tak tentu. Konkurensi juga menggunakan ‘shared’ sumber daya secara bersama dapat menjadi sumber ketidakpastian yang mengarah ke isu-isu seperti kebuntuan (deadlock) dan kelaparan (starvation).
Desain sistem konkuren sering memerlukan penemuan teknik yang dapat diandalkan untuk mengkoordinasikan eksekusi mereka, pertukaran data, alokasi memori, dan penjadwalan eksekusi untuk meminimalkan waktu respon dan memaksimalkan
Mutual Exclusion
Di sistem computer, terdapat sumber daya yang tidak dapat dipakai bersama pada saat bersamaan seperti printer. Sumber daya ini hanya dapat digunakan oleh satu proses pada satu waktu. Sumber daya semacam ini disebut sumber daya kritis. Bagian program yang menggunakan sumber daya kritis disebut sedang memasukin critical section. Dengan demikian, hanya satu program pada satu waktu yang diijinkan masuk critical section. Pemrogram tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan batasan ini karena maksud program tidak dapat diketahui oleh sistem operasi.
Dengan kata lain, mutual exclusion adalah keperluan untuk memastikan bahwa tidak ada dua concurrent proses/program yang berada pada critical section yang sama disaat yang bersamaan. Hal ini merupakan kebutuhan mendasar dalam mengontrol konkurensi agar tidak terjadi kondisi balapan atau saling tindih.
Sistem operasi memberikan fasilitas untuk pemrogram dapat memberikan indikasi keberadaan critical section. Sistem operasi menyediakan layanan (berupa system call) untuk men-cegah proses memasuki critical section yang sedang dimasuki oleh proses lain. Pemrogram harus menspesifikasikan bagian-bagian critical section sehingga sistem operasi akan menjaganya dengan suatu mekanisme tertentu untuk men-cegah proses lain masuk critical section yang sedang dipakai proses lain.
Pemaksaan adalanya mutual exclusion dapat menimbulkan dua masalah, yaitu:
DeadLock
Sebuah deadlock adalah situasi di mana dua atau lebih komputasi saling bersaing dan masing-masing menunggu yang lain untuk menyelesaikan komputasi tersebut, dan karena hal ini komputasi-komputasi tersebut tidak pernah terselesaikan.
Dalam sebuah database transaksional, kebuntuan terjadi ketika dua proses masing-masing menjalankan transaksi update dua baris informasi tetapi dalam urutan yang terbalik. Misalnya, proses A update baris 1 kemudian baris 2 dalam rentang waktu yang tepat sama yang memproses B update baris 2 kemudian baris 1. Proses A tidak bisa menyelesaikan update baris 2 sampai proses B selesai, namun proses B tidak bisa menyelesaikan update baris 1 sampai proses A selesai. Tidak peduli berapa banyak waktu yang diizinkan masuk, situasi ini tidak akan menyelesaikan proses-proses tersebut dan karena hal ini database management system akan biasanya membunuh/memberhentikan transaksi-transaksi tersebut.
Dalam sebuah sistem operasi, deadlock adalah situasi yang terjadi ketika proses atau thread memasuki keadaan menunggu karena sumber daya yang diminta sedang dipegang oleh proses lain yang juga sedang menunggu, yang pada gilirannya menunggu sumber daya lain. Jika proses tidak dapat mengubah status menunggu tersebut tanpa batas karena sumber daya yang diminta sedang digunakan oleh proses lain yang juga sedang menunggu, maka sistem dikatakan berada dalam keadaan deadlock.
Deadlock adalah masalah umum dalam sistem multiprocessing, komputasi paralel dan sistem terdistribusi, di mana penguncian oleh perangkat lunak dan perangkat keras digunakan untuk menangani sumber daya bersama dan juga merupakan implementasi prose sinkronisasi.
Sebenarnya deadlock dapat disebabkan oleh empat hal yaitu:
Penanganan deadlock deadlock:
Apabila pada sebuah sistem tidak tersedia pencegahan ataupun penghindaran deadlock,kemungkinan besar deadlock dapat terjadi. Pada keadaan seperti ini, sistem harus menyediakan dan algoritma pendeteksian deadlock algoritma pemulihan deadlock.
Starvation
Dalam ilmu komputer, Starvation (kelaparan) merupakan masalah yang dihadapi dalam multitasking di mana suatu proses terus-menerus ditolak sumber daya yang diperlukan. Tanpa sumber daya, program ini tidak pernah bisa menyelesaikan tugasnya. Starvation sering disebabkan oleh kesalahan dalam algoritma penjadwalan, tetapi juga dapat disebabkan oleh kebocoran sumber daya, dan dapat sengaja disebabkan melalui serangan denial-of-service seperti fork( ) bom.
Starvation biasanya disebabkan oleh sebuah algoritma penjadwalan terlalu sederhana. Sebagai contoh, jika (dirancang tidak dengan baik) sistem multi-tasking selalu melakukan switching di antara dua task/thread/proses pertama sementara yang ketiga tidak pernah mendapat jatah untuk dijalankan, maka task/thread/proses ketiga kehilangan jatah (starving/kelaparan) waktu CPU. Algoritma penjadwalan, yang merupakan bagian dari kernel, seharusnya mengalokasikan sumber daya secara adil; yaitu, algoritma harus mengalokasikan sumber daya sehingga tidak ada proses terus-menerus kekurangan sumber daya yang diperlukan.
Banyak penjadwal sistem operasi menggunakan konsep prioritas proses. Sebuah proses prioritas tinggi A akan dijalankan sebelum proses prioritas rendah B. Jika proses prioritas tinggi (proses A) tidak pernah blok, proses prioritas rendah (B) akan (di beberapa sistem) tidak pernah dijadwalkan - itu akan mengalami kelaparan. Jika ada proses yang lebih tinggi prioritasnya (proses X), yang tergantung pada hasil dari proses B, maka proses X mungkin tidak akan pernah selesai, meskipun itu adalah proses yang paling penting dalam sistem. Kondisi ini disebut inversi prioritas. Algoritma penjadwalan yang modern biasanya berisi kode untuk menjamin bahwa semua proses akan menerima jumlah minimum setiap sumber daya penting (paling sering waktu CPU) untuk mencegah proses apapun dari menjadi sasaran starvation.
Dalam jaringan komputer, terutama jaringan wireless, algoritma penjadwalan mungkin menderita dari penjadwalan starvation. Contohnya adalah penjadwalan throughput maksimum.
Starvation mirip dengan kebuntuan dalam hal itu menyebabkan proses freeze. Dua atau lebih proses menjadi buntu ketika masing-masing dari mereka tidak dapat melakukan apa-apa ketika menunggu sumber daya diduduki oleh program lain di set yang sama. Di sisi lain, proses adalah mengalami starvation ketika menunggu sumber daya yang hanya terus diberikan kepada proses lainnya.
Sebuah solusi starvation adalah dengan menggunakan algoritma penjadwalan dengan prioritas antrian yang juga menggunakan teknik aging. Aging adalah teknik secara bertahap meningkatkan prioritas proses yang menunggu dalam sistem untuk waktu yang lama
Daftar Pustaka
Thread atau Proses sinkronisasi
Thread sinkronisasi atau serialisasi adalah penerapan mekanisme tertentu untuk memastikan bahwa dua thread atau proses yang berjalan secara bersamaan tidak mengeksekusi bagian yang sama dari sebuah program pada saat yang sama, hal ini disebut mutual exclusion. Jika satu thread telah mulai mengerjakan bagian dari sebuah program secara serial, yang disebut critical section, maka setiap thread lain yang mencoba untuk mengeksekusi bagian yang sama ini harus menunggu sampai thread pertama selesai. Jika langkah-langkah sinkronisasi tersebut tidak diambil, dapat mengakibatkan kondisi ‘perlombaan’ di mana nilai-nilai variabel menjadi tidak tidak terduga dan tergantung pada timing dari thread atau proses konteks switch.
Selain menyediakan mutual exclusion, sinkronisasi juga harus waspada terhadap hal-hal berikut:
- Deadlock: Hal ini terjadi ketika dua atau lebih proses atau thread menunggu program yang terkunci untuk memasuki critical section, dimana program tersebut dipegang oleh proses lain. Hal ini menyebabkan proses-proses yang menunggu tersebut menunggu tanpa batas dan proses-proses tersebut tidak mendapatkan kemajuan lebih lanjut.
- Starvation: Dalam beberapa kasus, proses atau thread bisa memiliki waktu tunggu tak terbatas untuk memperoleh giliran pada program yang terkunci dan tidak pernah membuat kemajuan apapun.
- Priority inversion: Dalam sistem yang memiliki fasilitas memberikan prioritas untuk proses dan thread, tugas dengan prioritas menengah dapat mendahului tugas prioritas yang lebih tinggi ketika menggunakan sinkronisasi sehingga melanggar aturan sistem. Hal ini terjadi, terutama pada sistem real time yang dapat menyebabkan tenggat waktu terlewat.
Sinkronisasi digunakan untuk mengontrol akses untuk menentukan tahapan baik dalam sistem multiprocessing skala kecil seperti dalam lingkungan multithreaded ataupun dalam komputer multiprosesor, dan dalam komputer terdistribusi yang terdiri dari ribuan unit komputer - di bidang perbankan dan sistem database, di server web, dan sebagainya.
image source: |
baca juga: Algoritma Penjadwalan CPU Preemptive Beserta Contoh
Critical Section
Apa itu Critical Section?
Dalam pemrograman konkuren, bagian kritis (Critical Section) adalah bagian dari kode yang mengakses ‘shared resource’ baik berupa struktur data atau perangkat yang tidak boleh bersamaan diakses oleh lebih dari satu thread eksekusi. ‘Critical section’ biasanya akan berhenti dalam waktu yang tetap, dan thread, task, atau proses akan harus menunggu untuk waktu yang tetap pula untuk memasuk kedalam critical section (alias bounded waiting). Beberapa mekanisme sinkronisasi diperlukan pada ‘entry’ dan ‘exit’ dari critical section untuk memastikan penggunaan eksklusif, misalnya semaphore.
Dengan pengontrolan yang hati-hati pada variabel yang dimodifikasi baik di dalam dan di luar critical section, akses bersamaan ke suatu tahapan dapat dicegah. Critical Section biasanya digunakan ketika sebuah program multithreaded harus merubah beberapa variabel yang terkait tanpa membuat konfilik dengan thread terpisah lain. Dalam situasi terkait, bagian kritis dapat digunakan untuk memastikan shared resource, misalnya printer, hanya dapat diakses oleh satu proses pada suatu waktu.
Seberapa kritis bagian diimplementasikan bervariasi antara sistem operasi.
Metode yang paling sederhana adalah untuk mencegah perubahan pengendalian prosesor di dalam critical section. Pada sistem uni-prosesor, hal ini dapat dilakukan dengan menonaktifkan interupsi untuk masuk ke critical section, menghindari system call yang dapat menyebabkan context switch sementara sebuah program sedang berada di dalam critical section, dan memulihkan interupsi ke kondisi sebelumnya pada saat keluar dari critical section. Setiap thread eksekusi yang memasuki setiap critical section akan, pada implementasi ini, mencegah thread lain, termasuk interupsi, untuk diberikan waktu proses CPU atau medapatkan critical section hingga program atau thread yang ada di critical section selesai dieksekusi. Hal ini disebut Brute-Force.
Pendekatan brute force ini dapat diperbaiki dengan menggunakan Semaphore. Untuk memasuk ke dalam critical section, thread harus memperoleh semaphore, yang rilis pada saat meninggalkan critical section. thread lain dicegah dari memasuki critical section pada saat yang sama dengan thread tersebut, tetapi bebas untuk mendapatkan kontrol dari CPU dan mengeksekusi kode lain, termasuk bagian penting lainnya yang dilindungi oleh Semaphore yang berbeda.
Beberapa kebingungan ada di literatur tentang hubungan antara critical section yang berbeda dalam program yang sama. Sangat jelas bahwa sebuah sumber daya yang harus dilindungi dari akses bersamaan harus dapat diakses oleh beberapa entry point dalam kode. Jika sebuah sumber daya hanya dapat diakses melalui entry point tunggal, maka proses multithreaded tidak akan menjadi pertimbangan yang diperlukan. Setiap sumber daya harus dijaga oleh sebuah "global" semaphore untuk semua. Apakah setiap bagian sekarang menjadi bagian kritis, atau semua bagian dijaga oleh semaphore yang sama secara agregat bagian kritis tunggal? Kebingungan ini jelas dalam definisi bagian kritis seperti "... sepotong kode yang hanya dapat dilakukan oleh satu proses atau thread pada satu waktu
Kernel level critical sections
Biasanya, critical section mencegah migrasi proses dan thread antara prosesor dan preemption terhadap proses-proses dan thread-thread oleh interupsi dan proses/thread lainnya.
Critical section sering mengizinkan ‘nesting’. ‘Nesting’ memungkinkan beberapa critical section yang dimasuki dan ditinggalkan dengan sedikit proses tambahan.
Ketika scheduler meng-interupt proses atau thread yang sedang berjalan di critical section, maka scheduler akan membiarkan proses atau thread yang sedang berjalankan menyelesaian critical section proses tersebut, atau akan menjadwalkan proses atau thread yang datang untuk mendapatkan kuantum lengkap di lain waktu. Scheduler tidak akan memigrasi proses atau thread ke prosesor lain, dan tidak akan juga menjadwalkan proses atau thread lain untuk mengambil-alih sementara proses atau thread yang saat ini berjalan di critical section.
Demikian pula, jika interupsi terjadi ketika sebuah critical section berjalan, informasi interupsi ini dicatat untuk proses selanjutnya, dan eksekusi dikembalikan ke proses atau thread di critical section. Setelah critical section diselesaikan, dan dalam beberapa kasus kuantum yang dijadwalkan selesai, interrupt yang tertunda akan dieksekusi. Konsep penjadwalan kuantum ini berlaku untuk "Round Robin" dan algorithma penjadwalan serupa.
Karena bagian kritis dapat terjadi hanya pada prosesor yang dipergunakan, maka sinkronisasi hanya diperlukan dalam prosesor tersebut. Hal ini memungkinkan critical section dikerjakan tanpa terasa. Dan tidak perlu ada sinkronisasi interprocessor, hanya sinkronisasi stream program (perintah). Kebanyakan CPU multi-prosesor memberikan kesempatan yang baik untuk proses interupsi dijalankan terhadap proses yang sedang berjalan sehingga penanganan critical section menjadi tidak terasa.
Melaksanakan interupsi dan scheduler yang tertunda di setiap pintu keluar dari semua critical section merupakan bagian dari proses peningkatan kinerja (performance enhancements). Selain itu, interupsi juga dapat dikirim ke prosesor lain untuk eksekusi.
Critical section tidak boleh digunakan sebagai penguncian primitif yang panjang. Critical section seharusnya cukup singkat sehingga ketika critical section akan dimasukkan, dieksekusi, dan keluar tanpa sempat terjadi interupsi, bahkan dari shceduler hardware.
Kernel level critical section adalah bagian dasar dari proses lockout software.
Semaphore
Dalam ilmu komputer, khususnya di sistem operasi, semaphore adalah sebuag variabel atau tipe data abstrak yang digunakan untuk mengendalikan akses, oleh beberapa proses, ke sumber daya umum dalam pemrograman paralel atau lingkungan multi user.
Sebuah cara mudah untuk membayangkan semaphore adalah sebuah catatan terhadap berapa banyak unit sumber daya tertentu yang tersedia, digabungkan dengan suatu operasi untuk mendapatkan catatan berapa banyak unit yang dibutuhkan dan berapa banyak unit yang tersedia. atau menjadi bebas, dan, jika perlu , tunggu sampai unit sumber daya tersebut tersedia. Semaphore adalah alat yang berguna dalam pencegahan kondisi perebutan sumber daya; Namun, penggunaannya tidak berarti menjaminan bahwa program bebas dari masalah ini. Semaphore yang digunakan untuk menghitung sumber daya yang ada disebut Counting Semaphore, sedangkan Semaphore yang dibatasi dengan nilai-nilai 0 dan 1 (atau terkunci / dibuka, tidak tersedia / tersedia) disebut Binary Semaphore.
Misalkan perpustakaan memiliki 10 ruang belajar identik, yang akan digunakan oleh salah satu mahasiswa pada suatu waktu. Untuk mencegah perselisihan, siswa harus meminta ruang dari meja depan jika mereka ingin memanfaatkan ruang belajar. Jika tidak ada ruang bebas, siswa menunggu di meja sampai seseorang selesai menggunakan ruangan. Ketika seorang siswa telah selesai menggunakan sebuah ruangan, mahasiswa harus kembali ke meja dan menunjukkan bahwa satu ruangan telah menjadi bebas.
Petugas di meja depan tidak melacak kamar yang ditempati atau siapa yang menggunakannya, juga tidak dia tahu jika ruangan yang benar-benar digunakan, hanya jumlah kamar kosong yang tersedia yang ia tahu jika semua siswa benar-benar menggunakan kamar mereka dan mengembalikan kunci ketika mereka selesai. Ketika seorang siswa meminta ruang, petugas akan mengurangi nomor ini. Ketika seorang siswa melepaskan ruang, petugas meningkatkan nomor ini. Setelah akses ke ruang diberikan, ruangan dapat digunakan selama yang diinginkan, dan tidak diperbolehkan untuk memesan kamar sebelumn kamarnya kosong.
Dalam skenario ini hitungan meja depan mewakili semaphore, kamar adalah sumber daya, dan siswa mewakili proses. Nilai dari semaphore dalam skenario ini adalah awalnya 10. Ketika seorang siswa meminta ruang dia diberikan akses dan nilai semaphore diubah menjadi 9. Setelah siswa berikutnya datang, itu turun menjadi 8, kemudian 7 dan seterusnya. Jika seseorang meminta ruang dan nilai yang dihasilkan dari semaphore akan negatif, mereka dipaksa untuk menunggu sampai sebuah ruangan dibebaskan (dan menghitung meningkat dari 0).
Bentuk semafor paling sederhana adalah "semafor biner", digunakan untuk mengendalikan akses kepada satu resource, atau disebut juga Mutual Exclusion. Sebuah semafor biner selalu diinisialisasi dengan nilai 1. Ketika resource sedang digunakan, thread yang menggunakan akan mengurangi nilai ini menjadi 0, dan setelah selesai, menginkrementasi kembali nilainya menjadi 1 untuk menandakan resource yang sekarang bebas.
Konkurensi
Dalam ilmu komputer, concurrency adalah properti sistem di mana beberapa komputasi dijalankan secara bersamaan, dan berpotensi berinteraksi satu sama lain. komputasi dapat dijalankan pada beberapa core dalam chip prosesor yang sama, beberapa thread di-preemptive berdasarkan waktu pada prosesor yang sama, atau sebuah komputasi dieksekusi pada prosesor terpisah secara fisik.
Karena komputasi dalam sistem konkurensi dapat berinteraksi satu sama lain ketika mereka dieksekusi, jumlah kemungkinan jalur eksekusi dalam sistem bisa menjadi sangat besar, dan hasil yang dihasilkan bisa tak tentu. Konkurensi juga menggunakan ‘shared’ sumber daya secara bersama dapat menjadi sumber ketidakpastian yang mengarah ke isu-isu seperti kebuntuan (deadlock) dan kelaparan (starvation).
Desain sistem konkuren sering memerlukan penemuan teknik yang dapat diandalkan untuk mengkoordinasikan eksekusi mereka, pertukaran data, alokasi memori, dan penjadwalan eksekusi untuk meminimalkan waktu respon dan memaksimalkan
Mutual Exclusion
Di sistem computer, terdapat sumber daya yang tidak dapat dipakai bersama pada saat bersamaan seperti printer. Sumber daya ini hanya dapat digunakan oleh satu proses pada satu waktu. Sumber daya semacam ini disebut sumber daya kritis. Bagian program yang menggunakan sumber daya kritis disebut sedang memasukin critical section. Dengan demikian, hanya satu program pada satu waktu yang diijinkan masuk critical section. Pemrogram tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan batasan ini karena maksud program tidak dapat diketahui oleh sistem operasi.
Dengan kata lain, mutual exclusion adalah keperluan untuk memastikan bahwa tidak ada dua concurrent proses/program yang berada pada critical section yang sama disaat yang bersamaan. Hal ini merupakan kebutuhan mendasar dalam mengontrol konkurensi agar tidak terjadi kondisi balapan atau saling tindih.
Sistem operasi memberikan fasilitas untuk pemrogram dapat memberikan indikasi keberadaan critical section. Sistem operasi menyediakan layanan (berupa system call) untuk men-cegah proses memasuki critical section yang sedang dimasuki oleh proses lain. Pemrogram harus menspesifikasikan bagian-bagian critical section sehingga sistem operasi akan menjaganya dengan suatu mekanisme tertentu untuk men-cegah proses lain masuk critical section yang sedang dipakai proses lain.
Pemaksaan adalanya mutual exclusion dapat menimbulkan dua masalah, yaitu:
- Deadlock
- Startvation
DeadLock
Sebuah deadlock adalah situasi di mana dua atau lebih komputasi saling bersaing dan masing-masing menunggu yang lain untuk menyelesaikan komputasi tersebut, dan karena hal ini komputasi-komputasi tersebut tidak pernah terselesaikan.
Dalam sebuah database transaksional, kebuntuan terjadi ketika dua proses masing-masing menjalankan transaksi update dua baris informasi tetapi dalam urutan yang terbalik. Misalnya, proses A update baris 1 kemudian baris 2 dalam rentang waktu yang tepat sama yang memproses B update baris 2 kemudian baris 1. Proses A tidak bisa menyelesaikan update baris 2 sampai proses B selesai, namun proses B tidak bisa menyelesaikan update baris 1 sampai proses A selesai. Tidak peduli berapa banyak waktu yang diizinkan masuk, situasi ini tidak akan menyelesaikan proses-proses tersebut dan karena hal ini database management system akan biasanya membunuh/memberhentikan transaksi-transaksi tersebut.
Gambar 1. Ilustrasi DeadLock pada persimpangan Jalan |
Deadlock adalah masalah umum dalam sistem multiprocessing, komputasi paralel dan sistem terdistribusi, di mana penguncian oleh perangkat lunak dan perangkat keras digunakan untuk menangani sumber daya bersama dan juga merupakan implementasi prose sinkronisasi.
Sebenarnya deadlock dapat disebabkan oleh empat hal yaitu:
- Proses Mutual Exclusion
- Proses memegang dan menunggu
- Proses Preemption
- Proses Menunggu dengan siklus deadlock tertentu
Penanganan deadlock deadlock:
- Mengabaikan masalah deadlock.
- Mendeteksi dan memperbaiki
- Penghindaran yang terus menerus dan pengalokasian yang baik.
- Pencegahan yang secara struktur bertentangan dengan empat kondisi terjadinya deadlock.
Apabila pada sebuah sistem tidak tersedia pencegahan ataupun penghindaran deadlock,kemungkinan besar deadlock dapat terjadi. Pada keadaan seperti ini, sistem harus menyediakan dan algoritma pendeteksian deadlock algoritma pemulihan deadlock.
Starvation
Dalam ilmu komputer, Starvation (kelaparan) merupakan masalah yang dihadapi dalam multitasking di mana suatu proses terus-menerus ditolak sumber daya yang diperlukan. Tanpa sumber daya, program ini tidak pernah bisa menyelesaikan tugasnya. Starvation sering disebabkan oleh kesalahan dalam algoritma penjadwalan, tetapi juga dapat disebabkan oleh kebocoran sumber daya, dan dapat sengaja disebabkan melalui serangan denial-of-service seperti fork( ) bom.
Starvation biasanya disebabkan oleh sebuah algoritma penjadwalan terlalu sederhana. Sebagai contoh, jika (dirancang tidak dengan baik) sistem multi-tasking selalu melakukan switching di antara dua task/thread/proses pertama sementara yang ketiga tidak pernah mendapat jatah untuk dijalankan, maka task/thread/proses ketiga kehilangan jatah (starving/kelaparan) waktu CPU. Algoritma penjadwalan, yang merupakan bagian dari kernel, seharusnya mengalokasikan sumber daya secara adil; yaitu, algoritma harus mengalokasikan sumber daya sehingga tidak ada proses terus-menerus kekurangan sumber daya yang diperlukan.
Banyak penjadwal sistem operasi menggunakan konsep prioritas proses. Sebuah proses prioritas tinggi A akan dijalankan sebelum proses prioritas rendah B. Jika proses prioritas tinggi (proses A) tidak pernah blok, proses prioritas rendah (B) akan (di beberapa sistem) tidak pernah dijadwalkan - itu akan mengalami kelaparan. Jika ada proses yang lebih tinggi prioritasnya (proses X), yang tergantung pada hasil dari proses B, maka proses X mungkin tidak akan pernah selesai, meskipun itu adalah proses yang paling penting dalam sistem. Kondisi ini disebut inversi prioritas. Algoritma penjadwalan yang modern biasanya berisi kode untuk menjamin bahwa semua proses akan menerima jumlah minimum setiap sumber daya penting (paling sering waktu CPU) untuk mencegah proses apapun dari menjadi sasaran starvation.
Dalam jaringan komputer, terutama jaringan wireless, algoritma penjadwalan mungkin menderita dari penjadwalan starvation. Contohnya adalah penjadwalan throughput maksimum.
Starvation mirip dengan kebuntuan dalam hal itu menyebabkan proses freeze. Dua atau lebih proses menjadi buntu ketika masing-masing dari mereka tidak dapat melakukan apa-apa ketika menunggu sumber daya diduduki oleh program lain di set yang sama. Di sisi lain, proses adalah mengalami starvation ketika menunggu sumber daya yang hanya terus diberikan kepada proses lainnya.
Sebuah solusi starvation adalah dengan menggunakan algoritma penjadwalan dengan prioritas antrian yang juga menggunakan teknik aging. Aging adalah teknik secara bertahap meningkatkan prioritas proses yang menunggu dalam sistem untuk waktu yang lama
Daftar Pustaka
- Masyarakat Digital Gotong Royong (MDGR), Pengantar Sistem Operasi Komputer, 2006
- Bambang H, Sistem Operasi, Revisi Kelima, Penerbit Informatika, 2012
Sekian artikel tentang Pengertian Sinkronisasi dan Proses Pada Sistem Operasi.
Pengertian Sinkronisasi dan Proses Pada Sistem Operasi
4/
5
Oleh
Unknown