Multikörning

Multikörning (engelska multitasking) gör det möjligt för ett operativsystem att genom tidsdelning köra flera processer samtidigt.

Traditionella processorer saknar möjlighet till verklig parallellkörning, det vill säga de kan inte utföra flera instruktioner samtidigt, utan måste utföra dem efter varandra. Därmed kan de bara köra en programprocess eller en tråd vid varje ögonblick. Emellertid kan datorn växla mellan flera programprocesser genom tidsdelad multikörning, så att operativsystemet växlar mellan olika processer, ofta tiotals gånger i sekunden eller oftare. Detta ger, så länge datorn inte är överlastad, att en mänsklig användare upplever att trådarna körs samtidigt.

Syftet med multikörning kan dels vara att betjäna flera användare samtidigt (i så kallade fleranvändarsystem), dels att möjliggöra för en användare att starta och växla mellan flera olika program eller instanser av programmet (till exempel flera ordbehandlingsdokument i olika fönster), dels att effektivt utnyttja processorn genom att sätta den i andra arbetsuppgifter i väntan på svar från bland annat hårddisk och användare. Dessutom kan ett och samma program delas upp på flera samtidiga programprocesser, och en programprocess kan i sin tur kan delas på flera samtidiga trådar. Ett exempel kan vara en webbserver som betjänar flera webbläsare samtidigt, ett annat ett ordbehandlingsprogram som väntar med att göra lågprioriterad rättstavningskontroll och sidbrytningsberäkning tills mer högprioriterade uppgifter (att behandla de tecken användaren skriver in) är färdiga. Det är komplicerat att åstadkomma denna funktionalitet utan att utnyttja operativsystemets stöd för multikörning. Det hade krävt att programmet hade delats upp i flera starkt tidsbegränsade arbetsuppgifter som utförs i tur och ordning utan avbrott enligt ett komplicerat kösystem.

Datorer med flera (central)processorer eller processorkärnor, eller hårdvarustöd för flera parallella trådar, kan köra flera processer eller trådar sant parallellt, utan att växla mellan dem, men använder i allmänhet därtill den ovan beskrivna tidsdelade multikörningen.

Tidsdelad och samverkande multikörning 
Det finns två tillvägagångssätt för att uppnå multikörning. Tidsdelad (en: preemptive) och samverkande (en: cooperative) multikörning. I samverkande multikörning lämnar varje process frivilligt över processorn till en annan process med jämna mellanrum, exempelvis när processen ändå skall vänta på något.

Om datorsystemet har tillgång till ett tidsavbrott, det vill säga att en speciell rutin kan anropas periodiskt, kan tidsdelad multikörning användas. En särskild rutin, en schemaläggare, läggs på tidsavbrottet. Schemaläggaren väljer efter olika kriterier ut den process som får en liten stunds processortid och startar denna. Schemaläggaren avbryter sedan processen, för att ge en annan process processortid. Också i tidsdelad multikörning kan en process frivilligt ge upp centralprocessorn, till exempel för att vänta på mer data att behandla.

Fördelen med tidsdelad multikörning är att, även om en process låser sig, avstannar inte hela systemet utan bara den process som låste sig. Vid samverkande multikörning låser en process som inte vill lämna ifrån sig kontrollen hela systemet. Ändå lämpar det sig mycket väl för små inbyggda system där resurserna är begränsade, eller specialiserade tillämpningar där alla processer i hela systemet är kända i förväg. Även i realtidssystem, där det fordras determinitisk schemaläggning med garanterade svarstider, kan samverkande multikörning vara lämpligt.

Exempel

Samverkande multikörning 
Exempel på operativsystem som använder sig av samverkande multikörning;
 Mac OS Classic – Alla versioner fram till Mac OS X.
 NetWare
 Windows – Alla versioner fram till och med Windows 3.11.

Tidsdelad multikörning 
Exempel på operativsystem som använder sig av tidsdelad multikörning;
 AmigaOS
 Linux
 Mac OS
 OS/2
 Unix-system
 Windows – Alla versioner från och med Windows 95.

Datavetenskap