경쟁 조건이란 무엇입니까?


10

나는 새로운 전기 기술자입니다. 우리 회로 중 하나에 존재하는 경쟁 조건에 대해 이야기하는 다른 엔지니어들도 있습니다.

그게 무슨 뜻이야?


특정 예제를보고 싶다면 "De-Glitching RAM Writes" 와 다음 두 기사에서 내가 알 수있는 한 경쟁 조건에 의해 유발 된 버그에 대해 오랫동안 논의했습니다.
davidcary 2016 년

답변:


16

즉, 두 가지가 동시에 결과에 대해 "경주"한다는 것을 의미합니다.

예를 들어 리셋 및 세트 핀이있는 회로가 있습니다. 리셋을 트리거하면 출력이 0이됩니다. 세트를 트리거하면 출력이 1이됩니다. 출력이 0이됩니다.

그러나, 둘 다 정확히 동시에 트리거되면 어떻게됩니까?

회로 설계자가주의를 기울 였다면 기능에 중요하다면 대답이 있어야합니다. 해당 질문에 대한 답변이없는 경우 회로에는 경합 조건이 있으며, 세트의 신호와 리셋 신호가 서로 "경주"하여 출력을 결정하기 위해 어느 쪽이 이길 지 확인합니다.

지연이 가장 적은 경로가 일반적으로 이길 수 있지만 경쟁 조건을 가장 지연된 경로가 더 빠른 경로보다 정확히 트리거되는 정확한 트리거로 볼 수 있습니다.

IC 내부의 논리 빌딩 블록을 포함한 많은 회로에는 특정 경쟁 조건이 있지만 일반적으로 회로를 의도 한대로 사용하면 눈치 채지 못할 수 있습니다. 종종 엔지니어가 몇 번이나 "경주 조건"을 크게 말할 때 실제로는 일반적인 사용시 발생할 수있는 문제이기도하므로 경쟁 조건에서는 정상 작동을 예측할 수 없기 때문에 문제가 될 수 있습니다.

소프트웨어에서이 용어도 사용되지만 타이밍 문제 또는 잠금을 나타내는 데 종종 사용됩니다. 그래도 비슷한 원리입니다. 컴퓨터에 독립적으로 실행되는 두 개의 프로세스가 있지만 동일한 메모리를 사용하는 경우 하나의 메모리가 작성되는 동안 다른 메모리가 사용되는 것을 방지 할 수 있습니다. 그들이 가능한 경쟁 조건이라고 부르지 않으면 : 하나의 프로세스가 업데이트되는 과정에있는 값을 읽거나 둘 다 동시에 쓸 수 있고 무엇 을 알지 모릅니다 우연히 있다.


2
이 좋은 대답에 덧붙여, 나는 이러한 상황에서 하드웨어가 매우 열악하게 작동 할 수 있다고 지적 합니다. 실제 하드웨어는 0에서 1로 즉시 전환되지 않습니다. 하드웨어 간에는 항상 짧은 기간 동안 증가해야합니다. 대부분의 논리는 과도 상태가 "실제로 0에 가깝다"또는 "실질적으로 1에 가깝다"로 전환 된 이후 충분한 시간이 지났다고 가정합니다. 타이밍이 불행한 경우 0.5에 가까울 수 있습니다. 이 상태에서 많은 회로가 "안정화 가능"하게되므로 전환에 결정되지 않은 시간이 걸리고 전체 회로가 불안정 해집니다.
Cort Ammon

1
회로가 설정 및 재설정이 동시에 활성화 된 경우를 처리하도록 설계되어 있어도 안정적으로 동시에 활성화 할 수 없으므로 어떤 회로가 먼저 활성화되었는지 알 수 없습니다.
user253751 2016 년

비 원자 작업 은 소프트웨어의 경쟁 조건에 대한 더 좋은 예입니다. 프로그램은 C를 사용하여 새 파일을 작성하고 fopen()데이터를 작성한 fclose()다음 chmod()보안을 설정합니다. 사이의 그 짧은 창 fopen()chmod()기본 파일 모드는 후 거부하는 방식으로 파일을 작업에 원하지 않는 외부인을 허용 할 수있는 가능한 경쟁 조건 열립니다 chmod()전화를. 해결책은 open()대신 파일을 작성하여 파일 작성 조작의 일부로 모드를 설정할 수 있도록하는 것입니다.
워렌 영

6

"경주 조건"이라는 용어는 (1) 두 개 이상의 신호가 임의의 순서로 서로 인접하여 도착할 수 있음을 의미하며 (2) 가능한 조합 조합의 도착 가능성이 본질적으로 없음을 분석적으로 보여주는 것은 불가능합니다. 번 문제를 제기.

데이터 입력이 클록과 관련하여 언제라도 변경 될 수있는 단일 플립 플롭의 관점에서, 클록과 데이터 입력에 대한 거의 동시 전환은 경쟁 조건을 야기 할 수 있습니다. 그러나 전체 회로 동작의 관점에서 볼 때 다운 스트림 회로가 래치를 잡고있는 것을 신경 쓰지 않고 다운 스트림 회로가 래치를 잡고있는 것을 신경 쓰지 않는 경우에만 발생하는 경우 경쟁 조건을 일으키지 않습니다. 클럭 펄스가 도달 할 때까지 데이터 입력의 전환 근처에있을 수 없습니다.

또한 문제가되는 입력 타이밍의 모든 가능성을 완전히 완전히 제거 할 수없는 경우가 많으므로 경쟁 조건에 대한 많은 분석에 따르면 한 레지스터의 출력이 동일한 클록으로 제어되는 다른 레지스터에 공급되면 두 번째 레지스터는 항상 래치됩니다 첫 번째 레지스터로의 입력으로 인해 스위칭 임계 값에 맞는 입력 레벨을 캡처하더라도 "클린"높음 또는 "클린"낮음. 이론적으로, 첫 번째 래치는 다음 클럭 펄스가 도착할 때 출력 레벨이 정확하게 전환 될 수있는 정확한 스위칭 임계 값 위 또는 아래의 레벨을 캡처 할 수 있습니다.

결과적으로, 예를 들어 입력을 받아 3 개의 플립 플롭 시퀀스로 전달하고 두 번째 플롭이 높지만 세 번째 플롭이 낮을 때마다 높은 출력을 갖는 회로가 있으면 전체 클럭주기가 낮은 시간이 뒤 따르고 전체 클럭주기가 높은 시간이 뒤 따르는 데이터 입력은 본질적으로 정확히 하나의 클럭주기 동안 회로의 출력이 높아지도록 보장 될 것이다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

이 회로도에서, 다소 불규칙적 인 타이밍을 갖는 신호는 각각의 상승 에지 후 1 클록 사이클 동안 높은 출력을 생성하는 방식으로 3 가지 방식으로 클록으로 정규화된다. 신호를 정규화하려는 첫 번째 시도는 불쾌한 출력을 생성하며, 입력과 클록이 동시에 변경되면 명백한 경쟁 조건을 갖습니다. 두 번째 방법은 훨씬 나아지지만 클럭과 데이터의 타이밍으로 인해 첫 번째 레지스터가 중간 값을 캡처하게되면 경쟁 조건 (시뮬레이터가 트리거 할 수 없음)이 있습니다. 세 번째 접근 방식은 일반적인 관행을 나타내며 일반적으로 첫 번째 레지스터가 클린 하이 또는 클린 로우를 캡처하지 못하더라도 안전하다고 간주됩니다. 첫 번째 레지스터의 출력이 두 번째 레지스터가 깨끗하게 잡히지 않도록하는 올바른 동작을 가질 가능성은 거의 없습니다. 데이터가 시계에 매우 가까이 변경되면 현재 사이클에서 데이터를 가져 오거나 다음 시간까지 데이터를 가져 오지 않을 수 있지만 두 가지 상황 중 어느 것이라도 허용 될 경우 경쟁 조건은 없습니다.


"... 불쾌한 결과물입니다." 이것이 "가능한 상태"라고 말하는 또 다른 방법입니까?
Solomon Slow

@ jameslarge : 시뮬레이터는 준 안정 상태를 처리하지 않습니다. 첫 번째 출력은 최소 펄스 폭이 없기 때문에 추악한 것으로 설명하고 두 번째 출력은 준 안정 상태 가능성 때문에 위험한 것으로 설명합니다.
supercat

2

간단히 말해, 프로세스의 결과가 두 입력의 도착 순서에 영향을 받고 해당 순서가 불확실하다는 것을 의미합니다 (보증 할 수 없음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.