Berbagi teknologi

OS_Sinkronisasi dan Saling Pengecualian

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

04-07-2024: Sinkronisasi sistem operasi dan catatan studi saling pengecualian


Proses atau program yang berjalan bersamaan akan kehilangan penutupannya ketika dijalankan. Artinya, jika dua program menggunakan sumber daya bersama di area terpisah, hasil setiap proses mungkin berbeda.
Masukkan deskripsi gambar di sini
Alasannya adalah kami tidak melindungi sumber daya bersama x yang harus diakses oleh program a dan program b.


9.1 Konsep dasar sinkronisasi dan saling eksklusi

9.1.1 Hubungan sinkronisasi

Hubungan yang saling membatasi adalah sinkronisasi. Pemahaman sederhana tentang sinkronisasi adalah harus ada keteraturan dalam pelaksanaan proses.
Masukkan deskripsi gambar di sini


9.1.2 Hubungan yang saling eksklusif

Hubungan yang secara tidak langsung saling membatasi disebut hubungan saling lepas, misal printer
Masukkan deskripsi gambar di sini


9.1.3 Sumber daya penting

  • Sumber daya yang hanya boleh diakses oleh satu proses dalam jangka waktu tertentu disebut sumber daya kritis (atau sumber daya eksklusif)
  • Untuk berbagi sumber daya penting, saling pengecualian harus digunakan antar proses

"Model Produsen dan Konsumen"
Masukkan deskripsi gambar di sinipenghitung+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

menangkal- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Masukkan deskripsi gambar di sini

Solusi: perlakukan counter sebagai sumber daya penting dan izinkan proses untuk mengakses variabel counter secara timbal balik (Anda akan mempelajari mekanisme sinkronisasi nanti)


9.1.4 Bagian kritis

Baik itu sumber daya penting perangkat keras atau sumber daya penting perangkat lunak, banyak proses harus saling mengaksesnya.
Masukkan deskripsi gambar di sini
Area-area ini pada dasarnya adalah kode

  • Daerah masuk
  • bagian penting
  • Daerah keluar
  • wilayah yang tersisa

9.1.5 Mekanisme sinkronisasi harus mengikuti aturan

  • Bebas untuk masuk

Ketika tidak ada proses yang berada di bagian kritis, ini menunjukkan bahwa sumber daya bagian kritis sedang menganggur. Suatu proses yang meminta untuk memasuki bagian kritis harus diizinkan untuk segera memasuki bagian kritisnya agar dapat memanfaatkan sumber daya secara efektif.

  • Jika Anda sibuk, tunggu

Ketika proses yang ada memasuki bagian kritis, ini menunjukkan bahwa sumber daya kritis sedang diakses. Oleh karena itu, proses lain yang mencoba memasuki bagian kritis harus menunggu untuk memastikan akses yang saling eksklusif ke sumber daya kritis.

  • menunggu terbatas

Untuk proses yang memerlukan akses terhadap sumber daya kritis, proses tersebut harus memastikan bahwa proses tersebut dapat memasuki bagian kritisnya sendiri dalam waktu terbatas untuk menghindari kondisi "menunggu mati".

  • memberi jalan dan menunggu

Ketika suatu proses tidak dapat memasuki bagian kritisnya sendiri, prosesor (CPU) harus segera dilepaskan untuk mencegah proses jatuh ke dalam keadaan "sibuk menunggu".


9.2 Mekanisme sinkronisasi perangkat lunak

9.2.1 Metode tanda tunggal

  • Tetapkan variabel bilangan bulat publik untuk menunjukkan apakah ada proses di bagian kritis. Jika sudah ada proses di bagian kritis, maka proses akan menunggu melalui pemeriksaan loop di area entri akan dimodifikasi di area keluar.
  • Metode single-flag menetapkan putaran variabel bilangan bulat publik untuk menunjukkan nomor proses yang diperbolehkan memasuki bagian kritis.
  • Saat turn=1, proses P1 diperbolehkan masuk ke critical section, dan saat keluar dari critical section, hak untuk menggunakan critical section diberikan kepada proses lain (saat Pi keluar dari critical section, biarkan turn=j)

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 Tandai dua kali metode pemeriksaan pertama

Metode double-flag first-check menetapkan array Boolean flag[2] untuk menandai kesediaan setiap proses untuk memasuki bagian kritis. flag[i]=true berarti Pi ingin memasuki bagian kritis.

  • Sebelum Pi masuk ke bagian kritis, cek dulu apakah pihak lain sudah masuk ke bagian kritis
  • Jika tidak, setel flag[i] ke true sebelum memasuki bagian kritis
  • Saat Pi keluar dari bagian kritis, setel flag[i] ke false

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

  • Perulangan while setara dengan mekanisme lampu lalu lintas
  • Memasang bendera pihak lain sama dengan mengganti lampu lalu lintas pihak lain.
  • Namun, karena kedua proses memeriksa flag terlebih dahulu [lihat lampu lalu lintas terlebih dahulu], dan keduanya salah [kedua lampu hijau] pada awalnya, ada kemungkinan kedua proses melewati lampu lalu lintas pada saat yang sama dan memasuki bagian kritis bersama-sama. .

9.2.3 Metode pasca-inspeksi tanda ganda

Metode pasca-pemeriksaan bendera ganda akan memeriksa bendera pihak lain dan kemudian mengaturnya sendiri. Kedua operasi ini tidak dapat dilakukan sekaligus, sehingga kedua proses dapat memasuki bagian kritis pada saat yang bersamaan metode telah dirancang, yang pertama menetapkan benderanya sendiri dan kemudian memeriksa bendera pihak lain. Jika bendera pihak lain benar, tunggu jika tidak, masuk ke bagian kritis

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini


9.2.4 Algoritma Peterson

Algoritma Peterson digabungkanmetode tanda tunggalDanTandai dua kali metode pasca-pemeriksaanIdenya adalah menggunakan flag[] untuk menyelesaikan masalah akses yang saling eksklusif, dan menggunakan turn untuk menyelesaikan masalah kelaparan.

Jika kedua belah pihak berlomba-lomba untuk masuk ke dalam critical section, maka proses tersebut dapat dibiarkan memberikan kesempatan kepada pihak lain untuk masuk ke dalam critical section.
Sebelum setiap proses memasuki bagian kritis, ia menetapkan benderanya sendiri dan menetapkan bendera belokan yang boleh masuk. Setelah itu, ia mendeteksi bendera pihak lain dan memutarnya pada saat yang sama untuk memastikan bahwa hanya satu proses yang diizinkan masuk pada saat itu. kedua belah pihak meminta untuk memasuki bagian kritis pada saat yang sama.
Masukkan deskripsi gambar di sini
Kegagalan untuk menyerahkan hak untuk menunggu
Masukkan deskripsi gambar di sini


9.3 Mekanisme sinkronisasi perangkat keras

Sulit bagi perangkat lunak untuk menyelesaikan masalah saling mengecualikan setiap proses dari memasuki bagian kritis, dan memiliki keterbatasan yang besar, oleh karena itu, komputer menyediakan beberapa instruksi perangkat keras khusus untuk menyelesaikan masalah tersebut.

9.3.1 Matikan interupsi

(1) Pengertian mematikan interupsi

  • Mematikan interupsi telah dibahas dalam prinsip komposisi komputer. Ini mengacu pada memodifikasi sedikit register PSW di CPU. Bit ini akan mengontrol apakah CPU saat ini akan merespons interupsi yang sesuai. Interupsi yang tidak dapat ditutup kedoknya tidak dapat dihentikan
  • Penjadwalan proses dalam sistem operasi bergantung pada interupsi, seperti interupsi jam.
  • Selama eksekusi suatu proses di bagian kritis, sistem komputer mematikan interupsi, yang tidak akan memicu penjadwalan dan tidak akan ada proses atau peralihan thread.

(2) Kerugian mematikan interupsi

  • Penyalahgunaan terminal dapat mengakibatkan konsekuensi serius
  • Jika waktu shutdown terlalu lama akan mempengaruhi efisiensi sistem.
  • Metode mematikan interupsi tidak berlaku untuk sistem multi-CPU. Mematikan interupsi pada satu prosesor tidak mencegah proses mengeksekusi kode penting yang sama pada prosesor lain.

9.3.2 Perintah Uji-dan-Set (perintah TS)

Masukkan deskripsi gambar di sini

Instruksi TS dapat dikatakan sebagai suatu proses fungsi (primitif) yang proses eksekusinya tidak dapat dibagi-bagi.

  • kunci memiliki dua status:
    • *lock=FALSE menunjukkan bahwa sumber daya tersebut gratis
    • *lock=TRUE menunjukkan bahwa sumber daya sedang digunakan

Gunakan TS untuk mengelola bagian penting dan mengatur kunci untuk setiap sumber daya penting.

  • Nilai awalnya adalah FALSE, yang menunjukkan bahwa sumber daya penting tidak digunakan.
  • Sebelum proses memasuki bagian kritis, terlebih dahulu menggunakan TS untuk menguji kunci. Jika FALSE, maka dapat memasukkan dan menetapkan nilai TRUE ke kunci, menutup sumber daya kritis.

9.3.3 Perintah tukar

Masukkan deskripsi gambar di sini
Ini disebut instruksi swap dan digunakan untuk menukar isi dua kata.

  • Tetapkan kunci variabel Boolean global untuk setiap sumber daya penting, dengan nilai awal FALSE.
  • Gunakan instruksi perangkat keras di atas untuk menyelesaikan proses saling pengecualian
  • Namun cara ini juga akan menyebabkan proses akses terus menerus diuji dan berada dalam keadaan “busy waiting” yang tidak sesuai dengan prinsip “right-waiting”.

9.4 Mekanisme semafor

9.4.1 Semafor bilangan bulat

Ini didefinisikan sebagai bilangan bulat S yang digunakan untuk mewakili jumlah sumber daya. Hanya ada tiga operasi untuk semafor bilangan bulat ini: inisialisasi (menetapkan nilai awal), tunggu (penurunan), sinyal (peningkatan)
Masukkan deskripsi gambar di sini

  • Tunggu dan sinyal adalah operasi atomik dan tidak dapat diganggu selama eksekusi.
  • Ketika suatu proses memodifikasi semaphore, tidak ada proses lain yang dapat memodifikasi semaphore pada saat yang bersamaan.

9.4.2 Rekam semafor

Mekanisme sinkronisasi proses tanpa fenomena "sibuk menunggu".

  • Selain nilai variabel integer yang digunakan untuk mewakili jumlah sumber daya
  • Penting juga untuk menambahkan daftar tertaut proses L untuk menghubungkan semua proses yang menunggu sumber daya.

Masukkan deskripsi gambar di sini

  • Operasi menunggu setara dengan operasi P
  • Operasi sinyal setara dengan operasi V
  • Hanya dua nama yang berbeda, fungsinya sama persis
  • tunggu(A) = P(A)
  • sinyal(B) = V(A)

(1) Gunakan semafor untuk mewujudkan proses saling pengecualian

Tetapkan semaphore mutex=1 yang saling eksklusif, lalu tempatkan bagian kritis untuk setiap proses untuk mengakses sumber daya penting antara wait(mutex) dan signal(mutex)
Masukkan deskripsi gambar di sini


(2) Gunakan semaphore untuk mencapai sinkronisasi proses

Atur semaphore sinkronisasi S=0, sehingga pernyataan sinyal(S) yang perlu dieksekusi terlebih dahulu, baru kemudian tunggu(S)
Masukkan deskripsi gambar di sini