Moniajo
Moniajo on tietokoneen käyttöjärjestelmän ominaisuus, joka mahdollistaa näennäisesti usean ohjelman ajamisen samanaikaisesti. Jos tietokoneessa on vain yksi suoritin, moniajo toteutetaan jakamalla suorittimelle eri prosessien tehtäviä nopeasti vaihdellen. Todellisessa monisuoritintietokoneessa prosessien tehtävät jaetaan usean suorittimen kesken.
Ensimmäiset moniajojärjestelmät tulivat markkinoille 1960-luvulla. Ensimmäiset moniajoa tukevat käyttöjärjestelmät olivat Multics ja OS/360MFT.
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 (). Näin vältetään yhteistyömoniajossa oleva ongelma, että yksi huonosti käyttäytyvä ohjelma voi varastaa koneen koko laskentatehon. Vuoronvaihto () 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 () ajoaikansa mikäli odottaminen jatkuu.
Moniajo usein hyödyntää laitteiston keskeytyksiä vuoronvaihtoon, jolloin käyttöjärjestelmälle annetaan vuoro tarvittaessa tai ajoitetusti.
"Irrottavaa", "ennakoivaa" tai "keskeyttävää" () moniajoa käyttävät useimmat "oikeaa" moniajoa tukevat järjestelmät.
Tämän tyyppistä monia käyttävät Unix-tyyppiset käyttöjärjestelmät, mukaan lukien BSD-versiot ja Linux.
Mikrotietokoneissa tämän tyyppistä moniajoa ovat käyttäneet muun muassa AmigaOS Amiga-tietokoneissa (julkaistu 1985).
Myös TRIPOS on käyttänyt irrottavaa moniajoa. IBM siirtyi OS/2:n Warp-versiossa tukemaan ennakoivaa moniajoa.
"Yhteistyömoniajo" () missä ohjelmat vapaaehtoisesti jakoivat suoritinaikaa toisille ohjelmille oli käytössä mm. RISC OS-käyttöjärjestelmässä ja Windows 95 -käyttöjärjestelmää edeltävät Windows-käyttöjärjestelmät.
OS X -käyttöjärjestelmää edeltävissä Mac OS -järjestelmissä oli myös yhteistyömoniajo. Microsoft siirtyi ennakoivaan moniajoon Windows NT:ssä ja Apple OS X:ssä (BSD-ydin).
OS/2 oli osittain ennakoivaa moniajoa tukeva (Warp-versiot), mutta osin rajattu yhteistyömoniajoon varhaisissa versioissa.
Aikajakava () yhdistää moniohjelmointia ja moniajoa.
Aikajakamista käytettiin tietokonejärjestelmissä kuten PDP-10 ja S/360.
Varhaisissa tietokonejärjestelmissä oli niin kutsuttua moniohjelmointikäsittelyä().
Näissä tietokone suorittaa yhtä ohjelmaa kunnes ohjelma pysähtyy odottamaan esimerkiksi laite-IO:ta ja vaihtaa silloin suoritettavaa ohjelmaa.
Reaaliaikainen käyttöjärjestelmä perustuu takeeseen vasteajan noudattamisesta. Tämän tyyppinen moniajo voi erota teknisesti merkittävästikin, jotta aikarajattu toiminta () ei ylity missään tilanteessa.
Reaaliaikaisia käyttöjärjestelmiä ovat muun muassa QNX ja VxWorks.