Multiprogrammering er en teknikk innen operativsystemdesign der flere programmer kjøres samtidig på en datamaskin. Dette i motsetning til enkeltprogrammering, der kun ett program kjøres om gangen.
Multiprogrammering er muliggjort ved bruk av en minnestyringsenhet (MMU) , som lar operativsystemet dele opp det tilgjengelige minnet mellom flere programmer. Hvert program får sin egen del av minnet, og MMU sikrer at ingen programmer får tilgang til minnet til et annet program.
For at multiprogrammering skal fungere effektivt, må operativsystemet også ha en mekanisme for planlegging programmene slik at de utføres på en rettferdig og effektiv måte. Planleggeren bruker vanligvis en round-robin algoritme, som gir hvert program en tidsdel av lik lengde å utføre. Når et programs tidsstykke er oppe, blir det forhåndsaktivert og neste program i køen får en sjanse til å kjøre.
Multiprogrammering har flere fordeler fremfor enkeltprogrammering. For det første forbedrer det den generelle gjennomstrømningen til systemet, siden flere programmer kan kjøres samtidig. For det andre reduserer det tiden en bruker må vente på at et program skal begynne å kjøre, siden operativsystemet kan bytte mellom programmer veldig raskt. For det tredje gjør det det mulig å kjøre flere programmer samtidig, selv om noen programmer er mer I/O-intensive enn andre.
Den største ulempen med multiprogrammering er at det kan øke mengden overhead knyttet til operativsystemet, siden operativsystemet må administrere minnet og planleggingen av flere programmer. Imidlertid er denne overhead vanligvis liten, og fordelene med multiprogrammering oppveier langt kostnadene.
Her er et forenklet eksempel på hvordan multiprogrammering fungerer:
1. Operativsystemet tildeler en del av minnet til hvert av programmene som skal kjøres.
2. Operativsystemet plasserer det første programmet i køen av klare programmer.
3. CPU-en kjører det første programmet for en tidsdel av en spesifisert varighet.
4. Når tidsstykket er ute, foregriper operativsystemet det første programmet og plasserer det på slutten av køen av klare programmer.
5. Operativsystemet plasserer deretter neste program i køen av klare programmer foran i køen og gir det en tidsdel av en spesifisert varighet.
6. Prosessen gjentas til alle programmene er utført.