‹#›/32 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ I/O systém 12 ‹#›/32 lHW pro I/O je značně rozmanitý lExistují však určité běžně používané prvky ●port ●sběrnice (bus) ●řadič (host adapter, controller) lI/O zařízení jsou řízeny I/O instrukcemi (IN, OUT) lAdresy 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ěť) lZákladní způsoby ovládání I/O ●polling, programované I/O operace ●aktivní čekání na konec operace ●přerušení ●DMA HARDWARE PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 PŘÍKLAD: INSTRUKCE IN PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ 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. IN-Input from Port Optcode Instruction Op/En 64-Bit Mode Compat/ Leg Mode Description E4 ib IN AL, imm8 A Valid Valid Input byte from imm8 I/O port adress into AL. E5 ib IN AX, imm8 A Valid Valid Input word from imm8 I/O port adress into AX. E5 ib IN EAX, imm8 A Valid Valid Input dword from imm8 I/O port adress into EAX. EC IN AL,DX B Valid Valid Input byte from I/O port in DX into AL. ED IN AXDX B Valid Valid Input word from I/O port in DX into AL. ED IN EAX,DX B Valid Valid Input doubleword from I/O port in DX into EAX. ‹#›/32 SBĚRNICE PC PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ monitor processor graphics controller bridge/memory controller SCSI controller cache memory disk disk disk disk disk disk disk disk PCI bus expansion bus keyboard expansion bus interface parralel port serial port IDE disk controller ‹#›/32 ROZMÍSTĚNÍ I/O PORTŮ V PC PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ I/O address range (hexadecimal) device 000-00F DMA controller 020-021 interrupt controller 040-043 timer 200-20F game controller 2F8-2FF serial port (secondary) 320-32F hard-disk controller 378-37F parallel port 3D0-3DF graphics controller 3F0-3F7 diskette-drive controller 3F8-3FF serial port (primary) ‹#›/32 lI/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,… I/O PORTY PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lCOM1 – porty od 3F8, COM2 – porty od 2F8 PŘÍKLAD: SÉRIOVÝ PORT PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ 8250 SCC Registers I/O Address (hex) Description 3F8/2F8 Receive/Transmit data register. Alsto the L. O. byte of the Baud Rate Divisor Latch Register. 3F9/2F9 Interrupt Enable Register. Also the H. O. byte of the Baud Rate Divisor Register. 3FA/2FA Interrupt Identification Register (read only). 3FB/2FB Line Control Register 3FC/2FC Modem Control Register. 3FD/2FD Line Status Register (read only). 3FE/2FE Modem Status Register (read only). 3FF/2FF Shadow Receive Register (read only not available on original PCs) ‹#›/32 lProgramovaný I/O (busy-waiting) ●opakovaně se ptám na stav zařízení ●připraven ●pracuje ●chyba lI/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 lDirect 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) TECHNIKY PROVÁDĚNÍ I/O PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lPřerušení obsluhuje ovladač přerušení (kód OS) lMaskováním lze některá přerušení ignorovat nebo oddálit jejich obsluhu lPatř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 lPřerušení se používá i pro řešení výjimek (nejsou asynchronní) PŘERUŠENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 I/O CYKLUS ŘÍZENÝ PŘERUŠENÍM PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ device driver initiates I/O 1 CPU receiving interrupt, transfers control to interrupt handler interrupt handler processes data, returns from interrupt CPU resumes processing of interrupted task initiates I/O input ready, output complete, or error generates interrupt signal CPU I/O controller CPU executing checks for interrupts between instructions 2 3 4 5 6 7 ‹#›/32 VEKTOR PŘERUŠENÍ PROCESORU INTEL PENTIUM PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ vector number description 0 divide error 1 debug exception 2 null interrupt 3 breakpoint 4 INTO-detected overflow 5 bound range exception 6 invalid optcode 7 device not available 8 double fault 9 coprocessor segment overrun (reserved) 10 invalid task state segment 11 segment not present 12 stack fault 13 general protection 14 page fault 15 (Intel reserved, do not use) 16 floating-point error 17 alignment check 18 machine check 19–31 (Intel reserved, do not use) 32–255 maskable interrupts ‹#›/32 lPří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 DMA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 DMA: PŘÍKLAD PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ disk disk disk disk IDE disk controller DMA/bus/ interrupt controller memoryX buffer cache CPU PCI bus 5. DMA controller transfers bytes to buffer X, increasing memory address and decreasing C until C = 0 6. When C = 0, DMA interrupts CPU to signal transfer completion 1. device driver is told to transfer disk data to buffer at address X 2. device driver tells disk controller to transfer C bytes from disk to buffer at address X 3. disk controller initiates DMA transfer 4. disk controller sends each byte to DMA controller CPU memory bus ‹#›/32 lJádro OS se snaží skrýt rozdíly mezi I/O zařízeními a programátorům poskytuje jednotné rozhraní lDále vrstva ovladačů ukrývá rozdílnost chování I/O řadičů i před některými částmi jádra lNě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 APLIKAČNÍ ROZHRANÍ I/O PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 I/O V JÁDŘE A HW PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ SCSI devices keyboard mouse … PCI bus floppy-disk drives ATAPI devices (disks, tapes, drives) SCSI device controller keyboarddevice controller mouse device controller PCI bus device controller floppy device controller ATAPI device controller … SCSI device driver keyboarddevice driver mouse device driver PCI bus device driver floppy device driver ATAPI device driver … kernel I/O subsystem kernel ‹#›/32 lBloková 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 lZnaková – klávesnice, myš, sériový port ●příkazy: get, put ●nad nimi knihovní podprogramy pro další možnosti (např. řádková editace) BLOKOVÁ A ZNAKOVÁ ZAŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 LINUX: SPECIÁLNÍ ZAŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 LINUX: SPECIÁLNÍ ZAŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 WINAPI: PRÁCE S DISKY PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lMapování souboru do paměti l#include lvoid *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); lint munmap(void *start, size_t length); l 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… PŘÍKLAD: LINUX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lPřístup k nim se značně liší jak od znakových, tak od blokových zařízení ●proto mívají samostatné rozhraní OS lUnix 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) lExistuje celá řada přístupů k síťovým službám ● Pipes (roury), FIFOs, streams, queues, mailboxes SÍŤOVÁ ZAŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lBlokují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) lNeblokují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ů lAsynchronní ●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í BLOKUJÍCÍ A NEBLOKUJÍCÍ I/O PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lBlokující čtení ●ssize_t read(int fd, void *buf, size_t count); lNeblokující volání ●int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); lAsynchronní čtení ●int aio_read(struct aiocb *aiocbp); ●int aio_error(const struct aiocb *aiocbp); ●ssize_t aio_return(struct aiocb *aiocbp); ● PŘÍKLAD: LINUX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lPlánování ●některé I/O operace požadují řazení do front na zařízení ●některé OS se snaží o „spravedlnost“ lVyrovná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 I/O SUBSYSTÉM V JÁDRU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 PŘÍKLAD: SUN ENTERPRISE 6000 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ gigaplane bus SBUS SCSI bus fast ethernet hard disk ethernet laser printer modem mouse keyboard 0 0.01 0.1 1 10 100 ‹#›/32 lCaching ●rychlá paměť udržuje kopii dat ●vždy pouze kopii ●caching je klíčem k dosažení vysokého výkonu lSpooling ●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 lRezervace zařízení ●exkluzivita přístupu k zařízení pro proces ●rezervace / uvolnění – volání systému ●pozor na uváznutí (deadlock) I/O SUBSYSTÉM V JÁDRU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lVzpamatování se po poruše při chybě čtení z disku, zjištění nedostupnosti zařízení, po náhodné chybě zápisu, … lVolání požadující I/O operaci získá číslo chyby ●typicky záporná hodnota lUdržuje se záznam o chybách v systému ●pro následné analýzy ●syslog, events (viewer), ... CHYBOVÉ ŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 lPří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 PŘ.: I/O POŽ. PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ request I/O send request to device driver, block process if apropriate process request, issue commands to controller, configure controller to block until interrupted monitor device, interrupt when I/O completed I/O completed, generate interrupt receive interrupt, store data in device-driver buffer in input, signal to unblock device driver determine whitch I/O completed, indicate state change to I/O subsystem transfer data (if apropriate) to process, return completion or error code I/O completed, input data available, or output completed time can already satisfy request? interrupt system call return from system call device-controller commands device controller interrupt handler device driver kernel I/O subsystem kernel I/O subsystem user process no yes ‹#›/32 lI/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 VÝKON PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 PŘÍKLAD: SÍŤOVÁ APLIKACE PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ sending system interrupt generated character typed interrupt handeled device driver kernel user process kernel device driver network adapter interrupt generated interrupt handeled system call completes context switch context switch state save state save context switch context switch receiving system network adapter network packet received interrupt handeled device driver kernel network daemon kernel network subdaemon hardware state save context switch context switch context switch network ‹#›/32 lOmezujeme počet přepnutí kontextu lOmezujeme zbytečné kopírování dat lOmezujeme počet přerušení tím, že přenášíme delší bloky lVyužíváme všech výhod (funkcí) moderních řadičů lPoužíváme co nejvíce DMA lVšechny komponenty kombinujeme s cílem dosažení co nejvyšší propustnosti ●CPU, paměť, sběrnice, I/O zařízení ZVYŠOVÁNÍ VÝKONU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/32 Výukovou pomůcku zpracovalo Servisní středisko pro e-learning na MU http://is.muni.cz/stech/ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ