컴퓨터가 실수로 0을 1로 바꾸지 않을 것이라고 어떻게 확신 할 수 있습니까?


63

Shocken / Nisan 's : The Elements of Computing Systems 의 디지털 컴퓨터 구성에 대해 조금 읽었습니다 . 그러나이 책은 컴퓨터의 특정 전기 측면에 대해서는 아무 것도 말하지 않습니다. 예를 들어 0과 1은 전압이 [0, 0.9) 간격이면 0으로 표시됩니다. 간격 [0.9, 1.5)에서 1입니다 (전압은 다를 수 있습니다, 나는 단지 예를 보여줍니다).

그러나 나는 컴퓨터 내부의 전기 변동성 [1]으로 인해 0이 실수로 1이 될 수없는 방식으로 전기 전압을 "잘 동작하는"상태로 유지하는 것을 읽지 못했다. 전압이 0.9에 가까울 수 있으며 임계 값을 초과하지 않도록 어떻게해야합니까?

[1] : 존재한다고 가정합니다.


7
전류가 0.9에 가깝지 않기 때문에 전류는 0.9에 가깝지 않습니다.
user253751

7
사물은 0.9에 가까운 전류를 출력하지 않도록 설계 되었기 때문입니다. "노트북이 50 기가 볼트까지 충전되지 않았다는 실증적 인 증거가 있습니다. 왜 그렇지 않습니까?" 그럴 이유가 없기 때문에 간단합니다.
user253751

13
Nitpick : 대부분의 디지털 로직은 전류가 아닌 전압을 사용하여 논리적 상태를 나타냅니다.
duskwuff

11
일화 적 증거 : 2011 년에 나는 5 년 동안 잘 작동하는 하드 디스크의 파일을 약간 교환했습니다.
PlasmaHH

7
이러한 우발적 인 스위치는 악용 될 수 있습니다. 구글의 설명 은 흥미로운 사례이다. "비트 X를 1로 설정"에 대한 실제 API가 "비트 X를 1로 설정하고 때로는 실수로 비트 Y를 1로 설정"인 경우 보안을 훨씬 더 어렵게 만듭니다. 오버 클럭 된 머신의 경우에도 매우 일반적입니다. 한 회사가 실제로 하드웨어가 게임을 실행하기에 충분히 신뢰할 수 있는지 확인하기 위해 알려진 결과를 가진 많은 계산 (모든 프레임)을 추가 한 것을 기억합니다.
Brian

답변:


100

전압이 간격 [0, 0.9)에 있으면 0과 1이 전압으로 표현된다고 종종 말합니다. 전압이 간격 [0.9, 1.5)에 있으면 1 (1)입니다. 전압이 다를 수 있습니다 (예를 들어 설명합니다).

어느 정도까지는 비현실적인 예제를 사용하여이 문제를 주로 만들었습니다. 실제 회로에서 논리 로우와 하이 사이에는 훨씬 더 큰 간격이 있습니다.

예를 들어, 5V CMOS 로직은 로직 로우의 경우 0-0.2V, 로직 하이의 경우 4.7-5V를 출력하며 1.3V 이하 또는 3.7V 이상을 지속적으로 수용합니다. 즉, 입력보다 출력의 마진이 훨씬 좁으며, 논리 로우 신호 (<1.3V)에 사용될 수있는 전압과 논리 하이 (> 3.7V)에 사용될 수있는 전압 사이에 큰 차이가 있습니다. . 이것은 모두 노이즈를 허용하고 설명하려는 우발적 인 스위칭을 방지하기 위해 특별히 고안되었습니다.

다음은 interfacebus.com 에서 빌린 다양한 로직 표준의 임계 값을 시각적으로 나타낸 것입니다 .

논리 레벨 임계 값] [1]

각 열은 하나의 논리 표준을 나타내며 세로 축은 전압입니다. 각 색상은 다음과 같습니다.

  • 주황색 :이 범위의 전압은 논리적 최고 값으로 출력되며 논리적 최고 값으로 허용됩니다.
  • 연한 녹색 :이 범위의 전압은 논리적 높은 값으로 허용됩니다.
  • 분홍색 / 파란색 :이 범위의 전압은 일관되게 해석되지 않지만 분홍색 영역의 전압은 일반적으로 높은 것으로 해석되고 파란색 영역의 전압은 일반적으로 낮습니다.
  • 청록색 :이 범위의 전압은 논리적으로 낮습니다.
  • 노란색 :이 범위의 전압은 논리 로우에 대해 출력되며 논리 로우로 해석됩니다.

4
좋은 대답이지만 더 완벽 할 수 있다고 생각합니다. 노이즈에 대한 내성 만 다루거나 오히려 보호합니다. 디지털 오류를 책임지는 다른 메커니즘과 보호 수단이 많이 있습니다. 좋은 점은, 나는 내 대답에서 소음에 대한 면역력을 다루지 않았다는 것입니다 :)
Mister Mystère

1
@ MisterMystère 사실입니다! 오류 수정은 일종의 큰 주제이며 단일 답변으로 모든 것을 다룰 수는 없습니다.
duskwuff

1
@ MisterMystère : 음, "잡음"은 모든 종류의 확률 적 오류 소스를 포함하는 용어입니다. EM 간섭 및 우주 방사선의 예는 "소음"범주에 속합니다. 디지털 오류의 다른 원인은 결정 론적 원인으로, "버그"라고합니다. 그러나이 질문은 실수로 인한 오류에 관한 것입니다.
Ben Voigt

세 번째 글 머리 기호에서 색상이나 논리가 바뀌 었다고 생각합니다. 분홍색은 낮아야하고 파란색은 높아야합니다.
Guill

@Guill Huh? 분홍색 영역은 V_T보다 높으므로 신뢰할 수 없을 정도로 논리적으로 취급됩니다.
duskwuff

65

우리는 할 수 없습니다. 데이터에 검사를 추가하여 오류 가능성을 줄입니다. 확인할 데이터 유형에 따라 하드웨어 또는 소프트웨어를 통해 수행 할 수 있으며 직렬 스트림의 간단한 체크섬 비트에서 순환 상태 머신에 이르기까지 어떤 형태로든 특정 시간 만 전환 할 수 있습니다.

하지만 악순환이지 않나요? 데이터 확인 담당 회로가 데이터와 동일한 장애에 의해 영향을받지 않고 오 탐지를 어떻게 보장 할 수 있습니까? 다른 것을 추가 하시겠습니까? 결국 아주 적은 이득으로 어떻게 이것이 비싸 질 수 있는지 알 수 있습니다.

문제는 시스템을 얼마나 신뢰할 수 있는가? 사용 가능한 가장 안정적인 컴퓨터 시스템을 포함하는 위성 (예 : 때때로 동일하지 않은 시스템의 중복성 및 투표에 의존) : 세 대의 다른 컴퓨터가 세 명의 다른 사람에 의해 세 가지 다른 방식으로 코딩 된 동일한 알고리즘을 실행합니다. 컴퓨터 중 다른 컴퓨터와 다른 결과가 나오면 컴퓨터가 다시 시작됩니다 (다시 발생하면 격리 됨). 그러나 두 대의 컴퓨터에 동시에 결함이 있으면 잘못된 컴퓨터가 다시 시작 / 분리됩니다. 일반적으로 "콜드 리던던시"로 충분합니다. 기본 및 보조 회로가 구현되고, 일종의 (보호되지 않은) 모니터링 회로에서 오류가 감지되고 보조 회로가 교체 될 때까지 기본이 실행됩니다. 오류 일 경우 RAM에서 코드를 다시 실행하여 데이터를 새로 고칠 수 있습니다. 선을 그릴 위치를 현명하게 결정해야합니다 .100 % 신뢰할 수있는 오류 감지 회로를 만드는 것은 불가능합니다.

위성 (특히 높은 고도 또는 Van Allen 벨트) 및 원자력 발전소 또는 기타 방사성 환경의 컴퓨터는 특히 (키워드 :)에 영향을받습니다. 고 에너지 입자가 반도체의 결정 격자와 충돌하거나 그에 의해 흡수되기 때문에 단일 이벤트의 혼란 또는 래치 업 . 이 분야를 다루는 책은 확실히 최선의 방법입니다. 방사선으로 인한 변위 손상으로 인해 페인트가 열화되므로 들어오는 방사선으로 인해 반도체가 손상되거나 뒤집힐 수 있음을 완전히 이해할 수 있습니다.


2
'악순환'을 쓰려고했는지 확실하지 않지만 '비스 쿠스 서클'은 똑같이 재미있게 들립니다.
svavil

1
실제로 그것은 눈에 띄는 원 이었지만 점성 원은 나를 웃게 만들었습니다 :)
Mister Mystère

1
n 비트의 단일 비트 오류를 ​​찾아서 수정할 수 있으려면 log n 비트 만 필요합니다.
Thorbjørn Ravn Andersen

1
이것은 방사성 화합물에 노출 된 컴퓨터의 하드웨어 오류를 설명하기위한 프로그램 작성에 관한 최근의 질문을 상기시킵니다 : stackoverflow.com/questions/36827659/…
Pharap

세 가지 '그룹'(또는 그 이상)이 다른 방식으로 동일한 것을 코딩하고있는 위성에 대해서는 몰랐습니다.
cools

33

단일 사건 은 더 이상 우주 나 항공기의 문제 가 아닙니다. 우리는 그것들이 10 년 이상, 아마도 지금까지 2 년 동안 표면에서 일어나는 것을보고 있습니다.

언급했듯이, 적어도 우주 응용 분야에서 우리는 트리플 투표를 사용하여 화를 처리합니다 (각 비트는 실제로 3이며 2/3 투표가 승리하므로 다른 하나가 변경되면 다른 2는 그것을 처리합니다). 그런 다음 ECC 또는 EDAC (예 : 단일 이벤트 업데이트를 청소하기 위해 예측 된 단일 이벤트 업데이트 속도보다 높은 속도로 RAM을 통과하는 스크러버 포함) (실제로 3 분의 2를 푸시하는 것은 잘못된 투표).

그런 다음 총 복용량이 있습니다. 시간이 지남에 따라 재료가 작동하기에는 너무 방사성 물질이되기 때문에 차량의 수명을 초과하기에 충분한 재료를 사용하십시오. 일반적으로 표면에 대해 걱정할 것이 없습니다. (그리고 래치 업) 3 개 / 복수의 로직 세트를 병렬로 사용하는 것은 전통적인 rad-hard 기술을 사용할 필요가없는 방법이며, 잘 작동하는지 확인할 수 있습니다.

우주를 위해 물건을 만드는 법을 아는 사람들은 대부분 은퇴하거나 이사를 했으므로 현재 우주 쓰레기를 만드는 많은 프로그램이 있습니다. 또는 모든 작업을 수행하고 통제 된 재진입 및 소각을 시도하는 대신, 지구 제품과 같은 공간을 처리하는 것은 이제 모든 별자리에서 일정량의 공간 쓰레기를 예상합니다.

우리는 표면에 화를냅니다. 구입 한 모든 메모리 스틱 ( DRAM )에는 FIT, Failures In Time이 있으며 RAM이있는 칩 (모든 프로세서 및 기타 프로세서)에는 FIT 사양 (RAM (SRAM) 블록)도 있습니다. RAM은 밀도가 높고 더 작은 트랜지스터를 사용하므로 내부적으로 생성되거나 외부에 더 취약합니다. 대부분의 경우 데이터, 비디오 시청 등을 위해 사용하는 메모리가 쓰여지고 읽히고 다시 사용되지 않아서 화를 내기에 충분히 오래 걸리기 때문에 알지 못하거나 신경 쓰지 않습니다. 프로그램이나 커널을 보유한 것과 같은 일부 메모리는 더 위험합니다. 그러나 우리는 오랫동안 컴퓨터를 재부팅하거나 전화를 재설정 / 재부팅한다는 아이디어에 오랫동안 사용되어 왔습니다 (일부 전화 / 브랜드에서는 정기적으로 배터리를 정기적으로 제거해야합니다). 이러한 혼란이나 나쁜 소프트웨어 또는 조합 이었습니까?

개별 제품의 FIT 번호는 해당 제품의 수명을 초과 할 수 있지만 대규모 서버 팜을 사용하면 모든 RAM 또는 칩 등을 고려하고 MTBF는 몇 년 또는 그 이후의 주문에서 몇 일 또는 몇 시간으로 이동합니다. 농장. 그리고 당신은 ECC가 당신이 할 수있는 것을 커버 할 수 있습니다. 그런 다음 장애 조치로 처리로드를 분배하여 태스크를 완료하지 못한 시스템 또는 소프트웨어를 처리합니다.

솔리드 스테이트 스토리지에 대한 요구와 회전하는 매체로부터의 이동은 이와 관련된 문제를 일으켰다. SSD (및 기타 비 휘발성 스토리지)가 더 빠르고 저렴하게 사용되는 스토리지는 우리가 원하는 것보다 훨씬 더 휘발성이며 EDAC에 의존합니다. 데이터가 없으면 데이터가 손실되기 때문입니다. 스토리지의 속도, 비용 및 수명의 균형을 맞추기 위해 수학을 수행하면서 많은 추가 비트를 투입하고 전체를 절약합니다. 우리가 다시 돌아가는 것을 보지 못했습니다. 사람들은 작은 패키지에 적합하고 제품 가격을 지배하지 않는 비 휘발성 스토리지를 어느 곳에서나 원합니다.

디지털 회로에 트랜지스터를 사용하기 시작한 날부터 현재까지 정상적인 회로에 이르기까지 트랜지스터의 선형 부분을 통과하고 스위치로 사용하여 레일 사이를 약간 초과하여 두드려서 붙지 않도록합니다. . 벽의 전등 스위치와 마찬가지로 스프링이 나머지 부분을 돕고 벽을 고정시키는 절반 이상으로 뒤집습니다. 이것이 우리가 디지털을 사용하고 선형 지역에서 살려고하지 않는 이유입니다. 그들은 일찍 시도했지만 실패했습니다. 교정 상태를 유지할 수 없었습니다.

따라서 트랜지스터를 레일에 꽂으면 다음 클럭 사이클에 의해 신호의 양쪽이 안정화됩니다. 칩 설계를 분석 할 때 설계 상 타이밍에 한계가 있음을 확인하기 위해 큰 고통을 겪고 현재의 툴이 예전보다 훨씬 더 우수합니다. 그런 다음 각 웨이퍼의 각 다이 (패키징 후 및 / 또는 패키징 후)를 테스트하여 각 칩이 양호한 지 확인합니다.

칩 기술은 실험에 기반한 통계에 크게 의존합니다. CPU를 오버 클로킹하면, 그 마진을 높이고 광고 된 클럭 속도, 온도 등을 유지하며 문제가 발생할 가능성이 크게 줄어 듭니다. 3GHz xyz 프로세서는 단순히 4GHz에서 실패했지만 3GHz에서 통과 한 4GHz 칩입니다. 부품은 기본적으로 생산 라인에서 속도 등급이 매겨집니다.

그런 다음 칩이나 보드 사이에 연결이 있으며 문제도 있습니다. 표준 및 보드 설계 등을 만들어 이러한 인터페이스의 오류를 완화하는 데 많은 시간과 노력이 필요합니다. USB , 키보드, 마우스, HDMI , SATA 등 보드의 모든 흔적도. 보드 안팎에서 누화 문제가 있습니다. 다시 말하지만, 처음부터 문제를 피하는 경험뿐만 아니라 도구를 사용하면 많은 도구를 사용할 수 있지만, 도구와 도구가 완전히 관여하지 않는 다른 방법이 있습니다.

공간조차도 완벽한 기술은 없습니다. 제품의 충분한 비율이 제품의 예상 수명을 충분히 커버해야하기에 충분해야합니다. 스마트 폰의 일부는 최소 2 년 동안 스마트 폰을 만들어야합니다. 오래된 파운드 리나 기술은 실험적인 데이터가 많고보다 안정적인 제품을 생산할 수 있지만 속도가 느리고 새로운 디자인이 아닐 수 있습니다. 최첨단은 모든 사람을위한 도박입니다.

귀하의 특정 질문에, 신호의 각 끝에있는 트랜지스터는 선형 영역을 통해 빠르게 밀려 레일 중 하나에 기대어 있습니다. 경로의 끝에있는 시계가 래치하기 전에 고정 될 것임을 결정하기 위해 모든 조합 경로에 대해 분석이 수행되므로 실제로 0 또는 1이됩니다. 분석은 실험을 기반으로합니다. 제품 라인의 첫 번째 칩은 디자인 경계를 넘어서며 , schmoo 플롯 은 디자인에 여유가 있는지 확인하기 위해 만들어집니다. 공정에 대한 변형이 이루어지고 및 / 또는 느리고 빠른 칩을 나타내는 개별 후보가 발견된다. 프로세스가 복잡하고 일부는 더 빨리 실행하지만 더 많은 에너지를 사용하거나 더 느리게 실행하는 등 많은 자료를 가지고 있습니다.

그것들을 여백까지 밀어 넣습니다. 그리고 기본적으로 디자인이 생산에 들어가도 괜찮은 따뜻한 퍼지 느낌을 얻습니다. JTAG / 경계 스캔은 각 래치 된 상태 사이에서 칩을 통해 임의의 패턴을 실행하여 조합 경로가 설계에 적합한 지 확인하는 데 사용됩니다. 문제가있는 경우 일부 직접 기능 테스트도 수행 될 수 있습니다. 첫 번째 실리콘에 대한 추가 테스트 및 제품이 양호한 지 확인하기위한 임의 테스트. 고장이 발생하면 생산 라인에서 더 많은 기능 테스트로 되돌아 갈 수 있습니다. 통계 / 백분율에 크게 의존합니다. 1/1000000 나쁜 사람들은 괜찮거나 1/1000 또는 무엇이든 될 수 있습니다. 그것은 당신이 얼마나 많은 칩을 생산할 것이라고 생각 하느냐에 달려 있습니다.

이 취약점은 여기 및 다른 사람들과 관련이 있습니다. 먼저 칩 자체, 디자인 및 프로세스가 얼마나 좋았으며 마진에 얼마나 근접한지는 구입 한 제품에서 특정 칩의 가장 약한 경로입니다. 가장자리에 너무 가까운 경우 온도 변화 또는 기타로 인해 타이밍 문제가 발생할 수 있으며 비트는 1 또는 0으로 설정되지 않은 데이터를 래치합니다. 그런 다음 단일 이벤트가 발생합니다. 그리고 소음이 있습니다. 다시 언급 한 것들 ...


4
첫 번째 단락은 항공 우주 환경에 더 이상 문제가없는 것처럼 들리지만 SEU는 더 이상 해당 환경에서만 경험하지 않는다고 생각합니다.
W5VO

SEU는 일부 중립이 자유 중성자 활동과는 별도로 우라늄 붕괴 체인의 일부이기 때문에 BGA의 SnPb 솔더로 인해 발생할 수 있습니다.
피터 스미스

@ W5VO, 예, 방사선으로 인한 혼란은 더 이상 공간 문제가 아니라 표면까지 문제가된다는 것을 의미했습니다. 우주만큼 나쁘지는 않지만 존재합니다.
old_timer

1
일부 DEC 미니 컴퓨터 버스는 실제로는 전이성에 문제가 있음을 기억합니다. 그것은 당신이 지명 한 비트 오류에 대한 뚜렷한 메커니즘입니다. 아님?
davidbak

2
@davidbak : 메타 스타 빌리티 (metastability)는 최근 몇 년 동안 일부 입력이 낮거나 높은지 여부에 따라 몇 비트 값이 발생하는 경우 입력과 일치하는 방식으로 모두 함께 전환되지 않을 수있는 가장 일반적인 효과 인 불쾌한 문제입니다. 낮거나 높지 않은 방식으로 두 행동의 임의의 혼합을 산출 할 수 있습니다. 예를 들어, 버튼을 눌렀을 때 코드가 분기되어야하는 경우, 프로그램 카운터 비트는 버튼을 눌렀거나 눌리지 않은 경우의 값을 임의로 혼합하여 보유 할 수 있습니다.
supercat

12

간단한 답변을받은 경우 :

컴퓨터의 각 디지털 구성 요소는 입력에서보다 출력에서 ​​더 제한됩니다. 예를 들어 0V에서 2V까지의 "입력"값은 0으로 받아 들여지지 만 "출력"은 항상 0에서 0.5V 범위에 있습니다. (실제 값에 대해서는 duskwuff의 답변을 참조하십시오.)

이는 각 구성 요소가 선을 따라 발생한 일부 편차 또는 노이즈를 "수정"하는 데 도움이됨을 의미합니다. 물론, 잡음이 충분히 크면 시스템이 보상 할 수 없습니다. 고 방사선 환경의 컴퓨터는 1이 0으로 바뀌거나 그 반대의 영향을받는 경우가 많습니다.

기본적으로 컴퓨터는 특정 수준 의 소음 / 간섭 을 견딜 수 있도록 설계되었으므로 대부분의 실제 목적에 충분합니다.


8

이론적으로 열 (및 기타) 노이즈로 인해 신호가 0과 1 사이에서 변경 될 수 있지만 극히 드 extremely니다.

디지털 회로는 '노이즈 마진'이라는 속성으로 설계되었습니다. 출력 반전 상태 전에 입력을 변경해야하는 양입니다. 일반적으로 CMOS 회로에서 이것은 공급 전압의 약 50 %입니다. 이러한 회로에서 피할 수없는 열 잡음 (0 켈빈 이상의 온도에서 전자가 움직이면 발생)은 <1 mV의 잡음을 생성하며 이러한 스파이크가 500 mV를 초과 할 가능성은 매우 작습니다.

디지털 (예 : CMOS) 게이트에는 게인 및 채도 특성이 있습니다. 이것은 입력 신호가 범위의 중간에 가까울 때 출력이 빠르게 변하지 만 (높은 게인), 극한에 가까우면 느리게 변한다는 것입니다. 그 결과 입력 신호가 레일에 '가까워지면 출력이 더 가까워집니다. 즉, 노이즈 증폭 되지 않습니다 .

위에서 언급 한 다른 기능 (오류 수정 등)은 오류가 발생하더라도 전파되지 않음을 의미합니다.


4

통신 채널 및 마그네틱 스토리지 (및 때로는 RAM)와 같은 오류가 발생하기 쉬운 시스템에서는 체크섬, CRC 또는 ECC가 저장되어 불량 데이터를 거부하거나 작은 오류를 수정합니다.

일반적으로 이진 시스템은 이것이 불가능하도록 설계되었지만, 수백만 또는 수십억 * 배의 우주 광선이나 잡음으로 인해 선을 통해 물건을 조금씩 움직일 수 있으므로 오류를 감지하고 수정하여 부패를 유지해야합니다. 컴퓨터에 심각한 영향을 미치지 않습니다.

* 통신 채널은 훨씬 더 높은 오류율을 가질 수 있습니다!


4

컴퓨터 하드웨어가 더욱 강력하고 신뢰할 수있게되었습니다. 그러나 간단한 대답으로는 하드웨어가 너무 광범위합니다. 그러나 일반적인 데스크톱 컴퓨터와 엔터프라이즈 서버 컴퓨터 간에는 신뢰성 차이가 있다는 것을 알고있을 수도 있습니다. 서버 하드웨어에 대한 질문 / 답변 스레드를 찾았습니다 . 서버 비용은 비슷한 데스크 탑보다 몇 배나 비쌉니다. 비용은 예기치 않게 "1과 0을 전환"할 가능성이 몇 배 적은 하드웨어 개선의 결과입니다.

그러나 하드웨어는 이야기의 절반에 지나지 않습니다. 컴퓨터는 소프트웨어를 사용하여 예기치 않은 오류로부터 데이터를 보호 할 수도 있습니다. 해밍 코드 는 적은 양의 추가 데이터를 추가하여 적은 수의 오류를 감지 할뿐만 아니라 수정할 수있는 예입니다.


신뢰성이 밀도를 위해 거래되는 MLC 플래시를 제외하고
Jasen

3

거기 되는 방법 공통 논리 비트가 될 확률을 최소화하는 데 사용되는 스위치를 실수 (0~1 또는 0~1)는.
첫 번째가능한 0과 1에 대해 정의 된 전압 레벨 사이에 큰 간격 을 제공하는 것 입니다. 언급했듯이 0은 전압 레벨 <.9v로 정의되고 1은 전압 레벨> 2.9v로 정의됩니다 (.9에서 1.5로 말하지 않음). 이것은 2v의 전압 갭을 남깁니다. 이것은 비트의 상태를 "실수로"전환하기 전에 신호 전압이 200 % 변화 해야한다는 것을 의미한다 (매우 드물다). 두 번째"시계"입니다
논리 신호. "우발적 인"전압 / 노이즈는 랜덤하고 수명이 짧기 때문에 특정 (및 짧은) 간격으로 만 상태 변경을 허용함으로써 클럭시 "변화"에 도달 할 확률이 최소화됩니다.

물론 필요한 신뢰도 (ECD, ECC 등)에 따라 다른 방법과 방법이 사용됩니다.


2

좋은 공학.

데이터 손상 을 방지 하거나 데이터를 충분히 방지 할 수없는 경우 수정 하기 위해 많은 노력을 기울이고 있습니다 (예 : ECC 메모리 ).

데이터 손상의 원인은 다음과 같습니다.

  • 전기적으로 시끄러운 환경
  • 전력 관련 문제
  • 타이밍 문제 (예 : 클럭과 데이터 라인 간 또는 두 개의 차동 라인 간)
  • 전기 누화

요컨대, 많은 엔지니어링이 디지털 설계에 적용되어 소프트웨어 엔지니어는 '0'은 '0'을, '1'은 '1'을 간단히 가정 할 수 있습니다.


물론 ECC 메모리는 복구 할 수있는 것보다 더 많은 비트가 손상되면 NMI (Non-maskable Interrupt) 트리거와 같은 재미있는 작업을 수행 할 수도 있습니다. 현대 ECC RAM의 경우 이것은 64 비트에서 1 비트 이상의 오류라고 생각합니다 (인코딩은 단일 비트 오류를 ​​수정하고 2 비트 오류를 ​​감지하지만 수정할 수는 없습니다). 데이터에 관심이있는 상황에서 복구 할 수없는 문제가있는 경우 즉시 시스템을 중지하면 데이터를 신뢰할 수 있는지 (또는 더 이상 신뢰할 수 없다는 것을 알지 못함) 알지 못하는 것보다 절뚝 거리는 것이 좋습니다.
CVn

2

실제 전자 컴퓨터의 두 가지 기본 측면은 다음과 같습니다.

  1. 매우 안정적인 전원 공급 장치

  2. 시간 (보통 클럭 주파수 또는 지연으로 정의)

컴퓨팅 시스템 용 전원 공급 장치는 매우 엄격하게 지정되고 규제됩니다. 실제로 모든 컴퓨팅 시스템의 경우 전원 공급 장치는 일반적으로 전원 공급 장치 (또는 배터리 충전기), 메인 보드 메인 입력, 도터 카드 입력 및 칩 자체에서 여러 번 조정됩니다.

이것은 많은 노이즈 (전기적 휘발성)를 제거합니다. CPU가 보는 것은 로직을 처리하는 데 사용할 수있는 매우 안정적이고 비 휘발성 인 전압 소스입니다.

중간 값의 다음 주요 소스 (0 또는 1로 간주되는 전압)는 값이 전환 될 때 발생합니다. 1이 0 (하강 시간)으로 변경되거나 0이 1 (상승 시간)로 변경됩니다. 회로의 출력을 수락하기 전에 전환이 완료 될 때까지 기다리는 것을 제외하고는 실제로 많은 것을 할 수 없습니다. 전환이 완료되기 전에 회로의 출력은 가비지로 간주됩니다.

엔지니어링에서이 문제에 대한 해결책은 종이에 결과가 올 때까지 얼마나 기다려야하는지 간단히 작성하는 것입니다. 이것이 CPU 클럭 주파수의 원점입니다. CPU를 실행할 수있는 GHz 수는 CPU의 상태 변경이 안정화되는 데 걸리는 시간에 따라 다릅니다.

실제로 세 번째 변동성의 원인은 회로에 대한 입력입니다. 이 문제에 대한 해결책은 위의 일반적인 문제와 비슷합니다. 시스템으로 들어오는 신호 (전압 또는 전류)가 안정적인지 확인하고 신호가 안정화 될 수있는 충분한 시간이 있는지 확인하십시오.

문제의 두 번째 부분은 처리하기 전에 입력을 래치 또는 레지스터로 샘플링하는 이유입니다. 신호가 쓰레기 일 수 있습니다. 그러나 처리 될 때 레지스터 내부에 0 또는 1 가비지가됩니다. 문제의 첫 부분은 보증에 대한 것입니다.


2

하지만 전기 전압이 0이 실수로 인해 전기 변동성에 하나가되지 않을 수있는 방법으로 "잘 행동"계속 무엇을 읽어 본 적이 컴퓨터 내부. 전압이 0.9에 가까울 수 있습니다. 그러면 임계 값을 초과하지 않도록 어떻게해야합니까?

피드백은 문턱 전압에 접근하는 것을 방해하고 강제로 동작하도록합니다.

이것은 일반적으로 일종의 래칭 회로, 종종 클럭킹 래칭 회로의 형태입니다.

간단한 예로, flip-flop을 고려하십시오 . 출력이 추가 입력으로 로직 회로에 피드백되도록 설계되었습니다. 따라서 요소 내의 논리는 출력되는 내용을 알고 있으며 다른 입력이이를 반대 상태로 만들 때까지 동일한 값을 계속 출력합니다.

회로는 트랜지스터가 완전히 켜지거나 완전히 꺼 지도록 설계되었으므로 항상 전원 공급 장치 및 접지 한계 근처에서 출력됩니다. 0.9V 레벨 근처로 이동하지 않으며, 전환시 빠르고 완벽하게 움직입니다. 다른 상태로. 회로는 두 상태 사이의 아날로그 영역에서 작동하지 않도록 특별히 설계되었습니다.


0

정상적인 작동 조건에서 0과 1은 거의 글리치가 아니지만 작동 조건이 좋지 않은 경우 (예 : 배터리 부족 또는 AC 전원 연결이 끊어지고 커패시터의 전압이 떨어지는 짧은 시간) 이상한 일이 발생하고 0과 1이 엉망이됩니다. 항상.

따라서 잠그고 싶지 않은 방어 코드 (소프트웨어 또는 HDL)를 작성하는 경우 항상 숫자 글리치 할 수있는 경우를 고려해야합니다 . 예를 들어

while(1)
{
  i++;
  do something here
  if (i == 10) break;
}

더는 변경 ==>= 불과 경우 의 값 i9 11 또는 때까지 루프를 종료 결코 원인이 10보다 큰 숫자에서 점프를 i(40 억 반복 한 후 말) 0 주위에 래핑합니다.

while(1)
{
  i++;
  do something here
  if (i >= 10) break;
}

그런 일이있어, 날 믿어


만약에 i일부 대형 음수로 점프?
Jasen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.