Moniajo (engl. multitasking) on tietokoneen käyttöjärjestelmän ominaisuus, joka mahdollistaa usean ohjelman ajamisen samanaikaisesti.
Jos tietokoneessa on vain yksi suoritin, moniajo toteutetaan jakamalla suorittimelle tehtäviä nopeasti vaihdellen (näennäisesti rinnakkain), kun taas monisuoritintietokoneessa tehtävät jaetaan usean suorittimen kesken ja voidaan suorittaa aidosti rinnakkaisesti (moniprosessointi).[1][2][3] Tehtävät voivat olla eri prosesseissa tai eri säikeissä: prosessi on suoritettava ohjelma ja säiettä kutsutaan toisinaan kevyeksi prosessiksi, joka ei vaadi osoitevaruuden vaihtoa.[1][4]
Nykyaikaisempia moniajon toimintamalleja ovat ennakoiva moniajo, irrottava moniajo ja keskeyttävä moniajo (engl. pre-emptive), jossa käyttöjärjestelmän osa tai prosessi nimeltä vuorontaja (”skeduleri”, engl. scheduler) irrottaa ajossa olevan prosessin suorittimesta, valitsee uuden suoritettavan prosessin valmiustilassa olevien joukosta, antaa suorittimen sen hallintaan ja määrittelee sen saaman aikaviipaleen (engl. time slice). Näin vältetään yhteistyömoniajossa oleva ongelma, että yksi huonosti käyttäytyvä ohjelma voi varastaa koneen koko laskentatehon. Vuoronvaihto (engl. Context switch) tarkoittaa suorituksessa olevan ohjelman tilan säilömistä toisen ohjelman suorituksen ajaksi: tämä tarkoittaa suorittimen rekisterien arvojen säilömistä muistipinoon.
Suoritukseen annettava aikaviipale voi perustua useisiin eri tekijöihin kuten prosessin prioriteettiin sekä järjestelmän kokonaiskuormitukseen. Odottavalle säikeelle tai ohjelmalle voidaan antaa enemmän suoritusaikaa jotta se vapautuu tilanteestaan mahdollisimman nopeasti ja koska se voi luovuttaa (engl. yield) ajoaikansa mikäli odottaminen jatkuu.
Moniajo usein hyödyntää laitteiston keskeytyksiä vuoronvaihtoon, jolloin käyttöjärjestelmälle annetaan vuoro tarvittaessa tai ajoitetusti.
Vähemmän eksaktissa kielenkäytössä käytetään moniajo-termiä myös kuvaamaan sellaista käyttöliittymää, jossa käyttäjä voi vaihtaa "lennossa" usean sovelluksen välillä. Erityisesti termiä käytetään silloin, kun tällaista mahdollisuutta ei ole, ja todetaan virheellisesti, että moniajo puuttuu.
<ref>
-elementti; viitettä oscpumulti
ei löytynyt