Apakah ada implementasi kunci perangkat keras tanpa tes dan set atau swap?

19

Kunci biasanya diterapkan melalui instruksi set-and-set dan swap level mesin. Apakah ada implementasi lain yang tidak menggunakan ini?

Juga, dapatkah kita mengatakan bahwa semua solusi tingkat perangkat keras untuk masalah bagian kritis dapat dikategorikan menjadi hanya tiga, yaitu, interupsi penonaktifan, uji-dan-set, dan tukar?

Tamad Lang
sumber

Jawaban:

13

Ya, Anda dapat menerapkan pengecualian bersama dengan hanya memuat memori dan menyimpan instruksi. Ada tradisi panjang dalam menemukan solusi sederhana yang berhasil untuk masalah ini.

Versi paling awal yang saya tahu, disebut "solusi Dekker", diperkenalkan di Dijkstra, Edsger W.; "Bekerja sama proses sekuensial", dalam F. Genuys, ed., Bahasa Pemrograman: Institut Studi Lanjutan NATO , hlm. 43-112, Academic Press, 1968 . Ada puluhan solusi sejak saat itu. Saya akan membahas hanya beberapa yang lebih penting.

Lamport, Leslie; "Solusi Baru Masalah Pemrograman Bersamaan Dijkstra", Comm ACM 17 (8): 453-455, 1974 memperkenalkan "algoritma Bakery" (karena didasarkan pada analogi orang-orang yang mengambil angka untuk menentukan urutan di mana mereka akan berada. disajikan di toko roti). Salah satu fitur yang sangat menonjol dari algoritma ini adalah bahwa ia menunjukkan bahwa tidak ada atomisitas perangkat keras sama sekali diperlukan untuk memecahkan masalah saling pengecualian. Membaca bahwa tumpang tindih menulis ke lokasi yang sama dapat mengembalikan nilai apa pun dan algoritme masih berfungsi. Lamport membahas ini sedikit dalam deskripsi kertas di halaman rumahnya .

Solusi Peterson, Peterson, GL; "Mitos tentang masalah pengecualian bersama," Inf. Proc Lett. , 12 (3): 115-116, 1981 , adalah salah satu yang dirancang khusus agar mudah dipahami, dan dijadikan alasan. Akhirnya, favorit saya adalah Lamport, Leslie; "Algoritma Pengecualian Saling Cepat," ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. Dalam makalah ini Lamport mencoba untuk mengoptimalkan solusi untuk masalah saling pengecualian dalam kasus (umum) bahwa ada sedikit pertengkaran untuk bagian kritis. Ini menjamin pengucilan satu sama lain dan kebuntuan kebebasan, tetapi tidak adil. Ini (saya percaya) adalah algoritma saling pengecualian pertama yang hanya menggunakan pembacaan dan penulisan normal yang dapat menyinkronkan prosesor N dalam waktu O (1) ketika tidak ada pertentangan. (Ketika ada pertikaian, itu jatuh kembali pada tes O (N).) Dia memberikan demonstrasi informal bahwa yang terbaik yang dapat Anda lakukan dalam kasus bebas pertengkaran adalah tujuh akses memori. (Dekker dan Peterson keduanya melakukannya dengan 4, tetapi mereka hanya dapat menangani 2 prosesor, ketika Anda memperluas algoritme mereka ke N, mereka harus menambahkan akses O (N) tambahan.)

Rupanya orang-orang yang bekerja pada masalah pemecahan pengecualian bersama dengan hanya menggunakan memori membaca dan menulis menjadi frustrasi oleh (kurangnya) pemahaman orang lain tentang masalah dan solusinya. Ini ditunjukkan sebagian dengan judul makalah Peterson ("Mitos tentang masalah pengecualian bersama") dan sebagian oleh catatan singkat yang diterbitkan Lamport pada 1991: Lamport, Leslie; "Masalah Saling Pengecualian Telah Dipecahkan", Comm ACM 34 (1): 110, 1991 , yang dijelaskan Lamport dengan agak pahit di beranda .

Jadi untuk menjawab pertanyaan kedua Anda: Tidak. Ada banyak lebih dari tiga kategori solusi tingkat perangkat keras untuk masalah bagian kritis (menggunakan hanya beban dan penyimpanan adalah satu, yang lain melibatkan instruksi bandingkan-dan-tukar, load-linked / store-conditional instruksi (menggunakan protokol koherensi cache untuk menguji atomicity), dan mengambil-dan-menambahkan instruksi.) Dalam arti lain hanya ada satu kategori solusi: yang melibatkan sekelompok proses asinkron untuk menyetujui urutan acara global .

(Perhatikan bahwa jawaban ini adalah suntingan (luas) dari jawaban sebelumnya yang saya berikan untuk pertanyaan yang sangat berbeda .)

Logika Pengembaraan
sumber
ll / sc, tentu saja, dapat diperluas ke memori transaksional yang lebih umum yang mencakup seluruh bagian penting daripada hanya akuisisi kunci. Perbedaan antara apa yang disediakan jaminan perangkat keras juga tampak signifikan; kemajuan maju kadang-kadang dijamin (yaitu, satu agen akan memenangkan perlombaan untuk mendapatkan kunci pada waktu tertentu), tetapi bahkan konsep yang lemah terkait dengan keadilan tampaknya biasanya terkait dengan perangkat lunak (agak dimengerti).
Paul A. Clayton