PB 153 Operační systémy a jejich rozhraní1 I/O systém PB153 Operační systémy a jejich rozhraní PB 153 Operační systémy a jejich rozhraní2 Hardware  HW pro I/O je značně rozmanitý  Existují však určité běžně používané prvky  port  sběrnice (bus)  řadič (host adapter, controller)  I/O zařízení jsou řízeny I/O instrukcemi (IN, OUT)  Adresy I/O zařízení  uváděné přímo v I/O instrukcích (např. IN AL, DX : DX port, AL získaný bajt)  I/O se mapuje na přístup k paměti (např. grafická karta, videopaměť)  Základní způsoby ovládání I/O  polling, programované I/O operace • aktivní čekání na konec operace  přerušení  DMA PB 153 Operační systémy a jejich rozhraní3 Příklad: instrukce IN Copies the value from the I/O port specified with the second operand (source operand) to the destination operand (first operand). The source operand can be a byte-immediate or the DX register; the destination operand can be register AL, AX, or EAX, depending on the size of the port being accessed (8, 16, or 32 bits, respectively). Using the DX register as a source operand allows I/O port addresses from 0 to 65,535 to be accessed; using a byte immediate allows I/O port addresses 0 to 255 to be accessed. PB 153 Operační systémy a jejich rozhraní4 Sběrnice PC PB 153 Operační systémy a jejich rozhraní5 Rozmístění I/O portů v PC PB 153 Operační systémy a jejich rozhraní6 I/O porty  I/O port se obvykle skládá ze 4 registrů  Data-in • Čtení vstupu od zařízení  Data-out • Pro zápis výstupu do zařízení  Status • Aktuální stav (data připravena, chyba, …)  Control • Ovládání zařízení, konfigurace, příkazy,… PB 153 Operační systémy a jejich rozhraní7 Příklad: sériový port  COM1 – porty od 3F8, COM2 – porty od 2F8 PB 153 Operační systémy a jejich rozhraní8 Techniky provádění I/O  Programovaný I/O (busy-waiting)  opakovaně se ptám na stav zařízení • připraven • pracuje • chyba  I/O řízený přerušením  zahájení I/O pomocí I/O příkazu  paralelní běh I/O s během procesoru  I/O modul oznamuje přerušením konec přenosu  Direct Memory Access (DMA)  kopírování bloků mezi pamětí a I/O zařízením na principu kradení cyklů paměti  přerušení po přenosu bloku (indikace konce) PB 153 Operační systémy a jejich rozhraní9 Přerušení  Přerušení obsluhuje ovladač přerušení (kód OS)  Maskováním lze některá přerušení ignorovat nebo oddálit jejich obsluhu  Patřičný ovladač přerušení se vybírá přerušovacím vektorem  některá přerušení nelze maskovat  přerušení mohou být uspořádána podle priorit  Přerušení se používá i pro řešení výjimek (nejsou asynchronní) PB 153 Operační systémy a jejich rozhraní10 I/O cyklus řízený přerušením PB 153 Operační systémy a jejich rozhraní11 Vektor přerušení procesoru Intel Pentium PB 153 Operační systémy a jejich rozhraní12 DMA  Přímý přístup do paměti (Direct Memory Access - DMA)  nahrazuje programovaný I/O při velkých přesunech dat  vyžaduje speciální DMA řadič  při přenosu dat se obchází procesor, přístup do paměti zajišťuje přímo DMA řadič  procesor a DMA soutěží o přístup k paměti PB 153 Operační systémy a jejich rozhraní13 DMA: příklad PB 153 Operační systémy a jejich rozhraní14 Aplikační rozhraní I/O  Jádro OS se snaží skrýt rozdíly mezi I/O zařízeními a programátorům poskytuje jednotné rozhraní  Dále vrstva ovladačů ukrývá rozdílnost chování I/O řadičů i před některými částmi jádra  Některé vlastnosti I/O zařízení  mód přenosu dat: znakové (terminál) / blokové (disk)  způsob přístupu: sekvenční (modem) / přímý (disk)  sdílené/dedikované: klávesnice / páska  rychlost přenosu: vystavení, přenos, ...  read-write, read only, write only PB 153 Operační systémy a jejich rozhraní15 I/O v jádře a HW PB 153 Operační systémy a jejich rozhraní16 Bloková a znaková zařízení  Bloková zařízení – typicky disk  příkazy: read, write, seek  logický způsob přístupu: obecný I/O nebo souborový systém  možný přístup formou souboru mapovaného do paměti  Znaková – klávesnice, myš, sériový port  příkazy: get, put  nad nimi knihovní podprogramy pro další možnosti (např. řádková editace) PB 153 Operační systémy a jejich rozhraní17 Linux: speciální zařízení PB 153 Operační systémy a jejich rozhraní18 Linux: speciální zařízení PB 153 Operační systémy a jejich rozhraní19 WinAPI: práce s disky PB 153 Operační systémy a jejich rozhraní20 Příklad: Linux  Mapování souboru do paměti #include void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *start, size_t length); The mmap() function asks to map length bytes starting at offset offset from the file (or other object) specified by the file descriptor fd into memory, preferably at address start. The prot argument describes the desired memory protection (and must not conflict with the open mode of the file). It is either PROT_NONE or is the bitwise OR of one or more of the other PROT_* flags… PB 153 Operační systémy a jejich rozhraní21 Síťová zařízení  Přístup k nim se značně liší jak od znakových, tak od blokových zařízení  proto mívají samostatné rozhraní OS  Unix i Windows obsahující rozhraní nazývané „sockets“  separují síťové protokoly od síťových operací  přístup jako k souborům (včetně funkce select)  Existuje celá řada přístupů k síťovým službám  Pipes (roury), FIFOs, streams, queues, mailboxes PB 153 Operační systémy a jejich rozhraní22 Blokující a neblokující I/O  Blokující  z hlediska procesu synchronní  proces čeká na ukončení I/O  snadné použití (programovaní), snadné porozumění (po provedení operace je hotovo to co jsem požadoval)  někdy však není dostačující (z důvodu efektivity)  Neblokující  řízení se procesu vrací co nejdříve po zadání požadavku  vhodné pro uživatelské rozhraní, bufferovaný I/O  bývá implementováno pomocí vláken  okamžitě vrací počet načtených či zapsaných znaků  Asynchronní  proces běží souběžně s I/O  konec I/O je procesu hlášen signály  obtížné na programovaní, složité používání, ale v případě vhodně promyšleného programu velice efektivní PB 153 Operační systémy a jejich rozhraní23 Příklad: Linux  Blokující čtení  ssize_t read(int fd, void *buf, size_t count);  Neblokující volání  int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);  Asynchronní čtení  int aio_read(struct aiocb *aiocbp);  int aio_error(const struct aiocb *aiocbp);  ssize_t aio_return(struct aiocb *aiocbp); PB 153 Operační systémy a jejich rozhraní24 I/O subsystém v jádru  Plánování  některé I/O operace požadují řazení do front na zařízení  některé OS se snaží o „spravedlnost“  Vyrovnání (vyrovnávací paměti), buffering  ukládání dat v paměti v době přenosu k/ze zařízení  řeší rozdílnost rychlosti  řeší rozdílnost velikosti datových jednotek PB 153 Operační systémy a jejich rozhraní25 Příklad: Sun Enterprise 6000 PB 153 Operační systémy a jejich rozhraní26 I/O Subsystém v jádru  Caching  rychlá paměť udržuje kopii dat  vždy pouze kopii  caching je klíčem k dosažení vysokého výkonu  Spooling  udržování fronty dat určených k výpis na zařízení  pokud zařízení může vyřizovat požadavky pouze sekvenčně  typicky tiskárna  Rezervace zařízení  exkluzivita přístupu k zařízení pro proces  rezervace / uvolnění – volání systému  pozor na uváznutí (deadlock) PB 153 Operační systémy a jejich rozhraní27 Chybové řízení  Vzpamatování se po poruše při chybě čtení z disku, zjištění nedostupnosti zařízení, po náhodné chybě zápisu, …  Volání požadující I/O operaci získá číslo chyby  typicky záporná hodnota  Udržuje se záznam o chybách v systému  pro následné analýzy  syslog, events (viewer), ... PB 153 Operační systémy a jejich rozhraní28 Př.: I/O pož.  Příklad čtení souboru z disku: 1. Zjistíme, které zařízení obsahuje soubor 2. Převedeme jméno na reprezentaci na zařízení 3. Fyzicky přečteme data z disku do bufferu 4. Získaná data zpřístupníme procesu 5. Vrátíme řízení procesu PB 153 Operační systémy a jejich rozhraní29 Výkon  I/O je nejvýznamnějším faktorem výkonu celého systému  CPU musí provádět ovladače a programy I/O části jádra  při přerušení se přepíná kontext  provádí se kopírování dat  zvláště významný je síťový provoz PB 153 Operační systémy a jejich rozhraní30 Příklad: Síťová aplikace PB 153 Operační systémy a jejich rozhraní31 Zvyšování výkonu  Omezujeme počet přepnutí kontextu  Omezujeme zbytečné kopírování dat  Omezujeme počet přerušení tím, že přenášíme delší bloky  Využíváme všech výhod (funkcí) moderních řadičů  Používáme co nejvíce DMA  Všechny komponenty kombinujeme s cílem dosažení co nejvyšší propustnosti  CPU, paměť, sběrnice, I/O zařízení