0 a 1 je bohuzel abstrakce dost odtazita od reality, ktera k navrhovani spolehlivych pocitacu nestaci.
Ve skutecnosti existuje jeste 3. stav - metastabilni. Vznika napr. kdyz se navzorkuje signal klopakem v okamziku kdy se zrovna meni. Obvod se pritom rozkmita, dostane na delsi dobu do nedefinovane napetove urovne, nebo dava logicky nekonzistentni vystup (napriklad jak na normalnim tak invertovanem vystupu klopaku se objevi stejna uroven).
Pravdepodobnost ze se metastabil dozije urciteho veku klesa exponencialne s tim vekem ale nikdy neni nula.
Uvedu priklad: Pocitac precte stav klavesnice zrovna kdyz tlacitko stiskavam. Registr v procesoru se dostane do metastabilniho stavu. Na registru se provede operace a vysledek se jedna ulozi do jineho registru a jednak podle nej nastavej flagy.
Jenze kvuli nahodne rozdilnosti rezacich urovni hradel flagoveho registru a ciloveho registru se do flagu ulozi jedna interpretace meziurovne a do vysledku druha.
Kdyz pak potom provedeme instrukci ktera otestuje konzistenci vysledku predchozi (jako napr. jestli flag S opravdu souhlasi s 7./15./31. bitem vysledku), zjistime, ze procesor udelal chybu. Nelze navrhnout pocitac komunikujici s vnejsim svetem, ktery by touto chybou netrpel.
On ve skutecnosti vlastne chybu neudelal, chybu delaji lide, co si mysli, ze procesory premysli pouze v 0 a 1.
Existuje veta, ze kdekoliv se kvantizuje analogova velicina (ktera muze byt i doba prichodu hrany) ve spojitem svete, tak vznika metastabilni stav.
Napriklad veze-li sanitka pacienta do nemocnice a po ceste je prechod pro chodce, existuje vzdy takove casovani prichodu chodce, pri kterem bud je chodec prejet nebo sanitka ceka na prechodu tak dlouho, az pacient zemre. Jen ta pravdepodobnost je mala. Mala, ale stale existuje a z principu nelze sebelepsimi pravidly silnicniho provozu odstranit.
Pri navrhu Ronji Twistera jsem s metastabilnimi stavy pocital a snazil se to navrhnout tak, aby nevznikla porucha ani kdyz nejaky klopak metastabilni stav nasaje. Kdybych o tom neuvazoval, vznikal by napr. mirny, ale trvaly packetloss.
Mas samozrejme pravdu. V pripade napriklad te klavesnice se to resi vicenasobnym ctenim, podobne je to napriklad pri seriove komunikaci (RS-232C) atd. Tim se pravdepodobnost vzniku problemu snizuje, i kdyz samozrejme nezmizi uplne. Jinak mas pravdu v tom, ze rozkmitat se muze jakykoli klopak (i ten rizeny treba dvema hranami), coz se v nekterych ucebnicich ignoruje. Ovsem dostavame se do silene malych pravdepodobnosti, ze to nastane.
Zde bych si dovolil nesouhlasit, se vrůstajícím kmitočtem a počtem CLK domén, vzrůstá dosti silně ona pravděpobnost. Na míru, kde už se musí řeši... Ona "nemoc" klopáků dokáže nadělat opravdu hodně nepříjemností. Jeden z řady dokumentů, pěkně popisující tento jev lze najít například http://focus.ti.com/lit/an/sdya006/sdya006.pdf ... V praxy, pokud existují různý CLK domény obvykle stačí dat "2 hradla" za sebe. Pravděpodobost, že se to metastabilního stavu dostane i to druhé je malá. Nicméně, rozhodně ne nenulová. I pro tyto důvody jsou počítače (obecně) nespolehlivé stroje...
Tak to mě zajímá jak by musel vypadat 100% spolehlivý stroj.
Asi nijak, vysoká spolehlivost dosažitelná jedině masivně paralelním zpracováním té samé úlohy na tam samém typu stroje a následné hlasování o výsledku ;-)
Zajímá mě jak by odborník zhodnotil vesmír jako takový, nahlížený výše zníněným prismatem stroje. Jako celku a jeho nejmenších výkonných prvků ;-)
Vím že je to nerozhodnutelné, jde jen o zamyšlení.
Vyssi spolehlivosti se vetsinou dosahuje nasazenim odlisnych systemu. Treba pri rizeni raket nema moc smysl delat tri stejne ridici systemy, kdyz muze nastat predem neoverena situace, kdy zmena vstupnich podminek odstavi vsechny tri. Lepsi je mit tri _naprosto_ odlisne systemy pracujici na jinem principu - v tom jsou hodne dobri Rusove, proto jim to taky moc nepada :-)
No uplne neco jineho. Priklad - kontrola mezni teploty (ja nevimceho, treba trysek). Daji tam tri cidla pracujici na jinem principu: neco na bazi bimetalu, neco na bazi polovodice, treba nejaky klasicky rtutak atd. (nejsem technik, ale proste to, co udelaji na sobe nezavisle tymy).
Pokud nastane napr. situace, ze se vlivem zareni "odporouci" polovodicovy merak, je tam zaloha, pokud naopak nastanou treba vibrace a nevydrzi to bimetal, porad je tam jeste zaloha atd.
Stejne to "resi" priroda a mj. i vojaci. Nebo je to videt i na IT: vir zasahne jeden system (je jedno jaky), diky Internetu se vsechny tyto systemy sesypou (viz nedavny pad Skype), ale zbytek bezi. Pokud by byla delana "zaloha" pouze se stejnymi systemy, je problem.
No u cidel to chapu ale tu je rec o pocitacich ne o cidlech, proto se tak divim na jakem jinem principu by ten pocitac mel byt aby tedy byl "jinacim" systemem :-)
Na to se ptal vas predrecnik, ve skutecnosti to na nizke urovni je tezko udelatelne. Spis se zalohuji cele pocitace (systemy), nez ze by se zabezpecovala kazda jednotliva logicka funkce (ale treba scitacka aj., to uz se resilo - viz elektronkove pocitace).
Jestli se ptate, jak je to resene napriklad v PC - skoro nijak! Proste se predpoklada, ze vsechno samo od sebe bude fungovat. Dneska mame alespon JTAG, ale treba u sestnactibitu nebylo proste nic.
Ale v te prvni vete je ten problem v cele sve krase naznacen. Pokud se bude jednat o slozite systemy, ktere vyhodi nejake vysledky, ma cenu delat hlasovani o vysledku - pocita se s tim, ze pravdepodobnost chyby tech systemu je o nekolik radu vyssi, nez pravdepodobnost chyby "hlasovaciho zarizeni" - co asi bude funkce typu "vyber m z n".
Priklad: tri/ctyri samostatne systemy na ruznem principu prace, ktere vyhodnoti drahu letu a podle toho treba nastavi vykon motoru - o tom ma cenu "hlasovat", protoze jsou to slozite systemy, idealne je programoval uplne jiny tym jinymi prostredky (riziko zavleceni chyb se snizuje), testoval to nekdo jiny atd.
Ovsem na nizsi urovni uz to neplati. Priklad: mame otestovat funkci hradla - udelame tedy 15 hradel bezicich paralelne a nasledne za ne pripojime funkci typu vyber 8 z 15. Jenze problem je v tom, ze ta hlasovaci funkce je slozitejsi nez to hradlo, ktere testujeme, takze vznika problem s tim, ze pravdepodobnost spatne chyby hlasovaci funkce muze byt vyssi nez pravdepodobnost vypadku toho hradla (testovaneho zarizeni). Timto se vetsinou nikam nedostaneme.
Nekdy muze redundance pomoci, nekdy je na nic (a tech pripadu je vice).
"tri/ctyri samostatne systemy na ruznem principu prace"
Takze zase uhybny manevr ? Co tam muze byt jineho nez "stejny typ stroje" = zase jen pocitac ? A o tom mluvim. uff. Dobre mozna to bude stroj z jine serie, jinak nekym jinym programovany :-) Co bude jeste jineho ?
Zalohovat hradla me fakt nenapadlo :-), to ani nema smysl kdyz by je na vstupu matl ten samy metastabil stav... IMHO, leda ze bych nejak zaridil casovy offset napriklad osmi hradel ktere by pak hlasovali co prislo, a to je presne to same v blede modrem co popisuji nize.
S tim co je treba zalohovat a jak a co ne je to zajimavy problem, buhuzel o tom jsem se nikde nedocetl NIC. Vsude se chybovost resi samoopravnymi kody, RC zatloukanim a tak vselijak uz ted nevim jak jinak.
Jasne, pokud vsechny pocitace povazujeme za "stejny typ stroje", tak samozrejme jde o
stejny typ stroje :-) Ovsem takto se nikam nedostaneme.
>"tri/ctyri samostatne systemy na ruznem principu prace"
>Takze zase uhybny manevr ?
K cemu chceme dojit? K vytvoreni neceho, co je jako celek stabilnejsi/mene poruchove, nez kdyby se jednalo o pouze jedno nezalohovane zarizeni ze? Potom ze zkusenosti (ale i z teorie, ta zkusenost je ovsem videt skoro na kazdem kroku) vyplyva, ze je proste zapotrebi zalohovat zpusobem, ze ty jednotlive casti systemu budou pracovat na odlisnem principu.
Hradla - no prave o tom cele to nedorozumeni je (priznam se, ze me ta diskuse pod clankem o taky-hradlech mate). Co je vlastne zapotrebi zalohovat? Nejaky system? Nebo primo funkci pocitace? Nektere veci nemusi resit pouze pocitac, zalohy funkce/systemu jde udelat i jinak...
No jéje! Každý jaderný inženýr ji musí mít v malíčku ;-)
Rozpracovávali to pánové von Neumann a Svoboda ve 40. letech, jednalo se o problematiku konstrukce spolehlivých mechanismů z nespolehlivých součástí (relátka a elektronky byly extrémně nespolehlivé součástky pokud jde o jejich aplikaci v počítačích; střední bezporuchová doba takového monstra byla často jen pár hodin, zjednodušeně řečeno, pak už jste se na výsledky nemohli spolehnout, protože s časem rostla pravděpodobnost, že se někde něco rozbilo a jelikož každá součástka má v počítači svou nezastupitelnou funkci, jinak by tam nemusela být, musí se její porucha někdy někde nějak projevit)
No že když třeba vyvíjíte řídící a bezpečnostní systém atomové elektrárny, tak ho budete zálohovat jinak koncipovanými systémy. Zjednodušeně - nedáte tam 3 PCčka, dáte tam 1 PCčko, 1 MACa a 1 něco úplně jiného. Kabely k tomu nataháte různými místy, aby bylo minimalizované jejich současné přerušení, připojíte je k různým elektrickým rozvodům, aby bylo minimalizované současné vypadnutí všech tří najednou; 1 dáte do posledního patra, aby bylo zamezeno zničení zaplavením vodou vniknuvší do sklepa, druhý umístíte do sklepa, aby bylo zamezeno zničení třeba letadlem atd... A kolem toho je samozřejmě celá teorie, jak to všechno koncipovat, abyste skutečně dosáhl zvýšení spolehlivosti na potřebnou úroveň či abyste si ověřil, že jste ji skutečně zvýšil, že to není jen iluze - například tak, že postavíte vedle sebe tři totožné systémy, které při vzniklé nějaké speciální situaci budou reagovat stejně chybně nebo že když vypukne požár, tak všechny tři shoří. Zde je jasné, že takové řešení by bylo naprosto zbytečné.
(např. v Temelíně je část systému postavená na Intelech a část na Motorolách, a to tak, aby záloha byla vždy koncipována na odlišné architektuře)
No tak KONEČNĚ vím něco konkrétního. Děkuji. (to nemyslím ironicky)
Jak dojde k propojení těchto tří různých systémů pod nějaký kontrolní ? není achilovka akorát zase někde jinde ? neříkejte mi že kontrolní systémy jsou zase tři. To trochu zavání zacyklením ;-)
To by se tento konkrétní příklad musel rozpitvat trošku podrobněji. Protože musíte udělat 3 věci - nejdřív musíte posbírat data, pak ta data musíte vyhodnotit a na základě výsledků udělat rozhodnutí. Takže musíte eliminovat chybu vstupních dat, chybu jejich vyhodnocení a nakonec chybu v rozhodnutí. Vyšší stupeň kontroluje nižší - vyhodnocovací podsystém má k disposici redundantní informace z čidel a kromě toho provede kontrolní výpočty - spočítá si, k čemu by se mělo dobrat čidlo A, když na čidlech X, Y, Z jsou hodnoty x, y, z a porovná to s realitou. Na základě toho vyhodnotí situaci. Rozhodovací systém má pod sebou více vyhodnocovacích systémů a dívá se, jestli situaci vyhodnotily shodně. Rozhodovacích systémů může být opět více a porovnává se jejich rozhodnutí. Konečný verdikt se obvykle činí v případě 300% zálohování systémem 2 ze 3 - "ano", "ano", "ne" se vyhodnotí jako "ano". Pokud jde o bezpečnostní podsystém, vyhodnocuje se systémem veta - "Nastalo selhání?" - "ne", "ne", "ano" se vyhodnotí jako "ano".
Samozřejmě můžete dumat nad tím, co se stane, když selže onen rozhodovací mechanismus, který nakonec musí vydat jednoznačný pokyn. Kvůli tomu musí ten systém obsahovat aspoň jednu jinou zcela nezávislou kauzální větev, nebo radši dvě, které budou eliminovat vliv chybného rozhodnutí rozhodovacího systému jedné z nich. Nebo je samozřejmě možné mít jen ty tři nezávislé kauzální větve a uvnitř je nemít nijak zálohované - vše je jen otázka návrhu, požadované spolehlivosti a prostředků, které jsou k dispozici.
Nojo, co kdyz ale pri tom overeni udelam chybu a budu si myslet ze mam spolehlivost, a ve skutecnosti bude system rizikovy? Overeni musi delat bud clovek (nespolehlivy) nebo pocitac (nespolehlivy).
Jednou jsem se ucastnil jedne prednasky cloveka z Airbusu. Rikal, ze v letadle jsou dva typy palubnich pocitacu (kazdy ve trech kopiich), ktere vyvijeji dva ruzne tymy, kazdy v jinem programatorskem prostredi, na pocitacich bezi jine operacni systemy (pokud lze o operacnim systemu hovorit) na jinem hardwaru, algoritmy v tech dvou pocitacich by nemely byt totozne, pouze ve vysledku by kazdy z tech pocitacu mel byt schopen nejak samostatne ovladat letadlo. Problem pry je, ze stejne ti programatori z tech dvou tymu vystudovali stejnou skolu a chodi spolu na pivo... :))
Musi byt jednoduchy aby byl spolehlivy. Hodne jednoduchy. Treba i na mem skejtu byla buga ze do sebe narazely casti trucku, na mem snowboardu zase zacal praskat plastovy reminek. Surfovaci prkno je jeden nepohyblivy dil, to by snad mohlo byt spolehlive.
Jaky smysl ma ale delat 100% spolehlivy stroj kdyz na nej/pred nej stejne postavime 100% nespolehlivy "lidsky faktor"?
Podle kvantove fyziky 100% spolehlivy stroj nelze postavit. Tak napriklad, elektron se dokaze protunelovat i skrz metr nejlepsiho izolantu ktery sezenes: pravdepodobnost ze se tak stane je nepatrna, ale vetsi nez 0. Samozrejme, v dnesnich pocitacich (procesorech) nebyvaji izolantu metry, ale nekde jen nekolik atomu, a pravdepodobnost tunelovani uz je tak vysoka ze se to musi brat do uvahy i v praxi.
Panove panove, po precteni techto komentu mi pripada, ze nidko z vas vzivote nepracoval s modernim PC....pocitace ze jsou nespolehlive??? to si delate srandu ;) kdo zna napr. Prime95 a vi jak funguje, tak si muze sam overit jak moc nestabilni ma svuj pocitac...je ho nechal jet na jednom serveru (3GHz core 2 duo s 8GB RAM) jet ve dvou procesech, kazdy se 3.5GB RAM a jelo to asi 14dni, pak jsem to shodil, protoze me to prestalo bavit... kdyz uvazime kolik operaci za tu dobu udelal a jelikoz prime nespadnul, da se spocitat jak moc spolehlivy je...
A kdyby to jednou za 700 dnu hodilo chybu, co pak?
A co kdyby takove PC ridilo jadernou elektrarnu a jednou za 700 dnu to bouchlo?
To co je "spolehlive" pro normalniho uzivatele PC muze byt v praxi v nekterych oborech naprosto nestabilni a nespolehlive, a lze to pouzit tak maximalne jako cast komplexnejsiho systemu ktery prave takove vypadky osetri.
A kazdy system je nespolehlivy. Jde jen o to jak moc, ale jinak kazdy clovek hraje vabank jiz od poceti, a kazdy nakonec prohraje. :) Nekteri driv nez se ocekava, nekteri "prirozene".
Tim vzorkovanim myslim vzorkovani ne do binarni hodnoty ale vzorkovani do slozene hodnoty (napr. a,bx4bit) tzn. vzniknou dve nejake ciselne hodnoty z rozsahu 0-15 napriklad 2 a 8 v ruznych casech, z teto dvojice uz lehce vyhodnotim tendenci k maximu nebo minimu tj. k binarni hodnote 1 nebo 0. Tu pak priradim jako rozpoznanou hodnotu na vstupu.
Ano toto neni odolne proti VF sumu ktery presahuje moznosti vzorkovani, ovsem VF sum jde osetrit pevnym analogovym RC/RLC filtrem na vstupnich pinech. Urcim tim mezni frekvenci kterou je obvod schopen pracovat.
Podle pozadovane spolehlivosti muzu provadet ne dva ale vice vzorku a s vetsim ciselnym rozsahem v hodnotach.
Pravdepodobnost chyby za danych podminek muze klesnout pod hodnotu ktera znamena pro urcitou relaci trvajici omezeny casovy usek 0%, protoze se pro kazdou relaci pravdepodobnost resetuje (je stejna) muze byt chybovost 0% (predpoklad stalych definovanych podminek a meznich hodnot v obvodu ktery neni plne realisticky).