From Wikipedia, the free encyclopedia
Oikosiirto (engl. DMA tai direct memory access) tarkoittaa tietokonetekniikassa tiedon kopiointia tietokoneen sisällä ilman kopioitavan tiedon kuljettamista suorittimen kautta. Tällöin suurienkin tietomäärien siirto raskaiden luku- ja kirjoitusoperaatioiden (I/O) aikana ei kuormita suoritinta, koska sen ei tarvitse käsitellä kopioitavaa tietoa siirron aikana.
Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
Tyypillisesti oikosiirtoa käytetään tapauksissa, joissa halutaan siirtää tietoa keskusmuistin ja oheislaitteen välillä peräkkäisistä muistipaikoista. Oikosiirto-ohjain kopioi tarvittavan muistialueen sisällön suoraan oheislaitteelle ilman, että suorittimen täytyisi lukea ja kirjoittaa jokainen sana erikseen.
Ilman oikosiirtoa suorittimen täytyisi lukea muistia sana kerrallaan omiin rekistereihinsä ja sitten kirjoittaa tieto I/O-porttiin tai erikoisrekisteriin, jotta se välittyisi oheislaitteelle. Suuria tietomääriä siirrettäessä tämä on tehotonta koska suorittimen täytyy odotella muiden hitaampien tietokoneenosien toimintoja (pääasiassa muistipiirien ja väylien).
Oikosiirtoa saatetaan myös käyttää tilanteessa, jossa tiedon pitää saapua täsmälleen tiettyyn aikaan eli täsmälleen tietyllä kellojaksolla. Ohjelmistopohjainen ajoitus on tyypillisesti epätarkempaa kuin kellojaksontarkka laitepohjainen siirto.
Riippuen arkkitehtuurista tiedon siirräntä äänikortille voidaan tehdä ainakin kolmella eri tavalla: suora siirräntä (engl. Programmed I/O), keskeytysohjattu siirräntä (engl. interrupt-driven I/O) tai oikosiirto. Suorassa siirrännässä ääninäytteet kirjoitetaan ohjelmakoodilla äänilaitteen rekisteriin tietyin väliajoin tai kun tietty arvo saadaan luettua rekisteristä. Keskeytysohjatussa siirrännässä saadaan keskeytys kun uusi ääninäyte voidaan kirjoittaa äänilaitteen rekisteriin, mikä helpottaa ja tehostaa ohjelmaa koska ei tarvita erillistä ajastinta tai muuta tarkkaa ajastamista. Oikosiirrännässä ohjelma signaloi äänilaitteelle että se voi hakea tietysti paikasta fyysistä muistia kaikki ääninäytteet. Ohjelmiston ei tarvitse kirjoittaa näytteitä äänilaitteen rekistereihin mikä tavallisesti nopeuttaa järjestelmän toimintaa.
Esimerkki suorasta siirrännästä:
1 function suorasiirräntä 2 for näytenumero := 0 to (maksimi - 1) do 3 Kopioi_näyte_rekisteriin(näytemuisti[i]) 4 Odota_seuraavaa_ajankohtaa() /* esim. odota 1 ms */ 5 done 6 Lopeta_ohjelma()
Esimerkki keskeytysohjatusta toteutuksesta:
1 function Pääohjelma 2 näytenumero := 0 3 Alusta_äänikeskeytys() 4 Pakota_ensimmäinen_äänikeskeytys_tapahtuvaksi() 5 Odota valmistumista() 6 Lopeta_ohjelma() 7 8 function Äänikeskeytys 9 Kopioi_uusi_näyte_äänirekisteriin(näytemuisti[näytenumero]) 10 näytenumero := näytenumero + 1 11 if näytenumero = maksiminäytenumero 12 Herätä_pääohjelma_valmistumisen_merkiksi()
Keskeytysohjattu toteutus voi kärsiä muiden keskeytyksien aiheuttamasta häiriöstä tai siitä että keskeytykset ovat poissa päältä liian pitkään. Suora siirräntä on erityisen tehoton verrattuna keskeytysohjattuun siirräntään mikäli seuraavan näytteen odottaminen tehdään silmukoimalla (ilman minkäänlaista keskeytystä).
Vaihtoehtoisesti soitto voidaan tehdä oikosiirrolla jolloin jokaista näytettä ei tarvitse erikseen kopioida äänirekisteriin keskeytyskäsittelijässä. Kun kaikki näytteet ovat soitettu antaa äänipiiri keskeytyksen suorittimelle että soittaminen on valmis ja keskeytyskäsittelijä signaloi pääohjelmalle että soittaminen on valmis.
1 function Pääohjelma 2 Oikosiirto_pois_päältä() 3 Kirjoita_ääninäytteiden_osoitin_äänirekisteriin() 4 Alusta_äänikeskeytys() 5 Komenna_oikosiirtolaitetta_aloittamaan_siirto() 6 Odota_valmistumista() 7 Lopeta_ohjelma() 8 9 function Äänikeskeytys 10 if soitto_on_valmistunut() 11 Herätä_pääohjelma_valmistumisen_merkiksi()
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.