Penyegerakan proses ialah teknologi yang menyelesaikan masalah akses serentak kepada data yang dikongsi, yang mungkin membawa kepada ketidakkonsistenan data. Proses kolaborasi merujuk kepada proses yang boleh menjejaskan proses lain atau terjejas oleh proses lain, mengakibatkan data proses tidak konsisten Oleh itu, penyegerakan proses diperlukan untuk memastikan ketekalan data.
Masalah bahagian kritikal
Setiap proses mempunyai bahagian kod terpelihara yang dipanggil
bahagian kritikal. Dalam bahagian ini, proses boleh menukar pembolehubah awam, mengemas kini jadual, menulis ke fail, dsb. Perkara utama yang perlu diperhatikan tentang bahagian kritikal ialah semasa satu proses dilaksanakan dalam bahagian kritikalnya, proses lain tidak boleh dilaksanakan dalam bahagian kritikalnya. Setiap proses mesti meminta kebenaran sebelum memasuki bahagian kritikalnya, bahagian kod yang melaksanakan permintaan ini ialah
bahagian entri, penghujung kod ialah
bahagian keluar, dan kod yang tinggal ialah
bahagian yang tinggal. Diberikan di bawah adalah struktur keratan kritikal bagi proses tertentu P1
mempunyai tiga keperluan berikut: Bahagian kritikal mesti dipenuhi
- secara Eksklusif jika proses secara eksklusif
bahawa P1 berada dalam anggapan bahawa P2 tidak boleh melaksanakan dalam bahagian kritikalnya dan bukannya sebarang proses lain yang dilaksanakan dalam bahagian kritikal. -
Progress
- Jika tiada proses yang dilaksanakan dalam bahagian kritikalnya, dan terdapat proses yang ingin memasuki bahagian kritikal bahagian kritikal mereka, maka hanya proses yang tidak dilaksanakan di bahagian yang selebihnya boleh meminta untuk memasuki bahagian kritikal bahagian, dan pilihan boleh ditangguhkan selama-lamanya. -
Penantian Terbatas
- Dalam penantian terhad, terdapat had kepada bilangan kali proses boleh memasuki bahagian kritikalnya selepas ia mengeluarkan permintaan untuk memasuki bahagian kritikalnya dan sebelum permintaan itu diberikan.
Terdapat dua kaedah yang biasa digunakan dalam sistem pengendalian untuk menangani bahagian kritikal.
Inti boleh didahulukan
- Kernel boleh didahulukan membenarkan proses didahulukan semasa proses didahulukan. Berjalan dalam mod kernel.
Non-preemptive kernel
- Kernel bukan preemptive tidak membenarkan proses yang berjalan dalam mod kernel dipreempted.
Penyelesaian Peterson
Penyelesaian Peterson ialah penyelesaian perisian berasaskan klasik kepada masalah bahagian kritikal. Ia terhad kepada dua proses yang silih berganti antara bahagian kritikal dan bakinya. Bahagian Peterson memerlukan perkongsian dua item data antara dua proses, iaitu
Di sini, giliran pembolehubah menunjukkan giliran siapa yang masuk ke bahagian kritikal, dan tatasusunan bendera menunjukkan; sama ada proses Bersedia untuk memasuki zon kritikal.
Jika pusing == i, ia bermakna proses Pi dibenarkan memasuki bahagian kritikalnya.
Jika flag[j] adalah BENAR, ini bermakna proses j sedia untuk memasuki bahagian kritikalnya
Berikut ialah struktur proses P dalam penyelesaian Peterson
Penyelesaian Peterson mengekalkan ketiga-tiga syarat -
-
Saling eksklusif
− Hanya satu proses boleh mengakses bahagian kritikal pada satu masa. -
Progress
− Proses di luar bahagian kritikal tidak akan menghalang proses lain daripada memasuki bahagian kritikal. Penantian Terbatas - Setiap proses mempunyai peluang untuk memasuki bahagian kritikalnya tanpa menunggu selama-lamanya.
Perkakasan penyegerakan
telah dilaksanakan menggunakan dua jenis arahan -
Ujian dan Set () adalah penyelesaian perkakasan kepada masalah penyegerakan. Antaranya, terdapat pembolehubah yang dikongsi bersama oleh pelbagai proses yang dipanggil Kunci, yang boleh mempunyai nilai 0 dan 1, di mana 1 bermakna memperoleh kunci dan 0 bermakna melepaskan kunci.
Setiap kali proses cuba memasuki bahagian kritikal, mereka perlu menanyakan nilai kunci. Jika nilai kunci ialah 1, maka mereka mesti menunggu sehingga nilai kunci tidak berubah kepada 0.
Diberikan di bawah ialah pelaksanaan TestAndSet() yang saling eksklusif
Semaphore
Semaphore ialah alat penyegerakan yang digunakan untuk mengatasi masalah yang disebabkan oleh arahan TestAndSet() dan Swap(). Semaphore S ialah pembolehubah integer yang boleh diakses melalui dua operasi atom standard wait() dan signal()
wait() fungsi:
wait(S) {
While S <= 0
; // no operation
S--;
}
Signal() fungsi fungsi:
signal(S) {
S++;
}
Apabila a proses mengubah suai nilai semaphore, proses lain tidak boleh beroperasi pada nilai semaphore yang sama pada masa yang sama.
Diberikan di bawah adalah pelaksanaan pengecualian bersama menggunakan semaphore
Sistem pengendalian menggunakan dua jenis semaphore, ia adalah:
berbeza-bezaMengira semaphore tak bernilai -
Tipe semaphore tak terbatas ini
Binary Semaphore
- Nilai semaphore jenis ini boleh berbeza antara 0 dan 1. Mereka juga dipanggil kunci mutex. Ia digunakan oleh sistem pengendalian untuk menyelesaikan masalah bahagian kritikal dalam pelbagai proses. 🎜
Atas ialah kandungan terperinci Proses penyegerakan dalam C/C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!