12/06/2005
I computerverdenens tidlige dage var systemerne begrænsede til at køre ét enkelt program ad gangen. Dette var en ineffektiv udnyttelse af computerens ressourcer, især den centrale processorenhed (CPU). Når programmet skulle vente på en langsom operation, såsom at læse data fra en harddisk eller vente på input fra en bruger, stod CPU'en stille og ubenyttet. Multiprogrammering opstod som en revolutionerende løsning på dette problem. Ideen er simpel, men genial: Hold altid flere programmer i computerens hukommelse på samme tid, så når ét program venter, kan CPU'en øjeblikkeligt skifte til at arbejde på et andet. Dette skaber en illusion af, at flere programmer kører samtidigt og maksimerer brugen af computerens dyrebare processorkraft.

Hvad er et Multiprogrammerings-Operativsystem?
Et multiprogrammerings-operativsystem er designet til at administrere og eksekvere flere uafhængige programmer på en computer med en enkelt CPU. Navnet 'multiprogrammering' antyder netop dette: 'mange programmer'. Hovedformålet er at øge den samlede CPU-udnyttelse. I et system uden multiprogrammering, hvis et program starter en I/O (Input/Output) operation, vil CPU'en være inaktiv, indtil operationen er fuldført. I et multiprogrammeringssystem udnytter operativsystemet denne ventetid. Det parkerer midlertidigt det ventende program og lader et andet, køreklar program overtage CPU'en. Denne konstante vekslen mellem programmer sikrer, at CPU'en næsten altid har noget at arbejde på, hvilket dramatisk forbedrer systemets samlede produktivitet og throughput (antallet af opgaver fuldført over tid).
Hvordan Fungerer Multiprogrammering i Praksis?
Processen bag multiprogrammering er en elegant dans dirigeret af operativsystemet. Det håndterer alle programmerne (også kendt som processer eller jobs) og deres forskellige tilstande (kører, venter, klar). Her er en trin-for-trin gennemgang af, hvordan det typisk foregår:
- Indlæsning af Jobs: Flere programmer indlæses fra lagerenheder (som en harddisk) og placeres i computerens primære hukommelse (RAM). Operativsystemet vedligeholder en liste, ofte kaldet en 'jobkø', over alle de programmer, der er klar til at blive eksekveret.
- Valg af Proces: Operativsystemets 'scheduler' (planlægningsalgoritme) vælger en proces fra køen og tildeler CPU'en til den.
- Eksekvering: Processen begynder at køre sine instruktioner på CPU'en.
- Behov for I/O: På et tidspunkt under eksekveringen har processen muligvis brug for at udføre en I/O-operation (f.eks. læse en fil). Dette er en meget langsommere operation end CPU-behandling.
- Kontekstskift: I stedet for at lade CPU'en vente, griber operativsystemet ind. Det gemmer den nuværende tilstand af processen (alle dens data og hvor langt den var nået) og flytter den til en 'ventende' tilstand. Denne handling kaldes et kontekstskift.
- Tildeling af ny Proces: Scheduleren vælger nu en anden proces fra 'klar'-køen og tildeler CPU'en til den. Denne nye proces begynder at køre.
- Afslutning af I/O: Når den første proces' I/O-operation er fuldført, signalerer I/O-enheden til operativsystemet, at den er færdig. Operativsystemet flytter derefter den første proces fra 'ventende' tilstand tilbage til 'klar'-køen.
- Gentagelse: Denne cyklus gentages konstant. CPU'en skifter lynhurtigt mellem de forskellige klar-processer, hver gang en proces skal vente på noget. For brugeren skaber denne hurtige vekslen en oplevelse af, at mange programmer kører parallelt, selvom der kun er én CPU, der arbejder på én ting ad gangen.
Fordele og Ulemper ved Multiprogrammering
Som enhver teknologi har multiprogrammering både stærke fordele og visse udfordringer, der skal håndteres.

Fordele:
- Høj CPU-udnyttelse: Den primære fordel. CPU'en holdes beskæftiget, hvilket reducerer spildtid og øger systemets effektivitet.
- Øget Throughput: Da flere jobs behandles over samme tidsperiode, bliver systemet som helhed mere produktivt.
- Reduceret Responstid: For brugeren føles systemet mere responsivt, da korte opgaver ikke behøver at vente på, at lange opgaver bliver helt færdige.
- Understøttelse af Flere Brugere: Multiprogrammering er grundlaget for multiuser-systemer, hvor flere brugere kan interagere med computeren samtidigt.
- Smart Ressourceudnyttelse: Udover CPU'en kan andre systemressourcer også deles mere effektivt mellem de aktive programmer.
Ulemper:
- Kompleksitet: At administrere flere processer, deres hukommelse og tilstande er en kompleks opgave for operativsystemet. Det kræver sofistikerede algoritmer.
- Kræver Hukommelsesstyring: Da alle aktive programmer skal befinde sig i RAM, er avanceret hukommelsesstyring nødvendig for at adskille programmerne og forhindre dem i at forstyrre hinanden.
- CPU Scheduling er Nødvendigt: Operativsystemet skal have en intelligent scheduler til at beslutte, hvilken proces der skal køre næste gang. Et dårligt valg kan føre til dårlig ydeevne.
- Risiko for Ventetid: Hvis der er mange jobs i køen, kan jobs med lang behandlingstid komme til at vente i lang tid, før de får CPU-tid.
- Thrashing: En alvorlig ulempe. Hvis systemet forsøger at køre for mange programmer på én gang med for lidt hukommelse, kan det ende med at bruge mere tid på at flytte data mellem RAM og harddisk (paging) end på at udføre reelt arbejde. Denne tilstand kaldes Thrashing og kan lamme systemets ydeevne.
Sammenligning: Multiprogrammering vs. Multitasking
Selvom de to begreber ofte bruges i flæng, er der en subtil, men vigtig forskel. Multitasking er en logisk udvidelse af multiprogrammering. Hvor multiprogrammering primært fokuserer på at holde CPU'en beskæftiget, fokuserer multitasking på at give brugeren en interaktiv og responsiv oplevelse ved at skifte mellem opgaver så hurtigt, at det virker simultant.
| Funktion | Multiprogrammering | Multitasking |
|---|---|---|
| Primært Mål | Maksimere CPU-udnyttelse ved at reducere inaktiv tid. | Forbedre brugerens responsivitet og tillade interaktiv computing. |
| Brugerinteraktion | Involverer ikke nødvendigvis direkte brugerinteraktion (f.eks. batch-systemer). | Designet specifikt til brugerinteraktion, så flere applikationer kan køres samtidigt. |
| Kompleksitet | Mindre komplekst. Fokuserer på at skifte, når en proces venter på I/O. | Mere komplekst. Kræver tidsdelings-algoritmer (time-sharing) for at sikre, at alle opgaver får en fair andel af CPU-tiden. |
| Anvendelse | Ideelt til miljøer, hvor ressourceudnyttelse er kritisk, f.eks. i store batch-behandlingssystemer. | Standard i alle moderne desktop- og mobil-operativsystemer, hvor interaktivitet er nøglen. |
Moderne Eksempler
Praktisk talt alle moderne operativsystemer er bygget på principperne om multiprogrammering. De har videreudviklet konceptet til at inkludere multitasking, multithreading og understøttelse af flere processorkerner (multiprocessing). Nogle historiske og nutidige eksempler inkluderer:
- IBM OS/360: Et af de tidligste og mest indflydelsesrige operativsystemer, der populariserede multiprogrammering.
- UNIX: Et fundamentalt multiuser og multitasking operativsystem, som har dannet grundlag for mange andre.
- Linux: En moderne efterkommer af UNIX, som er kernen i utallige servere, desktops og mobile enheder (Android).
- Windows NT: Grundlaget for alle moderne versioner af Microsoft Windows, designet fra bunden til at være et multiprogrammerings- og multitaskingsystem.
- macOS: Apples operativsystem, som også er baseret på UNIX-principper og fuldt ud udnytter multiprogrammering.
Ofte Stillede Spørgsmål (FAQ)
Hvad er forskellen på et job og en proces?
I konteksten af operativsystemer bruges termerne 'job', 'opgave' (task) og 'proces' ofte synonymt til at beskrive et program, der er under eksekvering. Et 'job' kan dog nogle gange referere til en hel enhed af arbejde, der skal udføres (f.eks. i et batch-system), mens en 'proces' er den aktive, kørende instans af et program i hukommelsen, som operativsystemet administrerer.

Er mit moderne Windows- eller macOS-system et multiprogrammeringssystem?
Ja, absolut. Moderne operativsystemer som Windows, macOS og Linux er meget avancerede multiprogrammeringssystemer. De er også multitasking-systemer, da de bruger tidsdeling til at give en flydende interaktiv oplevelse, og de er multiuser-systemer, der kan håndtere flere brugerkonti samtidigt. De er fundamentalt bygget på evnen til at håndtere mange processer på én gang.
Hvad er en scheduling-algoritme?
Det er den del af operativsystemet, der beslutter, hvilken proces i 'klar'-køen der skal have adgang til CPU'en næste gang. Der findes mange forskellige algoritmer, f.eks. 'First-Come, First-Served' (den første i køen køres først), 'Shortest Job Next' (den korteste opgave køres først for at forbedre throughput) og mere komplekse algoritmer, der sikrer fairness og responsivitet.
Hvis du vil læse andre artikler, der ligner Hvad er et Multiprogrammering OS?, kan du besøge kategorien Teknologi.
