Vstup a výstup (I/O - Input/Output)
V informatice pojem I/O (zkratka z anglického Input/Output, česky vstup a výstup) označuje veškerou komunikaci mezi systémem pro zpracování informací (počítačem, mikrokontrolérem) a vnějším prostředím. Tímto prostředím může být lidský uživatel, jiný počítač, síť nebo jakékoliv periferní hardwarové zařízení.
Jednoduše řečeno: Vstupy jsou data a signály, které systém přijímá ke zpracování, zatímco výstupy jsou výsledky zpracování, které systém odesílá ven. Koncept I/O je absolutním základem architektury počítačů (tzv. Von Neumannovy architektury) – bez něj by počítač byl jen izolovanou černou skříňkou, do které nelze dostat žádná data a ze které nelze přečíst žádné výsledky.
1. Hardwarové I/O zařízení (Periferie)
Fyzická zařízení, která zprostředkovávají I/O operace, se nazývají periferie. Dělí se do tří základních kategorií:
- Vstupní zařízení (Input): Transformují podněty z fyzického světa do digitálních dat srozumitelných pro počítač. Patří sem klávesnice, myš, mikrofon, skener, webkamera nebo různé senzory (teploměr, GPS).
- Výstupní zařízení (Output): Přijímají digitální data z počítače a převádějí je do formy srozumitelné pro člověka nebo jiný fyzický systém. Typickým zástupcem je monitor, tiskárna, reproduktory nebo robotické rameno v továrně.
- Kombinovaná I/O zařízení: Slouží k obousměrné komunikaci. Příkladem jsou pevné disky (HDD/SSD) a flash disky (můžeme z nich data číst i na ně zapisovat), síťové karty (NIC) nebo dotykové obrazovky.
2. Jak počítač komunikuje s I/O zařízeními
Aby mohl centrální procesor (CPU) efektivně komunikovat s pomalejšími periferiemi, využívá počítačová architektura několik klíčových mechanismů:
Adresování periferií
- Memory-Mapped I/O (MMIO): V tomto přístupu sdílí I/O zařízení stejný adresní prostor jako hlavní operační paměť (RAM). Pokud chce procesor poslat data na grafickou kartu, zapíše je jednoduše na specifickou adresu v paměti.
- Port-Mapped I/O (PMIO): Zařízení mají svůj vlastní, izolovaný adresní prostor (tzv. I/O porty). K přístupu do něj musí procesor používat speciální instrukce.
Správa přenosu dat
- Polling (Dotazování): Procesor v cyklu neustále kontroluje I/O zařízení a ptá se: „Máš pro mě nová data?“ Tento způsob je velmi neefektivní a plýtvá výpočetním výkonem CPU.
- Interrupts (Přerušení): Mnohem chytřejší metoda. Procesor si hledí své práce. Když má I/O zařízení připravená data (např. uživatel stiskl klávesu), pošle procesoru hardwarový signál přerušení (IRQ). Procesor okamžitě přeruší stávající činnost, obslouží vstup a pak se vrátí k původní práci.
- DMA (Direct Memory Access): Přímý přístup do paměti. Speciální čip na základní desce umožňuje zařízením (např. pevnému disku nebo síťové kartě) zapisovat a číst data z operační paměti zcela samostatně, a to bez jakékoliv asistence hlavního procesoru. CPU je díky tomu ušetřeno masivních přesunů dat a může se věnovat výpočtům.
3. Softwarové I/O a programování
Z pohledu operačního systému a softwarového vývoje neznamená I/O jen klávesnici a monitor. Jde primárně o File I/O (čtení a zápis souborů na disku) a Network I/O (stahování a odesílání dat přes síť). Tyto operace jsou z hlediska procesoru extrémně pomalé.
Programovací jazyky k tomu přistupují dvěma způsoby:
Blokující vs. Neblokující I/O
- Synchronní (Blokující) I/O: Program požádá o načtení velkého souboru z disku. Během čekání na fyzické přečtení dat diskem se běh celého programu zastaví (zablokuje se) a aplikace může působit zamrzle.
- Asynchronní (Neblokující) I/O: Program zadá operačnímu systému požadavek na načtení souboru a okamžitě pokračuje v provádění dalšího kódu. Jakmile systém data z disku načte, pošle programu upozornění (např. přes tzv. callback). Tento přístup je kritický pro tvorbu rychlých webových serverů (např. framework Node.js).
4. I/O jako úzké hrdlo (Bottleneck)
Rychlost procesorů a operačních pamětí roste historicky mnohem rychleji než propustnost pevných disků nebo síťových spojení. Z tohoto důvodu se IT systémy často dělí podle toho, co je nejvíce omezuje:
- CPU Bound (Limitováno procesorem): Úlohy jako renderování 3D grafiky, trénování AI nebo komprese videa. Procesor běží na 100 % a zpracování brzdí jen jeho výpočetní výkon.
- I/O Bound (Limitováno vstupem/výstupem): Úlohy jako kopírování tisíců malých souborů, prohledávání rozsáhlých databází nebo stahování z pomalého internetu. Procesor se drtivou většinu času „nudí“ a jen nečinně čeká, až pevný disk nebo síťová karta dodají požadovaná data.
K měření výkonnosti úložných I/O zařízení se nejčastěji používá metrika IOPS (Input/Output Operations Per Second), která udává, kolik operací čtení/zápisu dokáže úložiště zpracovat za jednu vteřinu (moderní NVMe SSD disky dosahují i více než milionu IOPS).
Rychlé srovnání I/O pojmů
| Aspekt | Popis | Typický příklad |
|---|---|---|
| Vstupní zařízení | Posílá data do počítače | Klávesnice, čtečka čárových kódů |
| Výstupní zařízení | Přijímá data z počítače pro zobrazení | Monitor, tiskárna, LED dioda |
| I/O Bound proces | Brzděn pomalým přísunem dat | Zálohování velkých složek, databázové dotazy |
| Synchronní I/O | Blokuje běh programu do dokončení operace | Tradiční čtení souboru (např. v Pythonu) |
| DMA (Direct Memory Access) | Hardware obchází procesor při přesunu dat | Načítání textur z disku přímo do grafické paměti |
