10. Siirräntäjärjestelmät Laitteiden liittäminen järjestelmään Siirrännän hierarkia Muistiinkuvattu I/O DMA-siirto I/O-pyyntöjen käsittely 17/01/2019 Liisa Marttinen kevät 2005
Tietokonejärjestelmä Keskusyksikkö (CPU) prosessori eli suoritin keskusmuisti väylät ohjaimet oheislaitteet
Laiteohjain (I/O Moduuli) suoritin käyttäjäprosessi Muisti laiteajuri KJ-prosessi, (tai aliohjelma?) väylä data c/s laiteohjain laite laite laiteohjainprosessi (device controller, device controller process)
Laitteiden käytön toteutus Käyttäjäohjelma kutsuu käyttöjärjestelmän laiteajuria tekemään I/O:n. Laiteajuri suoritetaan samalla suorittimella kuin käyttäjäohjelmakin. Laiteajuri ohjaa laitteen toimintaa laitteen laiteohjaimella olevien kontrollirekisterien (muistialue ’c’) avulla Laiteajuri voi lukea laitteen tilatietoa laiteohjaimella olevien statusrekisterien (muistialue ’s’) avulla Laiteajuri voi lukea (kirjoittaa) laitteen lukemaa (laitteelle kirjoitettavaa) tietoa laiteohjaimella olevien datarekistereiden (muistialue ’data’) avulla Kontrolli-, status- ja datarekisteri kolmikko muodostaa ”I/O-portin” suorittimen näkökulmasta ks. laiteohjainkuva (ed. kalvo)
Siirrännän hierarkia sovellusohjelmataso käyttöjärjestelmätaso loogisia kokonaisuuksia, tietueita ja tiedostoja ohjelman sisäisiä nimiä Readln (File1, X) Open (Tdsto, RW) käyttöjärjestelmätaso laitteisto 17/01/2019 Liisa Marttinen kevät 2005
käyttöjärjestelmätaso sovellusohjelmataso käyttöjärjestelmätaso rutiinit, jotka toteuttavat ja valvovat siirräntää laiteriippumaton siirräntä sovelluksille yhtenäinen tapa käyttää kaikkia siirräntäpalveluita laiteriippuva siirräntä laitteiden todelliseen käyttöön liittyvä ohjausohjelmisto koodattu laiteajureihin laitteisto
käyttöjärjestelmätaso laitteisto sovellusohjelmataso käyttöjärjestelmätaso laitteisto siirräntä voidaan toteuttaa kokonaan prosessorin valvonnassa ei hyödynnetä rinnakkaisuutta laiteohjain (siirräntään erikoistunut prosessori) huolehtii itsenäisesti siirrännästä prosessorin ja ohjainten välinen kommunikointi 17/01/2019 Liisa Marttinen kevät 2005
laiteriippumaton taso SIIRRÄNNÄN HIERARKIA muuttujat SOVELLUS laiteriippumaton taso KÄYTTÖJÄRJESTELMÄ keskeytys laiteajurit LAITEOHJAIMET tulostus syöttö 17/01/2019 Liisa Marttinen kevät 2005
laitekuvaaja yksi kutakin laitetyyppiä varten talletettavat tiedot riippuvat laitteesta laitteen yksilöivä tunnus (väyläosoite) ohjeet laitteen käytöstä urien, sektorien ja levypintojen määrä, lohkon koko viitteet näppäimistön merkinmuunnostauluihin laitteen tilatietoa varattu/vapaa/rikki laitteeseen liittyvät semaforit viitteet jonottaviin palvelupyyntöihin viite laitetta käyttävän prosessin kuvaajaan
laiteriippumattoman siirrännän tehtäviä loogisesta tiedostonimestä => käytettävän laitteen tyyppi pitää kirjaa levytilan vapaista ja varatuista alueista siirrännän puskurointi (levylohko) luku/kirjoituskohdan ylläpito tarvittaessa käynnistää fyysisen siirrännän antaa laiteajurille tehtävän 17/01/2019 Liisa Marttinen kevät 2005
laiteajurin tehtäviä tehtävät riippuvat laitteesta muodostaa parametrien ja laitekuvaajan perusteella laitetta ohjaavat käskyt esim. levylohkonumeroiden muuttaminen levypinnan, uran ja sektorin numeroiksi levypyyntöjen optimointi ohjaimella tehtävän fyysisen siirrännän käynnistys siirrännän kirjanpito siirron oikeellisuuden tarkistukset ja virheiden korjausyritykset 17/01/2019 Liisa Marttinen kevät 2005
AJURI- PROSESSI MUISTI LEVYOHJAIN laiterekisterit -data -ohjaus -ok MUISTIINKUVATTU I/O: siirrettävä tieto + ohjaustiedot keskusmuistiin ‘kommunikointialueelle’ LEVY
PROSESSORI MUISTI LEVYOHJAIN puskuri osoite lkm DMA-SIIRTO: ohjain siirtää itsenäisesti tietoa levyltä keskusmuistiin LEVY
I/O-pyyntöjen käsittely sovellusprosessi sovellusprosessi käsittelee muuttujia, tietueita, tiedostoja,.. käyttää kirjastorutiineja Readln(File1,X) Open (TdstoX,RW) oheislaitteet sovellukselle erikoistiedostoja käyttöjärjestelmä laiteohjain 17/01/2019 Liisa Marttinen kevät 2005
Käyttöjärjestelmä Laiteohjain laiteriippumaton taso laiteajurit kaikille laitteille yhteiset toiminnot laiteajurit jokaiselle laitteelle oma ajuri huolehtii kunkin laitteen erityispiirteistä Laiteohjain suorittaa fyysisen siirron laitteen ja keskusmuistin välillä 17/01/2019 Liisa Marttinen kevät 2005
KÄYTTÖJÄRJESTELMÄ laite- ajuri 1 laiteriippumaton taso laite- ajuri 2 Sovellus DATA- ALUE laiteriippumaton taso laite- ajuri 2 laite- ajuri 3 Sovellus DATA- ALUE ... laite- ajuri n lohkopuskurit 17/01/2019 Liisa Marttinen kevät 2005
Laite- Sovellus riippu- maton taso data- alue Laite- ajuri Laite- Laiteriippumaton taso valmistelee ja käynnistää siirron ja jää odottamaan siirron valmistumista Laite- riippu- maton taso Sovellus data- alue Laiteajuri käynnistää pyydettäessä fyysisen I/O:n ja jää odottamaan siirron valmistumista siirtopyyntö aiheuttaa keskeytyksen ja vie prosessin WAIT-jonoon siirron valmistu- minen vie prosessin READY-jonoon ja aikanaan suoritukseen Laite- ajuri Laiteohjain suorittaa pyydetyn siirron Laite- ohjain Lohkopuskurit Käyttöjärjestelmä data laitteella 17/01/2019 Liisa Marttinen kevät 2005
Esim. tiedostonlukupyyntö Read(tiedostonro, paljonko, minne) Esim. luetaan tiedostosta nro 2 100 tavua muistipaikkaan 200 = muistialueelle Taulu[0,99], joka alkaa muistipaikasta 200 Read (2, 100, 200) 17/01/2019 Liisa Marttinen kevät 2005
Käyttöjärjestelmän toiminta lukupyynnön yhteydessä laiteriippumaton taso suorittaa kaikki siirräntään liittyvät yleiset toiminnot selvittää mikä laite on kyseessä määrittää mikä levylohko on kyseessä tutkii, onko siirräntä yleensä edes tarpeen luettava tieto jo valmiina lohkopuskurissa kirjoitettavaa tietoa ei ole lainkaan muutettu tarvittaessa käynnistää siirrännän ja jää odottamaan sen valmistumista eri laitteita varten omat laiteajurit 17/01/2019 Liisa Marttinen kevät 2005
käyttöjärjestelmä: laiteriippumaton taso tutkii mikä laite on kyseessä prosessin kuvaaja PCB käytettävä laiteajuri; lohkon koko tiedostokuvaajataulu 0 1 2 3 4 ... laitekuvaajat nimi, laitenumero =‘levynro’ uid, gid rwx-bitit r/w-positio lohkonumerot avoimet tiedostot -taulu ….
käyttöjärjestelmä: laiteriippumaton taso lukupositio ja lohkon koko => monesko tiedoston lohko => lohko 0 lukupositio = 0 => tiedoston alku etsi numeron perusteella lohkopuskurista jo löytyy, luetaan sieltä jos ei löydy varaudutaan levylukuun lohkoa 0 ei löydy lohkopuskurista lohkopuskureita lohko 6 lohko 10 lohko 3
käyttöjärjestelmä: laiteriippumaton taso levyltä lukeminen varataan lohkolle puskuri muodostetaan ko. laitteen ajuria varten pyyntöpaketti (lue, puskurin osoite, lohkonumero) viedään paketti ajurin jonoon lohkopuskureita lohko 6 lohko 3 varataan lohkolle 0 puskuri 1 17/01/2019 Liisa Marttinen kevät 2005
Down (Pyyntö_palveltu) * jää odottamaan levyn laiteajurin työjono lue, puskurinro (=1) lohkonro (=0) Laiteriippumaton taso herättää laiteajurin ja jää odottamaan siirron valmistumista Up(Pyyntö_odottaa) *herätä ajuri Down (Pyyntö_palveltu) * jää odottamaan 17/01/2019 Liisa Marttinen kevät 2005
Laiteajuri toista { Down(Pyyntö_odottaa) ; odota pyyntöpakettia Ota pyyntöpaketti jonosta muuta se laiteohjaimen ymmärtämään muotoon; käynnistä fyysinen I/O; Down(Siirto_valmis) ; odota siirron valmistumista jos virhe, niin ilmoita ylöspäin Up(Pyyntö_palveltu) ; ilmoita laiteriippumattomalle tuhoa palvelupyyntöpaketti } ikuisesti levypinta, ura, sektori, tavujen lkm, lohkopuskuri, lue
Laiteohjaimen ymmärtämään muotoon Laske laitekuvaajassa olevan tiedon perusteella tiedon sijainti levyllä levypinta, ura, sektori ja siirrettävien sektoreiden määrä ilmoita laiteohjaimelle mistä = levyosoite minne = lohkopuskurin osoite paljonko = lohkon koko (esim. levyn sektoreina) operaatio = lue 17/01/2019 Liisa Marttinen kevät 2005
Laiteohjain Tutki tehtävät operaatiot laiterekistereistä prosessorin ja ohjaimen välinen kommunikointialue mistä = levyosoite minne = lohkopuskurin osoite paljonko = lohkon koko operaatio = lue Tee fyysinen DMA-siirto ensin laitteelta omaan puskuriin ja sieltä vähitellen keskusmuistin lohkopuskuriin Talleta tieto onnistumisesta laiterekisteriin Aiheuta keskeytys 17/01/2019 Liisa Marttinen kevät 2005
keskeytys ja sen käsittely laitekeskeytys selvitä keskeyttäneen laitteen numero etsi laitteen (=levyn) laitekuvaaja mikä ajuri kyseessä Up(Siirto_valmis) * herättää juuri tätä * siirtoa odottavan * ajurin 17/01/2019 Liisa Marttinen kevät 2005