Jak możemy być pewni, że komputery nigdy nie zamienią przypadkowo 0 na 1?


63

Przeczytałem trochę o budowie komputera cyfrowego w Shocken / Nisan's: The Elements of Computing Systems . Ale ta książka nie mówi nic o pewnych aspektach elektrycznych w komputerach, na przykład: Często mówi się, że zera i jedynki są reprezentowane przez napięcie, jeśli napięcie jest w przedziale [0, 0,9), to jest to 0. Jeśli napięcie jest w przedziale [0,9, 1,5), to jest 1 (napięcia mogą się różnić, podam tylko przykład).

Ale nigdy nie czytałem, co utrzymuje napięcie elektryczne na „dobrym poziomie” w taki sposób, że 0 nigdy nie mogłoby przypadkowo stać się 1 z powodu zmienności elektrycznej [1] wewnątrz komputera. Być może napięcie może być bardzo bliskie 0,9, a co zrobić, aby uniknąć przekroczenia progu?

[1]: Załóżmy, że istnieje.


7
Prąd nigdy nie jest bardzo bliski 0,9, ponieważ nic nigdy nie czyni prądu bardzo bliskim 0,9.
user253751

7
Ponieważ rzeczy są zaprojektowane tak, aby nie wytwarzać prądów bardzo bliskich 0,9. Równie dobrze możesz zapytać: „Mam solidne dowody empiryczne, że mój laptop nie jest obciążony do 50 gigawolitów; dlaczego tak nie jest?” Po prostu dlatego, że nie ma żadnego powodu.
user253751

13
Nitpick: Większość logiki cyfrowej wykorzystuje napięcia, a nie prądy, do reprezentowania stanów logicznych.
duskwuff

11
niepotwierdzone dowody: w 2011 roku trochę zamieniłem plik na dysku twardym, który działał dobrze przez 5 lat.
PlasmaHH

7
Te przypadkowe przełączniki można wykorzystać. Wyjaśnienie Google jest tego interesującym przykładem. Zdecydowanie sprawia, że ​​bezpieczeństwo jest znacznie trudniejsze, gdy prawdziwy interfejs API dla „Ustaw bit X na 1” to „Ustaw bit X na 1, a czasami przypadkowo ustaw bit Y na 1”. Staje się to również bardzo powszechne w przypadku podkręconych maszyn. Pamiętam, że jedna firma faktycznie dodała kilka obliczeń (każda klatka) ze znanymi wynikami, aby sprawdzić, czy sprzęt był wystarczająco niezawodny, aby uruchomić grę.
Brian

Odpowiedzi:


100

Często mówi się, że zera i jedynki są reprezentowane przez napięcie, jeśli napięcie jest w przedziale [0, 0,9), to jest to 0. Jeśli napięcie jest w przedziale [0,9, 1,5), to jest to 1 ( napięcia mogą się różnić, podam tylko przykład).

Do pewnego stopnia stworzyłeś ten problem głównie na nierealnym przykładzie. Istnieje znacznie większa różnica między logicznym niskim a wysokim w rzeczywistych obwodach.

Na przykład układ logiczny CMOS 5 V spowoduje wyjście 0-0,2 V dla niskiego poziomu logicznego i 4,7-5 V dla wysokiego poziomu logicznego i konsekwentnie zaakceptuje wszystko poniżej 1,3 V jako niskie lub coś powyżej 3,7 V jako wysokie. Oznacza to, że na wyjściach są znacznie ściślejsze marginesy niż na wejściach, a między napięciami, które mogą być użyte dla logicznie niskich sygnałów (<1,3 V), a tymi, które mogą być użyte dla wysokich logicznie (> 3,7 V), pozostaje ogromna przerwa. . Wszystko to ma na celu uwzględnienie hałasu i zapobieganie opisywanemu przypadkowemu przełączeniu.

Oto wizualna reprezentacja progów dla różnych standardów logicznych, które pożyczyłem od interfacebus.com :

Progi poziomu logicznego] [1]

Każda kolumna reprezentuje jeden standard logiczny, a oś pionowa to napięcie. Oto, co reprezentuje każdy kolor:

  • Pomarańczowy: Napięcia w tym zakresie są wyprowadzane dla logicznego wysokiego poziomu i będą akceptowane jako wysokie logiczne.
  • Jasnozielony: Napięcia w tym zakresie będą uznawane za logicznie wysokie.
  • Różowy / niebieski: Napięcia w tym zakresie nie będą interpretowane konsekwentnie, ale te w różowym obszarze zwykle będą interpretowane jako wysokie, a te w niebieskim obszarze będą zwykle niskie.
  • Niebieskawy zielony: Napięcia w tym zakresie będą akceptowane jako logicznie niskie.
  • Żółty: Napięcia w tym zakresie są wyprowadzane dla niskiego poziomu logicznego i będą interpretowane jako niskie logiczne.

4
Dobra odpowiedź, choć myślę, że może być bardziej kompletna: obejmuje ona jedynie odporność na (a raczej ochronę przed) hałasem. Istnieje wiele innych mechanizmów odpowiedzialnych za błędy cyfrowe i tyle samo środków ochrony. Dobrą rzeczą jest to, że nie udzieliłem odpowiedzi w odpowiedzi na hałas :)
Mister Mystère

1
@ MisterMystère To prawda! Korekta błędów jest jednak ogromnym tematem i nie byłbym w stanie ująć tego wszystkiego w jednej odpowiedzi.
duskwuff

1
@ MisterMystère: Cóż, „szum” jest terminem obejmującym wszystkie rodzaje źródeł błędów stochastycznych. Twoje przykłady interferencji elektromagnetycznej i promieniowania kosmicznego mieszczą się w kategorii „hałasu”. Jedyną inną przyczyną błędu cyfrowego jest deterministyczna, którą nazywamy „błędem”. Ale to pytanie dotyczy tylko przypadkowych błędów.
Ben Voigt

W trzeciej kuli wydaje mi się, że zmieniłeś kolory lub logikę. różowy powinien być niski, a niebieski powinien być wysoki.
Guill

@Guill Huh? Region różowy znajduje się powyżej V_T, więc nie będzie można go traktować jako logicznie wysoki.
duskwuff

65

Nie możemy Po prostu zmniejszamy prawdopodobieństwo błędów, dodając kontrole do danych. W zależności od rodzaju danych, które mają być sprawdzane, można to zrobić za pomocą sprzętu lub oprogramowania, i może przybierać dowolną formę, od prostych bitów sumy kontrolnej w strumieniach szeregowych do maszyn stanu cyklicznego, pozwalając na wykonanie tylko określonych przejść w danym momencie.

Ale to błędne koło, prawda? W jaki sposób możemy zagwarantować, że obwód odpowiedzialny za sprawdzanie danych nie zostanie naruszony przez te same zakłócenia co dane i dać wynik fałszywie dodatni? Dodajesz kolejny? Możesz zobaczyć, jak może to stać się dość drogie przy bardzo niewielkim zysku na końcu.

Pytanie brzmi: na ile chcesz, aby Twój system był niezawodny? Satelity, w których osadzone są niektóre z najbardziej niezawodnych dostępnych systemów komputerowych, na przykład czasami uciekają się do redundancji nieidentycznych systemów, a także głosów: trzy różne komputery mają ten sam algorytm kodowany przez trzy różne osoby na trzy różne sposoby, a jeśli jeden komputerów daje inny wynik niż dwa pozostałe, jest restartowany (a jeśli to się powtórzy, izolowany). Ale znowu, jeśli dwa komputery są wadliwe w tym samym czasie, niewłaściwy komputer zostanie ponownie uruchomiony / odizolowany. Zwykle wystarczy „zimna redundancja”: zaimplementowany jest obwód pierwotny i wtórny, obwód pierwotny działa do momentu wykrycia błędu przez jakiś (niechroniony) obwód monitorujący, a obwód wtórny zostaje zamieniony. Jeśli to tylko błąd w pamięci RAM kod można ponownie uruchomić, aby odświeżyć dane. Musisz tylko mądrze zdecydować, gdzie narysować linię, nie można stworzyć w 100% niezawodnego obwodu wykrywania błędów.

Satelity (szczególnie na dużych wysokościach lub w pasie Van Allena) i komputery w elektrowniach jądrowych lub w innych środowiskach radioaktywnych są szczególnie narażone (słowo kluczowe :) Pojedyncze zdarzenia zakłócające lub zatrzaskiwane z powodu zderzania się lub pochłaniania przez cząstki o wysokiej energii sieci krystalicznej półprzewodników . Książki o tych polach z pewnością będą najlepszym wyborem. Farba ulega degradacji w wyniku uszkodzenia w wyniku przemieszczenia spowodowanego promieniowaniem, więc jest całkowicie zrozumiałe, że półprzewodniki mogą zostać uszkodzone lub zaburzone również przez wpływające promieniowanie.


2
Nie jestem pewien, czy chciałeś napisać „błędne koło”, ale „lepki okrąg” brzmi równie zabawnie.
svavil

1
Właściwie to był widoczny krąg, ale lepki krąg mnie rozśmieszył :)
Mister Mystère

1
Tylko log n bitów jest w stanie zlokalizować i skorygować błąd pojedynczego bitu w n bitach.
Thorbjørn Ravn Andersen

1
Przypomina mi to ostatnie pytanie dotyczące pisania programów w celu uwzględnienia błędów sprzętowych w komputerach narażonych na związki radioaktywne: stackoverflow.com/questions/36827659/…
Pharap

Nie wiedziałem o satelitach, że trzy różne „grupy” (lub więcej) kodują to samo w inny sposób. Brzmi fajnie :)
kalmanIsAGameChanger

33

Niepokoje pojedynczymi zdarzeniami nie są już kwestią przestrzeni ani samolotów; widzieliśmy, jak zdarzają się na powierzchni od ponad dekady, może teraz dwóch.

Jak już wspomniano, przynajmniej w aplikacjach kosmicznych mamy do czynienia z zdenerwowaniem za pomocą potrójnego głosowania (każdy bit to tak naprawdę trzy, a dwie trzecie głosów wygrywa, więc jeśli jest taki, który się zmienia, pozostałe dwa to pokryją). A następnie ECC lub EDAC , z płuczkami, które przechodzą przez pamięć RAM z częstotliwością wyższą niż przewidywana częstotliwość aktualizacji pojedynczych zdarzeń, aby usunąć zakłócenia pojedynczych zdarzeń (te, które faktycznie popychają dwie trzecie głosów źle).

Następnie jest całkowita dawka; z czasem materiał staje się zbyt radioaktywny, aby mógł działać, więc zużywasz wystarczającą ilość materiału, aby przedłużyć żywotność pojazdu. Nie jest to coś, o co normalnie się martwimy na powierzchni. (I zatrzaśnięcie) Używanie trzech / wielu zestawów logicznych równolegle jest / było sposobem, aby spróbować nie musieć używać tradycyjnej technologii rad-hard, i cóż, możesz sprawdzić, jak dobrze to działa.

Ludzie, którzy kiedyś wiedzieli, jak robić rzeczy dla kosmosu, przeszli na emeryturę lub przenieśli się, więc mamy teraz wiele programów tworzących śmieci kosmiczne. Lub traktując kosmos jak produkty związane z ziemią, zamiast próbować zmusić wszystkich do pracy i mieć kontrolowane ponowne wejście i wypalenie, oczekujemy teraz pewnej ilości śmieci kosmicznych z każdej konstelacji.

Na powierzchni widzimy zdenerwowania. Każdy zakupiony Memory Stick ( DRAM ) ma FIT, Failures In Time, a każdy układ z pamięcią RAM (wszystkie procesory, wiele innych) również będzie miał specyfikację FIT (dla bloków RAM (SRAM)). Pamięć RAM jest bardziej gęsta i wykorzystuje mniejsze tranzystory, więc jest bardziej podatna na zdenerwowanie, tworzenie wewnętrzne lub zewnętrzne. Przez większość czasu nie zauważamy ani nie dbamy o to, że pamięć, której używamy do przechowywania danych, oglądania wideo itp. Jest zapisywana, odczytywana i nie jest ponownie wykorzystywana, zanim pozostanie wystarczająco długo, aby mieć zdenerwowanie. Część pamięci, na przykład zawierająca program lub jądro, jest bardziej ryzykowna. Ale od dawna przyzwyczailiśmy się do ponownego uruchamiania naszego komputera lub resetowania / ponownego uruchamiania telefonu (niektóre telefony / marki musiałyby Państwo regularnie usuwać baterię okresowo). Czy były to problemy, złe oprogramowanie lub połączenie?

Numery FIT dla twojego indywidualnego produktu mogą przekraczać okres użytkowania tego produktu, ale weź dużą farmę serwerów, weźmiesz pod uwagę całą pamięć RAM lub układy scalone lub cokolwiek innego, a MTBF przechodzi od lat lub zamówień po tym, do dni lub godzin, gdzieś w farma. I masz ECC, aby objąć to, co możesz z nich. Następnie rozkładasz obciążenie przetwarzania za pomocą przełączania awaryjnego, aby objąć maszyny lub oprogramowanie, które nie wykonuje zadania.

Pragnienie pamięci półprzewodnikowej i odejście od spinningowych mediów stworzyło związany z tym problem. Pamięć masowa używana na dyski SSD (i inne nieulotne), aby uzyskać szybsze i tańsze, jest znacznie bardziej niestabilna niż byśmy tego chcieli i zależy od EDAC, ponieważ bez niej stracilibyśmy dane. Wrzucają wiele dodatkowych bitów i zajmują się tym wszystkim, robiąc matematykę, aby zrównoważyć szybkość, koszty i długowieczność przechowywania. Nie widzę nas zawracających; ludzie chcą wszędzie więcej nieulotnego miejsca do przechowywania, które mieści się w niewielkim opakowaniu i nie dominuje w cenie produktu.

Jeśli chodzi o normalne obwody, od pierwszych dni używania tranzystorów do obwodów cyfrowych do teraźniejszości, przechodzimy przez liniową część tranzystora i używamy go jako przełącznika, uderzamy go między szynami z pewnym nadmiarem, aby upewnić się, że się trzyma . Podobnie jak włącznik światła na ścianie, obracasz go o ponad połowę, a sprężyna pomaga reszcie i trzyma ją tam. Dlatego używamy technologii cyfrowej, a nie próbujemy żyć w regionie liniowym; próbowali wcześnie, ale się nie udało. Nie mogli zostać skalibrowani.

Więc po prostu trzaskujemy tranzystor w jego szyny, a obie strony sygnału ustabilizują się w następnym cyklu zegara. Podejmowane są wielkie wysiłki, a obecne narzędzia są znacznie lepsze niż kiedyś, przeprowadzając analizę projektu układu, aby zobaczyć, że z założenia istnieje margines czasu. Następnie przetestuj każdą matrycę na każdym waflu (tym i / lub po zapakowaniu), aby sprawdzić, czy każdy chip jest dobry.

Technologia Chip opiera się w dużej mierze na statystykach opartych na eksperymentach. Kiedy podkręcasz procesor, cóż, przesuwasz ten margines, pozostajesz w granicach reklamowanej częstotliwości zegara, temperatury itp., A twoje szanse są znacznie mniejsze. Procesor xyz 3 GHz to po prostu układ 4 GHz, który zawiódł przy 4 GHz, ale przeszedł na 3 GHz. Części są sortowane pod względem prędkości zasadniczo z linii produkcyjnej.

Następnie istnieją połączenia między układami scalonymi lub płytami, które również podlegają problemom, a wiele czasu i wysiłku poświęcane jest na tworzenie standardów i projektów płyt itp., Aby złagodzić błędy na tych interfejsach. USB , klawiatura, mysz, HDMI , SATA i tak dalej. Jak również wszystkie ślady na planszy. Na tablicy i poza nią masz problemy z przesłuchami; ponownie, dostępnych jest wiele narzędzi, jeśli ich używasz, a także doświadczenie w unikaniu problemów, ale jest to jeszcze jeden sposób, w którym możemy nie zauważyć, że zera i zera są w pełni zaangażowane.

Żadna z technologii, nawet kosmos, nie jest idealna. Musi być wystarczająco dobry, wystarczająca część produktu musi pokryć wystarczającą oczekiwaną żywotność produktu. Pewna część smartfonów musi przetrwać co najmniej dwa lata i to wszystko. Starsze odlewnie lub technologie mają więcej danych eksperymentalnych i mogą produkować bardziej niezawodny produkt, ale są wolniejsze i mogą nie być nowymi projektami, więc proszę bardzo. Najnowocześniejsze to po prostu hazard dla wszystkich.

Na konkretne pytanie tranzystory na każdym końcu sygnału są szybko przepychane przez ich region liniowy i przechylają się na jedną z szyn. Analiza jest przeprowadzana na każdej ścieżce kombinacyjnej, aby ustalić, że ustabilizuje się, zanim zegar na końcu ścieżki zatrzaśnie ją, tak że jest ona rzeczywiście równa zero lub jeden. Analiza oparta jest na eksperymentach. Pierwsze układy linii produktów są wypychane poza granice projektu, tworzonewykresy schmoo w celu ustalenia marginesu w projekcie. Wprowadzono zmiany w procesie i / lub znaleziono poszczególnych kandydatów, którzy reprezentują wolne i szybkie żetony. Jest to skomplikowany proces, a niektóre mają więcej materiału, inne mają mniej, pracują szybciej, ale zużywają więcej energii lub pracują wolniej itp.

Przesuwasz je również na margines. Zasadniczo możesz poczuć ciepłe, rozmyte wrażenie, że projekt jest w porządku, aby przejść do produkcji. JTAG / skanowanie granic są używane do uruchamiania losowych wzorów przez chipy między każdym stanem zatrzaśnięcia, aby zobaczyć, że ścieżki kombinacyjne są solidne dla projektu. W razie wątpliwości mogą również wystąpić ukierunkowane testy funkcjonalne. Dalsze testy pierwszego krzemu i być może losowe testy, aby upewnić się, że produkt jest dobry. Jeśli wystąpią awarie, może to popchnąć cię z powrotem do większej liczby testów funkcjonalnych na linii produkcyjnej. Zależy to w dużej mierze od statystyk / procentów. 1/1000000 źle wychodzących może być w porządku, 1/1000 lub cokolwiek; zależy to od tego, ile ich wyprodukujesz.

Luki w zabezpieczeniach są wymienione tutaj i wraz z innymi. Najpierw sam układ, jak dobry był projekt i proces, jak blisko marży jest najsłabsza ścieżka konkretnego układu w zakupionym produkcie. Jeśli zbyt blisko krawędzi, zmiana temperatury lub inna może powodować problemy z synchronizacją, a bity zatrzaskują dane, które nie ustabilizowały się na wartości jeden lub zero. Następnie występują problemy z pojedynczym zdarzeniem. A potem jest hałas. znowu rzeczy już wspomniane ...


4
W pierwszym akapicie brzmi to tak, jakby nie było już więcej problemów ze środowiskiem kosmicznym, podczas gdy myślę, że miałeś na myśli, że SEU nie są już doświadczane w takich środowiskach.
W5VO

Należy zauważyć, że SEU mogą być spowodowane lutem SnPb na BGA, ponieważ część ołowiu jest częścią łańcucha rozpadu uranu, zupełnie niezależnie od aktywności wolnego neutronu.
Peter Smith

@ W5VO, tak, miałem na myśli, że niepokoje spowodowane przez promieniowanie nie są już tylko problemem kosmicznym, są problemem aż do powierzchni. Nie tak zły jak w kosmosie, ale obecny.
old_timer 27.04.16

1
Wydaje mi się, że niektóre minikomputery DEC miały problemy z metastabilnością w praktyce. To odrębny mechanizm dla błędów bitowych od tych, które wymieniłeś, prawda? Albo nie?
davidbak

2
@davidbak: Metastabilność to paskudny problem, którego najczęstszym skutkiem jest to, że w przypadkach, gdy wartości kilku bitów zależą od tego, czy dane wejściowe były niskie lub wysokie w pewnym momencie w niedawnej przeszłości, nie wszystkie mogą się łączyć w sposób zgodny z danymi wejściowymi bycie niskim, ani w sposób spójny z byciem wysokim, ale zamiast tego może dawać dowolną mieszankę tych dwóch zachowań. Na przykład, jeśli kod ma rozgałęziać się po naciśnięciu przycisku, bity licznika programu mogą ostatecznie zawierać dowolną mieszankę wartości, które miałyby, gdyby przycisk został wciśnięty lub nie.
supercat 27.04.16

12

Jeśli szukasz prostej odpowiedzi:

Każdy element cyfrowy w komputerze jest bardziej ograniczony w produkowanych przez siebie wyjściach, niż w wejściach, które akceptuje. Na przykład dowolna wartość „wejściowa” od 0 V do 2 V zostanie zaakceptowana jako 0, ale „wyjściowa” wartość 0 zawsze będzie mieścić się w zakresie od 0 do 0,5 V. (Zobacz rzeczywiste wartości w odpowiedzi duskwuff).

Oznacza to, że każdy element pomaga „skorygować” niektóre odchylenia lub szumy, które wystąpiły wzdłuż linii. Oczywiście, jeśli hałas jest wystarczająco duży, system nie może tego zrekompensować. Komputery w środowiskach o wysokim promieniowaniu mogą często wpływać na zera zmieniające się na 0 i odwrotnie.

Zasadniczo komputery są zaprojektowane tak, aby tolerować pewien poziom hałasu / zakłóceń , co jest wystarczające do większości praktycznych celów.


8

Teoretycznie możliwa jest zmiana sygnałów między 0 a 1 z powodu szumu termicznego (i innych), jednak jest to bardzo mało prawdopodobne.

Obwody cyfrowe są zaprojektowane z atrybutem zwanym „marginesem szumu”. Jest to wartość, o którą jego wejście musi się zmienić, zanim stan wyjściowy zostanie odwrócony. Ogólnie w obwodach CMOS jest to około 50% napięcia zasilania. Nieunikniony hałas termiczny (pochodzący od elektronów poruszających się w dowolnej temperaturze powyżej 0 kelwinów) w tych obwodach generuje << 1 mV szumu, a prawdopodobieństwo, że kolce te mogą przekroczyć (powiedzmy) 500 mV, jest wyjątkowo małe.

Bramki cyfrowe (np. CMOS) mają charakterystykę wzmocnienia i nasycenia. Oznacza to, że gdy sygnał wejściowy znajduje się blisko środka zakresu, moc wyjściowa zmienia się szybko (wysokie wzmocnienie), ale gdy jest bliska skrajności zakresu, zmienia się powoli. Powoduje to, że gdy sygnał wejściowy znajduje się „blisko” szyn, sygnał wyjściowy jest jeszcze bliższy - oznacza to, że szum nie ulega wzmocnieniu.

Inne wymienione powyżej funkcje (korekcja błędów itp.) Oznaczają, że błędy, nawet jeśli wystąpią, nie będą się propagować.


4

W systemach podatnych na błędy, takich jak kanały komunikacji i pamięć magnetyczna (a czasami nawet RAM), przechowywana jest suma kontrolna, CRC lub ECC, aby odrzucić złe dane lub skorygować małe błędy.

Ogólnie rzecz biorąc, systemy binarne są zaprojektowane w taki sposób, że nie jest to możliwe, ale raz na kilka milionów lub miliardów * razy promień kosmiczny lub szum hałasu popychają rzeczy nad linią, wykrywanie / korekcja błędów jest konieczna, aby utrzymać uszkodzenie od poważnego wpływu na komputer.

* Kanały komunikacji mogą mieć znacznie wyższy poziom błędów!


4

Sprzęt komputerowy stał się bardziej niezawodny i niezawodny. Ale sprzęt jest o wiele za szeroki na proste odpowiedzi. Warto jednak wiedzieć, że istnieje różnica w niezawodności między zwykłym komputerem stacjonarnym a komputerem serwera korporacyjnego. Znalazłem ten wątek pytania / odpowiedzi na temat sprzętu serwera. Serwer będzie kosztował wiele razy więcej niż porównywalny blat biurka. Koszt jest wynikiem lepszego sprzętu, który jest prawdopodobnie kilkakrotnie mniej podatny na nieoczekiwane „przełączenie 1 i 0”.

Ale sprzęt to tylko połowa sukcesu. Komputery mogą również chronić dane przed nieoczekiwanymi błędami za pomocą oprogramowania. Kod Hamminga to przykład, w którym po dodaniu niewielkiej ilości dodatkowych danych można nie tylko wykryć, ale także poprawić niewielką liczbę błędów.


z wyjątkiem flasha MLC, w którym niezawodność jest wymieniana na gęstość,
Jasen

3

Istnieją dwa sposoby, które są powszechnie stosowane w celu zminimalizowania prawdopodobieństwa przypadkowego przełączenia bitu logicznego (od 0 do 1 lub od 1 do 0).
Pierwszy polega na zapewnieniu możliwie dużej przerwy między poziomami napięcia zdefiniowanymi dla 0 i 1, jak to możliwe . Jak wspomniałeś, 0 jest zdefiniowane jako poziom napięcia <0,9 V, podczas gdy 1 jest zdefiniowane jako poziom napięcia> 2,9 V (nie tak jak mówisz .9 do 1,5). Pozostawia to przerwę napięciową 2 V. Oznacza to, że napięcie sygnału musiałoby zmieniać się o 200% , zanim „przypadkowo” zmieni stan bitu (bardzo mało prawdopodobne).
Drugi polega na „taktowaniu”sygnały logiczne. Ponieważ „przypadkowe” napięcie / szum jest przypadkowe i krótkotrwałe, umożliwiając zmiany stanu tylko w określonych (i krótkich) odstępach czasu, prawdopodobieństwo uderzenia „zmiany” w czasie zegara jest zminimalizowane.

Istnieją oczywiście inne środki i metody, w zależności od wymaganego stopnia niezawodności (ECD, ECC itp.).


2

Dobra inżynieria.

Wiele wysiłku poświęca się projektowaniu, aby zapobiec uszkodzeniu danych lub poprawić je, gdy nie można go w wystarczającym stopniu zapobiec (np. Pamięć ECC ).

Do czynników, które mogą powodować uszkodzenie danych, należą:

  • hałaśliwe środowisko elektryczne
  • problemy związane z zasilaniem
  • problemy z synchronizacją (np. między zegarem a liniami danych lub między dwiema liniami różnicowymi)
  • rozmowa elektryczna

Krótko mówiąc, wiele inżynierii poświęcono projektom cyfrowym, dzięki czemu inżynierowie oprogramowania mogą przyjąć proste założenie, że „0” oznacza „0”, a „1” oznacza „1”.


I oczywiście pamięć ECC może również robić śmieszne rzeczy, takie jak wyzwalanie przerwania niemaskalnego (NMI), jeśli więcej bitów ulegnie uszkodzeniu, niż jest to możliwe do naprawy. Myślę, że w przypadku nowoczesnej pamięci RAM ECC jest to więcej niż jeden bit błędu w 64 bitach (kodowanie może korygować błędy jednobitowe i wykrywać, ale nie poprawiać błędów dwubitowych), ale mogę się mylić. W sytuacjach, w których dbasz o swoje dane, natychmiastowe zatrzymanie systemu, jeśli coś jest nie do naprawienia, może być lepszym rozwiązaniem niż utykanie, nie wiedząc, czy dane można ufać (lub gorzej, wiedząc, że nie można ufać).
CVn

2

Dwa podstawowe aspekty praktycznych komputerów elektronicznych to:

  1. Bardzo stabilny zasilacz

  2. Czas (zwykle definiowany jako częstotliwość zegara lub opóźnienie)

Zasilacze do systemów obliczeniowych są bardzo ściśle określone i regulowane. W rzeczywistości dla każdego systemu komputerowego zasilacz jest zwykle regulowany kilka razy: na zasilaczu (lub ładowarce), na głównym wejściu do płyty głównej, na wejściu do kart córek i wreszcie na samym chipie.

Eliminuje to dużo hałasu (zmienności elektrycznej). Procesor widzi bardzo stabilne, nielotne źródło napięcia, które może wykorzystać do przetwarzania logiki.

Kolejne główne źródło wartości pośrednich (napięcia pomiędzy tym, co uważa się za 0 lub 1) pojawia się, gdy wartości się zmieniają. Albo 1 zmienia się na 0 (czas opadania) lub 0 zmienia się na 1 (czas narastania). Naprawdę niewiele można na to poradzić, z wyjątkiem oczekiwania na zakończenie przejścia przed zaakceptowaniem wyjścia obwodu. Przed zakończeniem przejścia wyjście obwodu jest uważane za śmieci.

W inżynierii rozwiązaniem tego problemu jest po prostu napisanie, jak długo trzeba czekać na poprawność wyników na papierze. To jest źródło częstotliwości zegara procesora. Ile GHz można uruchomić procesora, zależy od czasu potrzebnego do ustabilizowania się zmian stanu procesora.

W rzeczywistości istnieje trzecie źródło zmienności: dane wejściowe do obwodu. Rozwiązanie tego problemu jest podobne do powyższego problemu ogólnego: upewnij się, że sygnał (napięcie lub prąd) wchodzący do systemu jest stabilny i upewnij się, że sygnał ma wystarczająco dużo czasu na ustabilizowanie się.

Druga część problemu polega na tym, że przed przetwarzaniem próbkujemy dane wejściowe do zatrzasków lub rejestrów. Sygnał może być śmieci. Ale po przetworzeniu będą to 0 lub 1 śmieci w rejestrach. Pierwsza część problemu polega na tym, na czym polegają gwarancje.


2

Ale nigdy nie czytałem, co utrzymuje napięcie elektryczne na „dobrym poziomie” w taki sposób, że 0 nigdy nie mogłoby przypadkowo stać się 1 z powodu zmienności elektrycznej 1 wewnątrz komputera. Być może napięcie może być bardzo bliskie 0,9, a co zrobić, aby uniknąć przekroczenia progu?

Sprzężenie zwrotne uniemożliwia mu zbliżenie się do napięcia progowego i zmusza go do dobrego zachowania.

Zwykle ma to postać pewnego rodzaju obwodu zatrzaskowego, często taktowanego obwodu zatrzaskowego.

Jako prosty przykład rozważ przerzutnik . Jest zaprojektowany tak, że wyjście jest zasilane z powrotem do obwodu logicznego jako dodatkowe wejście. Logika wewnątrz elementu wie zatem, co wyprowadza i będzie wyprowadzać tę samą wartość, dopóki inne dane wejściowe nie wymuszą przejścia w przeciwny stan.

Ponieważ obwód jest zaprojektowany w taki sposób, że tranzystory są całkowicie włączone lub całkowicie wyłączone, zawsze będzie generować napięcie w pobliżu zasilacza i granic uziemienia - nie zbliży się do poziomu 0,9 V, a kiedy przejdzie w stan przejściowy, szybko i całkowicie się poruszy do drugiego stanu. Obwody zostały zaprojektowane specjalnie w celu uniknięcia działania w regionie analogowym między dwoma stanami.


0

W normalnych warunkach pracy zera i jedynki rzadko się psują, ale w złych warunkach pracy (tj. Niski poziom naładowania baterii lub ten krótki czas po odłączeniu zasilania prądem przemiennym i spadku napięcia w kondensatorze) zdarzają się dziwne rzeczy i zera i jedynki się psują cały czas.

Z tego powodu, jeśli piszesz kod obronny (oprogramowanie lub HDL), którego nie chcesz blokować, zawsze powinieneś rozważyć przypadek, w którym pewna liczba może się zepsuć. Na przykład,

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

lepiej zmienić na ==na >= wypadek, gdyby wartość iskoków z 9 na 11 lub dowolną liczbę większą niż 10, co spowodowałoby, że nigdy nie wychodziłbyś z pętli, dopóki nie izawinie się do 0 (powiedzmy po 4 miliardach iteracji).

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

Zdarza się, zaufaj mi ...


co jeśli iskacze do dużej liczby ujemnej?
Jasen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.