Что означает состояние гонки?

10

Я новый инженер-электрик, так что терпите меня. Я слышал, что некоторые другие инженеры, с которыми я работаю, рассказывают о состоянии гонки, которое существует в одной из наших трасс.

Что это значит?

Stihl Alighve
источник
Если вы хотите взглянуть на конкретный пример, «Де-глитч-запись в ОЗУ», и в двух следующих статьях обсуждается ошибка, которая, насколько я могу судить, была вызвана состоянием гонки.
Дэвидкари

Ответы:

16

Это очень просто означает, что две вещи одновременно «гонятся» за результатом.

Примером является схема со сбросом и выводом Set. Если вы запускаете сброс, выход становится равным 0. Если вы активируете набор, выход становится равным 1. Если вы сначала настроили триггер, а затем очень, очень быстро после него сбросите будет видно, поэтому на выходе будет 0.

Но если они оба срабатывают в одно и то же время, что происходит?

Если разработчик схемы обратил внимание, должен быть ответ, если это важно для функции. Если нет определенного ответа на этот вопрос, схема имеет состояние гонки, когда сигнал из набора и сброса «гоняют» друг друга, чтобы увидеть, какой из них выигрывает, чтобы определить выход.

Трасса с наименьшей задержкой обычно побеждает, но тогда вы можете рассматривать состояние гонки как точный триггер, при котором наиболее задержанный путь запускается ровно намного раньше, чем более быстрый.

Многие схемы, в том числе логические строительные блоки внутри микросхем, имеют определенные условия гонки, но обычно они таковы, что когда вы используете схему так, как она предназначена, вы не заметите. Очень часто, когда инженеры говорят «состояние гонки» вслух пару раз, они на самом деле означают, что это также может произойти при нормальном использовании, что может стать проблемой, потому что в состоянии гонки нельзя предсказать нормальную работу.

В программном обеспечении этот термин также используется, но часто для обозначения проблем с синхронизацией или блокировок. Это похожий принцип, хотя. Часто, когда у вас на компьютере запущены два процесса, но они используют одну и ту же память, вы защищаете эту память от записи одним, в то время как другой использует ее. Если вы не называете это возможным условием гонки: один процесс может считывать значение, которое находится в процессе обновления, или оба могут записывать в него одновременно, и тогда вы не знаете, что будет бывает.

Asmyldof
источник
2
В дополнение к этому хорошему ответу я хотел бы отметить, что аппаратное обеспечение может работать очень плохо в таких ситуациях. Реальное оборудование никогда не переключается мгновенно с 0 на 1. Оно всегда должно расти в течение короткого периода времени между ними. Большая часть логики предполагает, что с момента такого перехода прошло достаточно времени, чтобы переходные процессы были разрешены либо «очень близко к 0», либо «действительно близко к 1». Если время ... неудачное, оно может быть ближе к 0,5. Многие схемы становятся «метастабильными» в этом состоянии, что означает, что им может потребоваться неопределенное количество времени для перехода, дестабилизирующего всю цепь
Cort Ammon
1
Даже если ваша схема рассчитана на случай, когда Set и Reset активируются одновременно, вы не можете надежно активировать их одновременно, поэтому вы не будете знать, какая из них активируется первой.
user253751
Неатомарные операции - лучший пример состояния гонки в программном обеспечении. Программа может создать новый файл, используя C fopen(), записать в него данные fclose(), затем chmod()защитить его. Это короткое окно между fopen()и chmod()открывает возможное состояние состязания, при котором режим файла по умолчанию может позволить нежелательному постороннему человеку работать с файлом способом, запрещенным после chmod()вызова. Решение состоит в том, чтобы создать файл open()вместо этого, что позволяет установить режим как часть операции создания файла.
Уоррен Янг
6

Термин «состояние гонки» подразумевает, что (1) два или более сигналов могут поступать в любом порядке, сколь угодно близко друг к другу, и (2) невозможно аналитически показать, что существует практически нулевая вероятность любой возможной комбинации прибытия раз ставит проблему.

С точки зрения одного триггера, чей ввод данных может измениться в любое время относительно часов, почти одновременные переходы на часах и входах данных могут представлять собой состояние гонки. Однако, с точки зрения общего поведения схемы, они не создавали бы состояния гонки, если бы они могли возникать только в тех случаях, когда никакая нисходящая цепь не заботилась бы о том, что удерживала защелка, и никакая нисходящая схема не начинала заботиться о том, что удерживала защелка. до тех пор, пока не поступит тактовый импульс, который не может находиться рядом с какими-либо переходами на входе данных.

Кроме того, поскольку зачастую невозможно полностью полностью исключить возможность проблемных входных таймингов, многие анализы состояния гонки говорят о том, что, если выходные данные одного регистра поступают в другой, который управляется теми же часами, второй регистр всегда фиксируется «чистый» максимум или «чистый» минимум, даже если входы в первый регистр заставили его захватить уровень входа, который был прямо на пороге переключения. Теоретически, первая защелка могла бы зафиксировать уровень, который был достаточно выше или ниже своего точного порога переключения, чтобы выходной уровень переключался точно при поступлении следующего тактового импульса.

Как следствие, если нужно, например, взять вход и передать его в последовательность из трех триггеров, и иметь схему, которая выдает высокий уровень всякий раз, когда второй флоп был высоким, а третий - низким, тогда любой нарастающий фронт, который происходит на ввод данных, которому предшествует полная длительность такта низкого времени, а затем полный период такта высокого времени, по существу гарантированно приведет к тому, что выход схемы будет высоким в течение ровно одного такта.

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

В этой схеме сигнал с несколько нерегулярной синхронизацией нормируется на тактовую частоту тремя способами таким образом, чтобы генерировать выходной сигнал, который является высоким для одного тактового цикла после каждого нарастающего фронта. Первая попытка нормализовать сигнал генерирует выход, который выглядит неприятно и имеет очевидное состояние гонки, если вход и такт изменяются одновременно. Второй подход намного лучше, но все еще имеет состояние гонки (которое симулятор не может вызвать), если синхронизация часов и данных заставляет первый регистр захватывать промежуточное значение. Третий подход представляет собой обычную практику и, как правило, считается безопасным, поскольку даже если первый регистр не может зафиксировать чистый максимум или чистый минимум, очень маловероятно, что выход из первого регистра будет иметь абсолютно правильное поведение, чтобы заставить второй регистр не захватывать чисто. Если данные изменяются очень близко к часам, они могут быть захвачены в текущем цикле или не получены до следующего, но если любая из этих ситуаций будет приемлемой, условия гонки отсутствуют.

Supercat
источник
Вы сказали: «... результат, который выглядит неприятно». Это еще один способ сказать "метастабильное состояние"?
Соломон Слоу
@jameslarge: симулятор не обрабатывает метастабильные состояния. Я описываю первый выход как некрасивый, потому что нет минимальной ширины импульса, а второй выход как рискованный из-за возможности метастабильных состояний.
суперкат
2

Вкратце, это означает, что на результат процесса будет влиять последовательность поступления двух входов, и эта последовательность является неопределенной (не может быть гарантирована).

JRobert
источник