IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Přenos bitů aneb od pantáty vedou dráty...

V minulé lekci, Principy fungování počítačů aneb jak to vlastně funguje, jsme si vysvětlili, proč v počítačích používáme 0 a 1 neboli bity. Dnes se na tento přenos podíváme trochu hlouběji. Nyní jsme totiž v situaci, kdy víme CO posílat, ale ještě nemáme jasno v tom JAK to posílat.

Jak již jsme si řekli, data jsou reprezentována napětím. Nestačí nám však mít jen jeden datový kanál (drát), který by vše obstaral sám. Nevěděli bychom, jak s napětím pracovat či jak ho správně detekovat. Pokud máme všude dráty, nastává jeden drobný, nepěkný, fyzikální jev. Dráty sami vytvářejí nějaké napětí díky okolí, v počítači, kde máme drát vedle drátu, se tím pádem tvoří hromada šumu, který chceme odstranit. Šum nám totiž může způsobit, že chceme poslat 0, ale pošle se 1 či naopak. Nabízí se nám proto dvě možná řešení:

Řešení pomocí uzemnění

Mezi vysílajícím a příjemcem budou alespoň 3 vodiče. Jeden z nich je zem (GROUND), tzn. dostaneme referenční napětí vůči zemi a další 2 jsou data jedním směrem a data druhým směrem (TDx a RDx). Tento, tzv. sériový přenos, se používal dříve např. RS-232 linkou. Minule jsme si říkali, že se někdy pro rozlišení 0 a 1 používá tzv. floating stav neboli šedá zóna, která neznamená ani 0 ani 1. Uvidíme, že kromě pojistky se našlo i další využití tohoto 3. stavu.

Sériový přenos RS-232 linkou - Principy fungování počítačů

Řešení pomocí diferenčního přenosu

Diferenční přenos je to kvůli tomu, že napětí dostáváme z diference, tj. rozdílu mezi napětími vodičů. Náš hlavní přenašeč informace bude vodič p_1. Tím chceme poslat bite, třeba 1. Vezmeme si k němu druhý vodič p_2 a tím pošleme 0. Víme jistě, že nikdy se p_1 nerovná p_2. Mějme tedy výslednou hodnotu v takovou, že v se určí jako p_1 – p_2, takže bude-li v kladné, vysíláme 1, bude-li záporná, vysíláme 0. Víme, že mohou nastat pouze 2 varianty:

p_1 = 1, p_2 = 0 , p_1 - p_2 > 0 ---> chtěli jsme poslat 1.
p_1 = 0, p_2 = 1 , p_1 - p_2 < 0 ---> chtěli jsme poslat 0.

Zmatek začíná

Nyní umíme poslat jeden bit, ale v dnešních gigabytech je to příliš málo. Posuneme se tedy dále. Je potřeba si udělat drobnou exkurzi do binární soustavy. Pro nás bude naprosto zásadní si uvědomit, co vlastně znamená, že se přenáší n bitů. Posíláme něco, co se dá reprezentovat n číslicemi v binární soustavě. V čem začíná zmatek? Zkuste si poslat čísla 1, pak 0 a nakonec 2. V binární soustavě pošleme tedy 1010. Jak to ale druhá strana interpretuje? Znamená to 1 – 0 – 1 – 0, nebo 2 – 2, nebo 5 – 0, nebo 8? Jak to má druhá strana poznat? Proto se musíme dohodnout na nějakém formátu, jak posílat jednotlivé bloky. Řešením pro nás bude posílat data po bytech, tedy po osmicích.

Vsuvka

1B (byte, česky bajt) je 8b (bites, česky bitů). Jsou bohužel i bajty, které mají 7 bitů, ale ty se již téměř nepoužívají. Pokud jste někdy slyšeli o ASCII tabulce (později se k ní dostaneme), tak všechny mezinárodní symboly jsou indexovány od 0 do 127, protože dříve byly znaky z ASCII posílány v bitech po 7 bitech. O tom ale více později.

10010010100100000110101101010010 lze tedy poslat jako 10010010, 10010000, 01101011, 01010010.

Ať už chceme poslat jedno velké číslo, nebo něco jiného, můžeme přenést informaci jako "v dalších dvou blocích pošleme číslo". Výhoda je, že vím přesně, kdy přijímáme jaké bity a víme, že po osmi bitech končí blok.

Zmatek pokračuje

Nyní, když víme, jak chceme vytvářet bloky, přijde zpoza rohu nečekaný problém - budeme je číst od začátku nebo od konce? Jaké bude pořadí bitů, tzv. Bite Order? Zapíšeme číslo 4 jako 100 nebo jako 001? Budeme zapisovat na začátku nejméně významný bit (tzv. Least Significant Bit First) či naopak ten nejvýznamnější bit (tzv. Most Significant Bit First). 4 můžeme rozložit na 1*2^2 + 0*2 + 0 -> 100. V této situaci je nejdůležitější ten bit, který násobíme nejvyšší mocninou dvojky. Ač se to zdá jako hloupost, uvědomme si, že pro velká čísla nás možná budou zajímat jen např. poslední 3 bity, takže je logičtější posílat počítači čísla v LSB First.

Když už jsme si vyjasnili, zda chceme mít bity v MSB či LSB First, a tím pádem jak nám bity chodí, rádi bychom věděli, kolik jsme těch bitů vlastně dostali.

Co to vlastně přišlo?

Představte si, že někdo chce posílat samé nuly. To se docela špatně detekuje. Žádná změna signálu, maximálně nějaký divný šum odvedle...

Nejjednodušším způsobem řešení je mít pevně danou délku bitu neboli v přijímacím i vysílacím zařízení mít dohodnutou dobu, za kterou se přenese bit. Představte si líného hlídače parkoviště, který má počítat auta, co přijedou, a většinu času si čte noviny. Jednou za čas mu zazvoní budík zvedne hlavu a když uvidí auto, zapíše si 1. Když nikoho neuvidí, zapíše si 0. Dejme tomu, že budík zvoní pravidelně i v počítači. Ještě bychom nakonec potřebovali, aby si někdo všiml, že jsme začali posílat 0, neboli, že se změnil stav linky z "nevysílám" na "vysílám 0". To se udělá tak, že se pošle jakoby 0. bit, který nic nedělá, jen říká – hele, teď dávej pozor. Na konci už nepotřebujeme mít další bit, který nám řekne, že přenos končí, protože máme pevně danou délku bytu.

Celý floating přenos vypadá takto:

Přenos u RS-232 - Principy fungování počítačů

Tento přenos je však poměrně neefektivní a používal se pro výše zmíněnou linku RS-232. V čem je problém? Celou dobu byla ve floating stavu, takže je třeba poslat Start bit, sdělit v jakém pořadí posíláme bity, délku a nakonec dávat velmi dobrý pozor, aby se hodiny na opačných stranách přenosu nerozešly. Nakonec ještě vrátit linku do floating stavu. Pokud tuto režii děláme při každém bytu, jakmile si posíláme někam film, to abychom si udělali kávu a přečetli Babičku...

Vylepšení procesu

Jak celý proces zlepšit? Můžeme si držet informaci o hodinovém signálu bokem. Budeme mít speciální kabel, který bude pouze vysílat hodinový signál. Odpadne nám starost se začátkem a koncem. Jakmile běží hodinový signál, čteme. Neběží, nečteme. Tuto možnost používáme při diferenčním přenosu.

Přenos signálu - Principy fungování počítačů

Na závěr zmatek vrcholí

Kromě tzv. Bite Order můžeme chtít kontrolovat ještě tzv. Byte Order, neboli který byt v sérii se přenese první. Opět můžeme dělit na Little endian a Big endian - neboli co je na konci přenosu. Zda je na konci nejméně důležitý byte / nejvíce důležitý byte. Například pokud ukládáme znak jako 2 bajty (třeba v UTF-16 znakové sadě), kde znak a má v decimální soustavě hodnotu 97, na jeho uložení potřebujeme 2 bajty. V jednom bajtu bude uložená hodnota a, v druhém bude jen 0 pro doplnění. Proč, to se dozvíme v dalších lekcích. Teď je pro nás však důležité, že můžeme a uložit v Little endian jako 97 00, nebo v Big endian jako 00 97. Je tedy opět potřeba si předem vyjasnit pořadí. Hlavně se nenechat zmást. A mohu-li navnadit na příště, lekci Reprezentace čísel v počítači, zmatky zdaleka nekončí. Bez nich by to však nebyla taková zábava :)

Zmatek Vrcholí - Principy fungování počítačů

Oddechová část anebo počítání mocnin

Nyní se ještě jednou podíváme na mocniny čísla 2. Znát mocniny tohoto čísla jsou velmi praktické. 8b je 1B. A jak je to dál? To záleží. Pokud jsme mezi "svými" – pokud nejsme prodavači pevných disků, tak 1kB je 1024B, 1GB je 1024 MB atd... Samozřejmě, pokud jsme prodejci disků, je pro nás 1MB něco jako 1000kB a pevný disk se nám zmenšil o očekávaných 24kB. Jako obchodní technika to není až tak špatné. Všechny ostatní fyzikální veličiny jako např. kg, km apod. pracují v desítkové soustavě, proč by chudáci uživatelé měli pracovat v něčem jiném... Nu, takový je svět.


 

Předchozí článek
Principy fungování počítačů aneb jak to vlastně funguje
Všechny články v sekci
Principy fungování počítačů
Přeskočit článek
(nedoporučujeme)
Reprezentace čísel v počítači
Článek pro vás napsal Ondřej Michálek
Avatar
Uživatelské hodnocení:
87 hlasů
Autor se věnuje teoretické informatice. Ve svých volných chvílích nepohrdne šálkem dobrého čaje, kaligrafickým brkem a foukací harmonice.
Aktivity