Näide läbi kihtide Ülesandepüstitus Kihtideks jagunemine Serverrakenduse komponendid ja nende vaheline suhtlus Paralleeltöötlus Soklid protsesside vahel ja üle võrgu Võrk, DMA, zerocopy andmeülekanne Kliendi poolne võrk Brauser, protsessideks ja lõimedeks jagnemine Graafikaliidesed MEELIS ROOS 1
Ülesandepüstitus Vaatame, mis toimub ühe veebilehe serveerimisel ja vaatamisel Kliendil on veebibrauser Serveris on rakendusserver, selles rakendus, mis suhtleb andmebaasiga Osa veebilehest genereeritakse dünaamiliselt, osa ressursse serveeritakse staatilistest failidest Klient ja server kasutavad oma OS ressursse Võrgustackid tekitavad ühendused läbi eri kihtide kahe masina rakenduste vahel MEELIS ROOS 2
Kihtideks jagunemine Võrgu mõttes on kõik kihid läbitud rakenduskihis on HTTP, pakkimine, seansid, HTML/XML/JSON esituseks Opsüsteemi teenustest kasutatakse kah enamust protsesside ajajaotus, protsesside vaheline side, mäluhaldus, salvestussüsteemid, failisüsteemid, võrguseadmete I/O MEELIS ROOS 3
Serverrakenduse komponendid Protsessid: Veebiserver Rakendusserver Rakendus ise Andmebaasiserver Operatsioonisüsteemi teenused: Võrgustack Salvestussüsteem Failisüsteem Ajajaotus Mäluhaldus IPC MEELIS ROOS 4
Paralleeltöötlus Tahame toetada korraga paljude klientide päringuid võimalikult väikese latentsiga Erinevates moodulites ja kihtides on vaja paralleelsust Iga protsessi võib olla mitu instantsi, või võib iga protsess olla mitmelõimeline Ühtlasi saame ära kasutada mitut protsessorit Kuhu on mõtet võtta olekumasin paljude soklitega, kuhu lõimed, kuhu protesssid? Kuidas käib andmevoogude sünkroniseerimine kõigi nende vahel? MEELIS ROOS 5
Soklid Suhtluseks serverrakenduse protsesside vahel (kus täpsemalt?) Suhtluseks klientide ja serveri vahel Palju paralleelseid kliente Ühel kliendil mitu päringut Ühel kliendil potentsiaalselt mitu ühendust korraga Osa päringuid saab staatiliselt serveerida, tahaks efektiivsust (sendfile() ja analoogid) Osade päringute puhul ei pääse sisu töötlusest Soklite jagamine protsesside vahel MEELIS ROOS 6
Võrk HTTP kasutab transpordikihist TCP protokolli teeme töökindla toru iga HTTP ühenduse jaoks Port 80, kuulav sokkel serveris (tõenäoliselt jagatud mitme protsessi poolt või on mitmelõimelises protsessis) DNS nimelahendus serveri nimele IP-de leidmiseks (UDP port 53 nimeserveril) Klientidel igal oma IP, iga TCP ühenduse kliendipoolne port on juhuslik All on IP (IPv4, IPv6) ruudime paketthaaval Füüsiliseks kihiks on tavaliselt Ethernet või WiFi, mõnedes vahepealsetes segmentides vahel muu (DSL) Kliendi poolel vastupidi liides, IP, TCP, rakendus MEELIS ROOS 7
DMA, kopeerimise vältimine Salvestisüsteemidega suhtlemiseks on kastusel DMA, et andmeülekanne toimuks taustal ja CPU saaks muuga tegelda Ketta taga ootav protsess või lõim blokeerub Katkestustega juhitud vookontroll käskude järjekorrale Võrguliidestega suhtluseks on samuti DMA anname aga järjekorra saatmiseks ette ja võrguliides annab vastu teise järjekorra lugemiseks Katkestustel põhinev vookontroll DMA optimeerime scatter-gather DMA, kontrollsummade arvutamine, segmenteerimine Zero-copy arhitektuur las kettakontroller loeb andmed DMA-ga mällu ja võrgukaart saadab samast mälualast DMA-ga kliendile, ilma et peaks mälus ringi kopeerima MEELIS ROOS 8
Kliendi komponendid Brauser Töölauaga seotud protsessid (aknahaldurid, desktopirakendused, compsition manager) Operatsioonisüsteemi komponendid: Võrgustack Mäluhaldus Ajajaotus Failisüsteemid, salvestisüsteemid Turve ja liivakastid Graafiline kasutajaliides Sisendseadmed MEELIS ROOS 9
Brauser Eeskätt graafilise kasutajaliidesega Kasutab sisendseadmeid (hiired, multitouch, klaviatuurid) Paljude kaartidega Vajab liivakaste pluginatele ja veebilehtede üksteise eest isoleerimiseks Tahab kiiruse huvides teha lehtede ja ressursside eellaadimist (mälutarve!) MEELIS ROOS 10
Protsessid ja lõimed Brauser tahtis vanasti 1 protsessi Siis paljulõimelist protsessi igal kaardil oma lõim (suur protsess palju mäluga) Tänapäeval igal kaardil oma protsess Eraldi protsessid GUI ja iga veebilehe konteksti+skriptide jaoks (isoleerimine) Eraldi protsessid pluginate jaoks IE + Windows: OS jagab sama kasutaja protsessid mitme turvataseme peale, enamus IE koodist käib madalama turvatasemega ning ei saa ligi ei failidele ega desktopile MEELIS ROOS 11
Graafikaliidesed Esimene põlvkond lihtsalt rastergraafika kaadripuhvriga (framebuffer) Rastergraafika tasemel kiirendusoperatsioonid line, box, fill, blit,... Vektorgraafika (3D 2D) Video (lahti)pakkimise kiirenduskomponendid DMA+IRQ järjekord MEELIS ROOS 12
Graafika-APId MSDOS puudub Macintosh, Amiga "toolbox" ROM is, opsüsteem laiendas seda Windows GDI, hiljem GDI+; lisaks DirectX UNIX X11, hiljem lisaks OpenGL, nüüd Linuxis ka Wayland X11 asemel OpenGL all MacOS X Quartz (terve pere), Quartz Extreme (sisemiselt vektor) Windows Vista Windows Presentation Foundation ehk Avalon (sisemiselt vektor) MEELIS ROOS 13
Brauser ja graafika Tüüpiliselt 2D kiirendus rastergraafikaga Tänapäeval ka 3D kiirendus (WebGL kaudu ka Javascriptile kättesaadav) Lisaks videomängimise kiirendus MEELIS ROOS 14
Sisendseadmed Opsüsteem liidestab eri seadmeid ja tunneb spetsiifilisi protokolle Rakendused näevad standardiseeritud sündmusi KeyUp, KeyPress, KeyDown MouseMove (abs + rel), MouseDown, MouseUp, Click, DoubleClick,... Multitouch sündmused Aknahaldur või töölauakeskkond suunab sündmused ümber konkreetsele aknale, mille peal need on, või fookuse järgi MEELIS ROOS 15