I/O Föreläsning 5
Dagens fråga: Hur hänger det ihop med användarkommandon, biblioteksfunktioner och systemanrop? User space Vanliga program Användarkommandon Kommandon som är inbyggda i kommandotolken (shell) eller som är kompilerade (exekverbara) program som ligger i standard directoryn. Biblioteksfunktion för systemanrop Systemanrop Färdigkompilerad (C-)funktion som har assembler kod för systemanropet, dvs TRAP. Kan också vara användarvänliga med enklare parametrar/returvärden/felkoll. Exekvering av TRAP för systemanropet med parametrar etc. lagda på rätt ställen i minnet så att OS hittar dem. Kernel space Kod i OS-kärnan OS Föreläsning 5, I/O 2
Användarkommandon Användarkommando: Kommando inbyggt i kommandotolken som ofta är ett C-program ex: which kill kill: shell built-in command eller Exekverbar fil, ofta kompilerad från C-program, som gjorts tillgänglig genom att den placeras i ett directory som normalt ingår i användarens sökväg. ex: which rm /usr/bin/rm Använder normalt sett biblioteksfunktioner för systemanrop (eller systemanrop direkt). OS Föreläsning 5, I/O 3
Sökväg - hur shell hittar kommandon Kommandotolken har environment variabler: som t.ex. talar om vilken DISPLAY/terminal som används eller vilka directoryn som skall sökas igenom då man ger ett kommando, PATH ripper:fri> echo $PATH /opt/local/lprng/3.6.19/bin:/afs/it.kth.se/opt/commercial/ netscape/communicator4.73:/afs/cell/opt/commercial/acrob at/acroread4.05/bin:/opt/gnu/emacs/20.7/bin:/opt/gnu/bin :/opt/mail/exmh/2.5/bin:/opt/lang/tcl/8.3/bin:/opt/local /bin:/usr/afsws/bin:/usr/athena/bin:/afs/it.kth.se/home/ ds/robertr/bin:/usr/sbin:/usr/local/bin:/usr/lang:/usr/u cb:/usr/bin:/bin:/usr/local/etc:/etc:/usr/local/bin/x11: /usr/etc:/usr/local/gnubin:/afs/cell/misc/hacks/bin:/afs /cell/misc/local/bin:/usr/openwin/bin:.:/usr/local/bin/x 11 ripper:fri> OS Föreläsning 5, I/O 4
Generiskt systemanrop Steg i ett generiskt systemanrop 1. Lägg information (nummer) om vilket systemanrop man gör på förutbestämd plats, oftast ett register 2. Gör mjukvaruavbrott, TRAP, till OS-kärnan 3. OS-kärnan hittar parametrar till systemanropet på något av följande vis: - på stacken - i register - i datablock som pekas ut via register Vilka systemanrop som finns är OS-beroende Deras exakta implementation på assembler/registernivå beror på datorarkitekturen Systemanrop kan vara standardiserade på biblioteksfunktionsnivå (ex: POSIX) OS Föreläsning 5, I/O 5
Biblioteksfunktioner var finns de? - C s standardbibliotek /usr/lib/libc.a header objekt modul kill.o objekt modul header objekt modul Arkiv (bibliotek av objektmoduler) ripper:fri> nm -A -g /usr/lib/libc.a grep kill /usr/lib/libc.a:thr_stub.o:000003c0 W thr_kill /usr/lib/libc.a:kill.o: U _cerror /usr/lib/libc.a:kill.o: U _cerror64 /usr/lib/libc.a:kill.o:00000000 T _kill /usr/lib/libc.a:kill.o:00000000 W _libc_kill ripper:fri> ls ripper:fri> ar -x /usr/lib/libc.a kill.o ripper:fri> ls kill.o OS Föreläsning 5, I/O 6
Hur ser systemanropet kill ut? ripper:fri> /usr/ccs/bin/dis kill.o **** DISASSEMBLER **** disassembly for kill.o section.text _kill() _libc_kill() 0: 82 10 20 25 mov 37, %g1 4: 91 d0 20 08 ta 0x8 8: 1a 80 00 05 bgeu 0x1c c: 1b 00 00 00 sethi %hi(_cerror64), %o5 10: 9a 13 60 00 or %o5, _cerror64, %o5! _cerror64 14: 81 c3 40 00 jmp %o5 18: 01 00 00 00 nop 1c: 81 c3 e0 08 jmp %o7 + 8 20: 90 10 00 00 clr %o0 ripper:fri> OS Föreläsning 5, I/O 7
I/O - Föreläsningen Vad händer då man läser en fil eller öppnar en webbsida? Hur hanterar man alla olika typer av I/O-enheter? Organisation av I/O-systemet Några viktiga typer av I/O-enheter I/O i UNIX Kap: 5.1-5.5, 5.7-5.9, 10.5 OS Föreläsning 5, I/O 8
Om I/O I/O är tillsammans med processning den viktigaste uppgiften för ett OS Utan I/O kan man inte kommunicera med datorsystemet... I/O- systemet är ofta komplext: Många enheter Många olika typer av enheter från olika tillverkare Nya enheter I/O-systemet utgör ofta en stor (största?) del av OS-koden OS Föreläsning 5, I/O 9
Tillbakablick - organisation av OS Applikationer ex. Webb, spel, administrativa system Editorer Kommandotolk/shell Kompilatorer Operativsystem CPU/Processer Kommunikation Systemanrop I/O Filsystem Minneshantering User space Kernel space Maskininstruktioner Mikroarkitektur Fysiska komponenter OS Föreläsning 5, I/O 10
Målsättning med I/O-systemet Användarvänligt Rent gränssnitt mot I/O-systemet Transparent kapsla in/dölj detaljer om hur olika enheter fungerar och den exakta implementationen i I/O-systemet Lätt att lägga till nya enheter (både typer och tillverkare) Effektivt OS Föreläsning 5, I/O 11
ISA expansion bus Ultra I/O I/O-hårdvara -ett exempel: en hyfsat modern PC omkring 1998 interrupt parallel port serial port graphics controller AGP port/bus CPU cache Memory DRAM system controller (north bridge) PCI bridge DMA controller (south bridge) floppy USB bus IDE bus SCSI controller PCI bus SCSI bus IDE-disk controller disk disk disk disk CD-R OS Föreläsning 5, I/O disk 12
Struktur hos I/O-system Hur får vi en bra struktur? Abstraktion Inkapsling Skiktad (layered) arkitektur OS Föreläsning 5, I/O 13
Karaktäristika för I/O-enheter Aspekt Variant Exempel Dataöverföringssätt Accessmetod Överförings-shemaläggning Delad access Hastighet Riktning Teckenvis Blockvis Sekventiell Random Synkron Asynkron Dedicerad Möjlig att dela Latency Söktid Överföringshastighet Fördröjning mellan operationer read-only write-only read-write Terminal Hårddisk Ethernetport CD-ROM Band Tangentbord Band Tangentbord CD-ROM Bildskärm Hårddisk OS Föreläsning 5, I/O 14
Abstraktion -huvudklasser av I/O-enheter Block-devices Läser och skriver block av data Typiska operationer (systemanrop): read, write, (seek) Ex: disk, cd-rom, band Character-devices Skriver/läser en ström av tecken Typiska operationer: put, get Ex: tangentbord, skrivare, nätverksenheter, mus Operationerna på dessa liknar operationer på filer! I UNIX monteras I/O enheter i filsystemet (/dev ) OS Föreläsning 5, I/O 15
Abstraktion - det som inte riktigt passar i vår klassifiering Klockor Operationer: läs av tid, läs av förfluten tid, starta timer Ofta inte standardiserade operationer Nätverksenheter Ofta inte helt optimalt att accessa med samma operationer som filer (även om det går...) Sockets: vanligt användargränssnitt (UNIX, NT) Kontakt för att skicka/ta emot meddelanden från system som är inpluggat via an annan kontakt/socket OS Föreläsning 5, I/O 16
Inkapsling och skiktad arkitektur Först måste vi förstå hur I/O fungerar...
Blockerande icke-blockerande I/O - synkron asynkron I/O Blockerande I/O processen som begärt I/O väntar till dess I/O-operationen är klar Ex: läsning blockerar oftast Icke-blockerande I/O - processen som begärt I/O väntar inte på att I/O-operationen skall bli klar Ex: skrivning är ofta icke-blockerande OBS! Någon (läs OS) måste i samtliga fall kontrollera att I/O blivit klar och ta hand om eventuella fel... OS Föreläsning 5, I/O 18
Typisk I/O-operation 1. Ge enheten order att genomföra I/O genom att skriva i kontrollregister 2. Vänta medan enheten utför operationen 3. Returnera när enheten är klar OS Föreläsning 5, I/O 19
Hur styr man I/O-enheterna? Memory mapped I/O - Ports Memory mapped I/O: För att förenkla för programmeraren mappas kan kontrollregisters och dataregisters adresser in i den vanliga adressrymden Memory mapped I/O När man ger order genom att skriva i kontrollregistret sätter man alltså bitar i något som ser ut att ligga på en vanlig adress Ports: I/O-enheten får ett portnummer Kontrollregistren läses/skrivs med speciella I/O-instruktioner Vissa arkitekturer som Pentium använder både minnesmappad I/O och I/O-portar OS Föreläsning 5, I/O 20
Hur väntar man bäst på I/O? Alternativen: Programstyrd I/O pollning Avbrottsstyrd (interruptstyrd) DMA OS Föreläsning 5, I/O 21
Programstyrd I/O - pollning I/O-enheten signalerar att den är klar genom att sätta en bit (I/O-klar) i ett av dess kontrollregister Programmet ligger i en loop och läser ett kontrollregister för att upptäcka när I/Oenheten är klar. Kallas pollning. OS Föreläsning 5, I/O 22
Pollning - exempel Process som skriver ut text på en terminal OS Skriv ut en textsträng på en terminal: 1. Skriv ett tecken till terminalens dataregister 2. Sätt biten som talar om att det finns ett nytt tecken att skriva ut på terminalen i terminalens kontrollregister 3. Loopa (pollning) Läs terminalens kontrollregister Om inte I/O klar biten är satt så fortsätt loopa 4. Upprepa från 1 till dess alla tecken skrivits ut I/O klar Ny data 10 01 Kontrollregister V Q Dataregister Q OS Föreläsning 5, I/O 23
Om pollning Att notera: Pollning belastar CPU:n Är bra om: Kort väntan på att enheten skall bli klar Man inte har råd med avbrott eller DMA t.ex i små inbyggda system Används normalt inte i någon större utsträckning i mer avancerade system Om minnesmappad I/O: Sidan som innehåller adressen där kontrollregistret mappats in får inte cachas då upptäcker man inte när enheten blir klar OS Föreläsning 5, I/O 24
Avbrottstyrd I/O Låt I/O-enheten generera ett avbrott (interrupt) när enheten är klar med I/O En avbrottsrutin fångar upp avbrottet och kontrollerar ev. fel och ser till att en ev. blockerad process som väntar på I/O hamnar i READY-kön Avbrott kostar att hantera! involverar processbyte till avbrottshanterare i kärnan mm. OS Föreläsning 5, I/O 25
Avbrottsstyrd I/O - ett exempel med blockerande I/O Processen initierar I/O Processen blockeras till dess I/O klar BLOCKED Låt en annan/andra process/er köra Abrottsrutin: kontrollerar ev fel och lägger processen i READY-kön Avbrott I/O-klar READY Förr eller senare får processen exekvera igen OS Föreläsning 5, I/O 26
Regler för avbrottsrutiner Får inte påverka processen som avbröts Måste bli klara snabbt Ta bara hand om det som måste tas omhand Får inte vänta på något Kan inte bli blockerad (hamna i tillståndet BLOCKED) Får inte generera sidfel Får inte utföra systemanrop OS Föreläsning 5, I/O 27
Precisa avbrott och inte... För den som skriver en avbrottsrutin är det viktigt att veta om avbrott är precisa eller ej Precist avbrott: hårdvaran sparar undan ett väldefinierat tillstånd då avbrottet inträffade Icke-precist avbrott: avbrottsrutinen får reda ut tillståndet som t.ex. eventuella halvt utförda instruktioner etc. OS Föreläsning 5, I/O 28
I/O med DMA Hur undviker man en massa avbrott om mer än en byte/ett ord skall skrivas/läsas? DMA Direct Memory Access En hårdvaruenhet som kan instrueras att överföra en mängd data (block) till/från minne och någon I/O enhet Beroende på var DMA-controllern är placerad går data via DMA-enheten eller direkt till/från minne (fly-by-mode) OS Föreläsning 5, I/O 29
I/O med DMA - exempel: page-in läs in en sida från disk 1. Programmera DMA-controllern att läsa in en sida till minnet med startadress X avbrott 2. Programmera disk-controllern att skicka data till DMA-controllern CPU cache Memory DRAM 3. DMA-controllern skickar data till minnet 4. När sidan är på plats i minnet genererar DMAcontrollern ett avbrott 5. Avbrottet tas omhand av avbrottsrutin i kärnan system controller (north bridge) PCI bus PCI bridge DMA controller (south bridge) IDE bus IDE-disk controller OS Föreläsning 5, I/O disk 30 CD-R
Var läggs data som läses in/skall skrivas ut med DMA? Sidan som data läses från/skrivs till får inte kastas ut från minnet (page-out) innan DMA (I/O) är klar Sidan måste vara låst i minnet Normalt går I/O till/från buffert i kernel-space, dvs: Vid läsning: läs till kernel-space kopiera sedan till processens adressrymd Vid skrivning: kopiera data från processen till kernel-space Onödig kopiering kan undvikas vid överföring av hela sidor genom att man mappar om sidtabellerna OS Föreläsning 5, I/O 31
Exempel: hantering av sidfel 1. Trap till OS 2.Konstatera var på disken sidan ligger 3.Instruera DMA att föra över sidan till buffert i minnet 4.Låt annan process köra 5.Interrupt från DMA 6.Kopiera buffert till ledig ram i user space 7.Uppdatera sidtabellen memory memory user space sidtabell user space sidtabell kernel space kernel space DMA controller DMA controller PCI bus PCI bus Disk controller Disk controller disk disk OS Föreläsning 5, I/O 32
Vem programmerar olika I/O-enheter (och DMA controllern)? Hårdvaruenheter är: Ofta komplicerade att styra Kräver ofta att hänsyn tas till realtidsaspekter Kan fungera lite olika beroende på tillverkare Styrs via drivrutiner (device drivers) Drivrutinen ger ett enklare gränssnitt mot hårdvaran (kaplsar in och döljer en del detaljer) Skrivs normalt av hårdvarutillverkaren som tillverkade I/O-enheten! OS:et måste tillhandahålla ett väl definierat gränssnitt mot drivrutinerna För att möjliggöra att någon annan skriver dem För att kunna isolera felaktiga drivrutiner OS Föreläsning 5, I/O 33
Drivrutiner forts. Drivrutiner anropas (indirekt) av systemanrop Processen som anropade systemanropet kan anses köra drivrutinen En I/O-enhet kan ofta ha fler än en I/O-operation igång samtidigt (eller köade) Drivrutinskoden måste vara re-entrant Drivrutiner och avbrottsrutiner i UNIX-terminologi: Drivrutin = top half device driver Avbrottsrutin = bottom half device driver OS Föreläsning 5, I/O 34
Drivrutiner forts. Vilka drivrutiner som finns i OS-kärnan kan: Konfigureras när man bygger kärnan -Vanligt i äldre system och i system där nya I/O-enheter inte kommer till särskilt ofta Länkas in vid behov (dynamisk länkning) - Vanligt i system där nya I/O-enheter tillkommer ofta och där användaren inte kan förväntas veta hur man konfigurerar/bygger en kärna (PC) Hur hanteras enheter som kan ryckas ur läggas till under drift? (hot-pluggable) OS Föreläsning 5, I/O 35
Hårdvaruoberoende I/O-kod i kärnan Inte del av drivrutin Sköter infrastruktur Enhetligt gränssnitt mot I/O-enheter Större delen av kärnan behöver inte bry sig om något är en fil, terminal, tangentbord, pipe... Enhetlig blockstorlek Namngivning, åtkomstskydd, reservering Buffring Filsystem OS Föreläsning 5, I/O 36
Delar av I/O-systemet utanför kärnan Spooling lägga filer i kö för utskrift Biblioteksrutiner för: Mer direkta systemanrop ex: read, open, creat Formatterad I/0: printf, scanf OS Föreläsning 5, I/O 37
Skiktad struktur hos I/O-system OS-kärna hårdvara user level device independent kernel code device drivers interrupt handlers device controller (adapter) device Spooling, I/O-biblioteksrutiner Filsystem, namn, skydd, buffring, reservering, blockstorlek OS-vänligare gränssnitt för att styra I/O-enheter. Skrivs av tillverkaren. Kontrollerar resultat, schemalägger processen som väntat på I/O Styr- och kontrolldelen av I/Oenheten: -kontroll- och dataregister -mer avancerad styrenhet med processor mm. Ex. IDE-controller OS Föreläsning 5, I/O 38
Skiktat I/O-system Kernel Kernel I/O subsystem SCSI device driver keyboard device driver mouse device driver... PCI device driver IDE device driver floppy device driver SCSI device controller keyboard device controller mouse device controller... PCI device controller IDE device controller floppy device controller SCSI disk keyboard mouse... PCI device IDE disk floppy device OS Föreläsning 5, I/O 39
Några detaljer Buffring och cachning Strömförsörjning
Buffring och cachning User space Kernel Network controller Buffert håller original Cache håller kopia för effektivitetsskäl Vissa I/O-enheter kan man inte styra hur mycket data som kommer in över Ex: nätverksenheter Man använder ofta dubbla buffertar i kärnan för att ta hand om indata OS Föreläsning 5, I/O 41
Strömförsörjning - energibesparing Alla världens datorer drar mycket ström! Det finns mycket energi att spara Portabla och handhållna terminaler: Som är batteridrivna är extra känsliga för stor effektförbrukning kort batterlivslängd Ex: NOKIA körde om Ericsson genom - längre batterilivslängd (och design) OS kan spara ström b.la. genom att: Stänga av enheter vid behov Schemalägga I/O på så effektsnålt sätt som möjligt I vissa fall kan man sänka spänning och klockfrekvens på CPUn för att spara energi OS Föreläsning 5, I/O 42
Exempel på I/O-enheter Hårddiskar (Klockor) Terminaler
Hårddiskar Hårddisken indelad i spår med ett antal sektorer per spår Kan ha en fysisk geometri med t.ex: Olika antal sektorer/spår beroende på var på disken spåret ligger Virtuell geometri (det programmeraren ser) kan skilja sig från den fysiska En sektor innehåller b.la. felrättande koder för att kunna upptäcka och ev. korrigera läs/skrivfel. preamble data ECC ex: 512 byte ex: 16 byte OS Föreläsning 5, I/O 44
Diskparametrar exempel Parameter IBM 360KB floppy WD 18.3 GB Söktid intilliggande cylinder 6 msec 0.8 msec Söktid i medel 77 msec 6.9 msec Rotationstid 200 msec 8.33 msec Motor start/stopp tid Överföringstid 1 sektor 250 msec 20 sec 22 msec 17 microsec OS Föreläsning 5, I/O 45
Diskarmsschemaläggning FCFS SSF SCAN Eftersom söktiderna är relativt stora är det viktigt att schemalägga hur diskarmen (läs/skrivhuvudena) flyttas Varianter FCFS: First Come First Serve (inte särskilt bra) SSF: Shortest Seektime First (svältningsrisk) SCAN (hissalgoritm), C-SCAN LOOK, C-LOOK C-SCAN OS Föreläsning 5, I/O 46
Varför buffert i disk enheten? I många diskenheter finns en buffert (eller cache) Den kan användas för att: Mellanlagra information som läses från den fysiska disken men som inte hinner skickas över bussarna Mellanlagra läs/skrivbegäran för att bättre kunna schemalägga dem Cacha information som läses med read-ahead, dvs. man chansar på att block som följer direkt efter ett läst block också kommer att läsas OS Föreläsning 5, I/O 47
Stable storage - hur man undviker att tappa data vid diskkrasch Ha två (eller flera) fysiska diskar Alla skrivningar/läsningar går till bägge diskarna (spegling) Vid skrivning kontrollera att bägge skrivningarna lyckas Vid läsning kontrollera att bägge läsningarna lyckas och ger samma resultat OS Föreläsning 5, I/O 48
RAID - Redundant Array of Inexpensive (Independent) Disks Block En hårddisk controller kan ofta hantera flera hårddiskar och läsa/skriva samtidigt till dem Data strimlas stripas till flera olika diskar Block striping: Ett block delas i flera delar som skrivs/läses samtidigt till flera diskar Genom att dessutom placera ut felrättande koder på diskarna kan man återskapa innehållet om en (eller möjligen några) av diskarna kraschar OS Föreläsning 5, I/O 49
Grafiska terminaler graphics controller AGP Video RAM CPU cache DRAM (north bridge) De flesta grafiska terminaler använder raster (bitmap) grafik Windows har en uppsjö systemanrop för att hantera grafiska terminaler och fönster UNIX: Vanligast är X-klient/server i user-space OS Föreläsning 5, I/O 50
X - grafik som användarprocesser i UNIX Applikation Window manager Utseende (Motif) Intrinsic toolkit Xlib X-klient UNIX Hårdvara X-server UNIX Hårdvara Remote host (shell.it.kth.se) Terminal (laptop) OS Föreläsning 5, I/O 51
I/O i UNIX I/O-enheter monteras i filsystemet i /dev Character special files Block special files Major device number: identifierar device driver som används Minor device number: identifierar enheten om device drivern hanterar flera enheter Sockets: en abstraktion som används för nätverkskommunikation Man har försökt ha ett systemanrop som skulle klara alla typer av enheter: ioctl() Blev ganska komplicerat till slut inte del av POSIX OS Föreläsning 5, I/O 52
UNIX - kärnans datastrukturer för I/O Per process fildescriptortabeller Gemensam tabell för öppna filer Filsystemsrecords Filposition r/w pekare till i-node Filposition r/w pekare till i-node Nätverksrecords Pekare till: nätverksinfo läs/skriv funk. etc. i-nodes tabell för öppna filer Nätverks informations tabell (med i-noder) OS Föreläsning 5, I/O 53
Summering vad vi pratat om idag I/O Typer av I/O-enheter Struktur hos I/O-systemet Hårddiskar, terminaler I/O i UNIX OS Föreläsning 5, I/O 54
Kommande föreläsningar och övningar Nästa föreläsning: Trådar och multiprocessorer OS Föreläsning 5, I/O 55