Multiprogrammering är en teknik i operativsystemdesign där flera program körs samtidigt på en dator. Detta till skillnad från enkel programmering, där endast ett program körs åt gången.
Multiprogrammering är möjlig genom användning av en minneshanteringsenhet (MMU) , vilket gör att operativsystemet kan dela upp det tillgängliga minnet mellan flera program. Varje program får sin egen del av minnet, och MMU säkerställer att inget program kan komma åt minnet för ett annat program.
För att multiprogrammering ska fungera effektivt måste operativsystemet också tillhandahålla en mekanism för schemaläggning programmen så att de genomförs på ett rättvist och effektivt sätt. Schemaläggaren använder vanligtvis en round-robin algoritm, som ger varje program en tidsdel av samma längd att exekvera. När ett programs tidssegment är uppe, är det föregripande och nästa program i kön får en chans att köra.
Multiprogrammering har flera fördelar jämfört med enkelprogrammering. För det första förbättrar det den övergripande genomströmningen av systemet, eftersom flera program kan köras samtidigt. För det andra minskar det den tid som en användare måste vänta på att ett program ska börja köras, eftersom operativsystemet kan växla mellan program mycket snabbt. För det tredje gör det det möjligt att köra flera program samtidigt, även om vissa program är mer I/O-intensiva än andra.
Den största nackdelen med multiprogrammering är att det kan öka mängden omkostnader som är förknippade med operativsystemet, eftersom operativsystemet måste hantera minnet och schemaläggningen av flera program. Denna omkostnad är dock vanligtvis liten och fördelarna med multiprogrammering uppväger vida kostnaderna.
Här är ett förenklat exempel på hur multiprogrammering fungerar:
1. Operativsystemet allokerar en del av minnet till vart och ett av de program som ska köras.
2. Operativsystemet placerar det första programmet i kön av färdiga program.
3. CPU:n exekverar det första programmet under en tidsdel av en specificerad varaktighet.
4. När tidsdelen är slut, föregriper operativsystemet det första programmet och placerar det i slutet av kön av färdiga program.
5. Operativsystemet placerar sedan nästa program i kön av färdiga program längst fram i kön och ger det en tidsdel av en angiven varaktighet.
6. Processen upprepas tills alla program har körts.