Apa arti kondisi lomba?

10

Saya seorang insinyur listrik baru jadi tahan dengan saya. Saya mendengar beberapa insinyur lain yang bekerja dengan saya berbicara tentang kondisi balapan yang ada di salah satu sirkuit kami.

Apa artinya?

Stihl Alighve
sumber
Jika Anda ingin melihat contoh spesifik, "De-Glitching RAM Writes" dan dua artikel berikut memiliki diskusi panjang tentang bug yang, sejauh yang saya tahu, dipicu oleh kondisi balapan.
davidcary

Jawaban:

16

Artinya, sangat sederhana bahwa dua hal sekaligus "berlomba" untuk hasilnya.

Contohnya adalah sirkuit dengan Reset dan pin Set, jika Anda memicu reset, output menjadi 0. Jika Anda memicu set, output menjadi 1. Jika Anda pertama kali memicu set dan kemudian mengatur ulang sangat, sangat cepat setelah itu, reset akan terlihat, jadi outputnya adalah 0.

Tetapi, jika keduanya dipicu pada saat yang bersamaan, apa yang terjadi?

Jika perancang sirkuit memperhatikan, harus ada jawaban, jika itu penting untuk fungsinya. Jika tidak ada jawaban pasti untuk pertanyaan itu, sirkuit memiliki kondisi balapan, di mana sinyal dari set dan reset "perlombaan" satu sama lain untuk melihat mana yang menang untuk menentukan output.

Jalur dengan penundaan paling sedikit biasanya akan menang, tetapi kemudian Anda bisa melihat kondisi balapan sebagai pemicu yang tepat di mana jalur yang paling tertunda dipicu persis sebelum sebelum yang lebih cepat.

Banyak sirkuit, termasuk blok pembangun logika di dalam IC, memiliki kondisi balapan tertentu, tetapi biasanya sedemikian sehingga ketika Anda menggunakan sirkuit seperti yang dimaksudkan, Anda tidak akan melihatnya. Sering kali ketika insinyur mengatakan "kondisi balapan" dengan keras beberapa kali mereka sebenarnya berarti bahwa itu juga yang dapat terjadi dalam penggunaan normal, yang akan menjadi masalah, karena dalam kondisi balapan operasi normal tidak dapat diprediksi.

Dalam perangkat lunak istilah ini juga digunakan, tetapi sering untuk menunjukkan masalah waktu, atau penguncian. Itu adalah prinsip yang serupa. Seringkali ketika Anda memiliki dua proses di komputer yang berjalan secara independen, tetapi menggunakan memori yang sama Anda melindungi memori itu dari yang ditulis oleh satu, sementara yang lain menggunakannya. Jika Anda tidak menyebutnya sebagai kondisi balapan yang mungkin: Satu proses dapat membaca nilai yang baru saja dalam proses diperbarui, atau keduanya dapat menulisnya pada saat yang sama dan kemudian Anda tidak tahu apa yang akan terjadi.

Asmyldof
sumber
2
Sebagai tambahan untuk jawaban yang bagus ini, saya akan menunjukkan bahwa perangkat keras dapat berperilaku sangat buruk dalam situasi ini. Perangkat keras nyata tidak pernah beralih secara instan dari 0 ke 1. Selalu harus meningkat dalam waktu singkat di antara mereka. Kebanyakan logika mengasumsikan bahwa waktu yang cukup telah berlalu sejak transisi sedemikian rupa sehingga transien telah memutuskan untuk "sangat dekat dengan 0" atau "sangat dekat dengan 1." Jika waktunya ... disayangkan, bisa mendekati 0,5. Banyak sirkuit menjadi "metastabil" dalam keadaan ini, yang berarti mereka dapat mengambil jumlah waktu yang tidak ditentukan untuk transisi, mendestabilisasi seluruh sirkuit
Cort Ammon
1
Bahkan jika sirkuit Anda dirancang untuk menangani kasing di mana Set dan Reset diaktifkan secara bersamaan, Anda tidak dapat secara andal mengaktifkannya secara bersamaan, jadi Anda tidak akan tahu yang mana yang diaktifkan terlebih dahulu.
user253751
Operasi non-atom adalah contoh kondisi ras yang lebih baik dalam perangkat lunak. Suatu program dapat membuat file baru menggunakan C fopen(), menulis data ke fclose()dalamnya, lalu chmod()mengamankannya. Jendela singkat di antara fopen()dan chmod()membuka kemungkinan kondisi balapan di mana mode file default dapat memungkinkan orang luar yang tidak diinginkan untuk bekerja dengan file dengan cara ditolak setelah chmod()panggilan. Solusinya adalah membuat file dengan open()gantinya, yang memungkinkan pengaturan mode sebagai bagian dari operasi pembuatan file.
Warren Young
6

Istilah "kondisi lomba" menyiratkan bahwa (1) dua atau lebih sinyal dapat tiba dalam urutan apa pun, secara sewenang-wenang saling berdekatan, dan (2) tidak mungkin untuk menunjukkan secara analitis bahwa pada dasarnya ada kemungkinan nol kemungkinan kombinasi kedatangan yang mungkin terjadi. kali menimbulkan masalah.

Dari sudut pandang flip flop tunggal yang input datanya mungkin berubah setiap saat sehubungan dengan jam, transisi hampir simultan pada jam dan input data dapat menimbulkan kondisi balapan. Dari sudut pandang perilaku sirkuit keseluruhan, bagaimanapun, mereka tidak akan menimbulkan kondisi balapan jika mereka hanya bisa terjadi pada saat tidak ada sirkuit hilir yang peduli dengan apa yang dipegang kait, dan tidak ada sirkuit hilir yang akan mulai peduli tentang apa yang dipegang kait sampai setelah kedatangan pulsa jam yang tidak dapat mendekati transisi pada input data.

Lebih lanjut, karena seringkali tidak mungkin untuk sepenuhnya menghilangkan semua kemungkinan pengaturan waktu input yang bermasalah, banyak analisis kondisi ras akan mengatakan bahwa jika output dari satu register dimasukkan ke yang lain yang dikendalikan oleh jam yang sama, register kedua akan selalu terkunci "bersih" tinggi atau "bersih" rendah bahkan jika input ke register pertama menyebabkannya menangkap level input yang tepat di ambang switching. Secara teori, akan mungkin bagi kait pertama untuk menangkap level yang hanya cukup di atas atau di bawah ambang switching yang tepat sehingga tingkat output akan beralih tepat ketika pulsa clock berikutnya tiba.

Sebagai konsekuensinya, jika seseorang misalnya mengambil input dan meneruskannya ke dalam urutan tiga sandal jepit, dan memiliki sirkuit yang menghasilkan tinggi setiap kali kegagalan kedua tinggi tetapi yang ketiga rendah, maka setiap tepi naik yang terjadi pada input data yang didahului oleh periode jam penuh senilai waktu rendah, dan diikuti oleh periode jam penuh waktu tinggi, pada dasarnya akan dijamin menyebabkan output rangkaian menjadi tinggi untuk tepat satu periode jam.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Dalam skema ini, sinyal dengan timing yang agak tidak teratur dinormalisasi ke jam dalam tiga cara sedemikian rupa untuk menghasilkan output yang tinggi untuk satu siklus jam setelah setiap sisi naik. Upaya pertama untuk menormalkan sinyal menghasilkan output yang tampak buruk, dan memiliki kondisi balapan yang jelas jika input dan jam berubah secara bersamaan. Pendekatan kedua jauh lebih baik, tetapi masih memiliki kondisi balapan (yang tidak dapat dipicu oleh simulator) jika waktu jam dan data menyebabkan register pertama menangkap nilai perantara. Pendekatan ketiga merupakan praktik umum, dan umumnya akan dianggap aman, karena meskipun register pertama gagal menangkap nilai bersih tinggi atau rendah bersih, sangat tidak mungkin bahwa output dari register pertama akan memiliki perilaku yang tepat untuk menyebabkan register kedua tidak meraih dengan bersih. Jika data berubah sangat dekat dengan jam, mungkin diambil pada siklus saat ini, atau tidak bisa diambil sampai yang berikutnya, tetapi jika situasi baik dapat diterima tidak ada kondisi balapan.

supercat
sumber
Anda berkata, "... sebuah output yang tampak buruk." Apakah itu cara lain untuk mengatakan "keadaan metastabil?"
Solomon Slow
@jameslarge: Simulator tidak menangani status metastabil. Saya menggambarkan output pertama jelek karena tidak ada lebar pulsa minimum, dan output kedua berisiko karena kemungkinan negara metastable.
supercat
2

Secara singkat, itu berarti hasil dari suatu proses akan dipengaruhi oleh urutan kedatangan dua input, dan urutan yang tidak pasti (tidak dapat dijamin).

JRobert
sumber