Het berekenen van de CPU-bursttijd, de hoeveelheid tijd die een proces nodig heeft om de CPU continu te gebruiken voordat het wordt geblokkeerd of beëindigd, is een cruciaal aspect van procesplanning. Het is moeilijk om van tevoren de *exacte* bursttijd te kennen, dus vertrouwen algoritmen vaak op schattingen gebaseerd op gedrag uit het verleden. Hier volgt een overzicht van hoe CPU-bursttijden worden berekend en geschat:
1. Het ideale (en onpraktische) scenario:de toekomst kennen
* In een perfecte wereld zou je de exacte CPU-bursttijd kennen die elk proces nodig heeft *voordat* het wordt uitgevoerd. Dit zou een optimale planning mogelijk maken (bijvoorbeeld de kortste taak eerst).
* Realiteit: De toekomst kennen is onmogelijk! Processen kunnen gegevens- en invoerafhankelijk zijn en worden beïnvloed door externe gebeurtenissen, waardoor hun CPU-behoeften zeer onvoorspelbaar zijn.
2. De praktische aanpak:schatting met behulp van exponentiële middeling
Omdat we de exacte burst-tijd niet kunnen weten, gebruiken besturingssystemen voorspellingsalgoritmen om het in te schatten. De meest gebruikelijke en effectieve techniek is exponentiële middeling (ook wel veroudering genoemd).
* Formule:
`τ_(n+1) =α * t_n + (1 - α) * τ_n`
Waar:
* `τ_(n+1)`:De voorspelde burst-tijd voor de *volgende* CPU-burst.
* `t_n`:De *werkelijke* gemeten burst-tijd van de *meest recente* CPU-burst.
* `τ_n`:De *vorige* voorspelde burst-tijd. Dit is de schatting die we vóór de laatste uitbarsting hebben gemaakt.
* `α`:De afvlakkingsfactor (0 ≤ α ≤ 1). Dit bepaalt het gewicht dat aan de meest recente uitbarsting wordt gegeven ten opzichte van de vorige voorspelling.
* Uitleg:
* De formule berekent een gewogen gemiddelde van de vorige voorspelling (`τ_n`) en de meest recente feitelijke burst-tijd (`t_n`).
* `α` bepaalt hoe snel de voorspelling zich aanpast aan veranderingen in het gedrag van het proces.
* Hoge α (dicht bij 1): Geeft meer gewicht aan de recente uitbarsting. De voorspelling reageert snel op plotselinge veranderingen in CPU-vereisten. Geschikt voor processen met korte, variabele bursts.
* Lage α (dicht bij 0): Geeft meer gewicht aan de geschiedenis uit het verleden. De voorspelling is stabieler en wordt minder beïnvloed door incidentele schommelingen. Geschikt voor processen met relatief consistente CPU-vereisten.
* Wanneer een nieuw proces arriveert, wordt de aanvankelijke burst-tijdschatting (`τ_0`) gewoonlijk ingesteld op een kleine standaardwaarde (bijvoorbeeld 0 of de gemiddelde burst-tijd van andere processen).
* Voorbeeld:
Laten we zeggen:
* `α =0,5`
* `τ_n =10` ms (vorige voorspelling)
* `t_n =20` ms (werkelijke burst-tijd zojuist voltooid)
Dan:
`τ_(n+1) =0,5 * 20 + (1 - 0,5) * 10 =10 + 5 =15` ms
De voorspelde burst-tijd voor de volgende burst is 15 ms.
3. Hoe het in de praktijk werkt (vereenvoudigd)
1. Initialisatie: Wanneer een proces start, stelt u een initiële schatting in (`τ_0`).
2. Uitvoering: Het proces wordt uitgevoerd en we meten de werkelijke CPU-bursttijd (`t_n`).
3. Schatting: Nadat de burst is voltooid, gebruikt u de exponentiële middelingsformule om de nieuwe voorspelde burst-tijd (`τ_(n+1)`) te berekenen.
4. Herhaal: Het proces blijft doorgaan en we herhalen stap 2 en 3 na elke burst. De voorspelling wordt voortdurend bijgewerkt.
4. Overwegingen en uitdagingen
* Alfa kiezen: Het selecteren van de juiste `α`-waarde is van cruciaal belang. Er bestaat niet één ‘beste’ waarde. Het hangt af van de kenmerken van de processen die op het systeem draaien. Sommige besturingssystemen kunnen `α` dynamisch aanpassen op basis van waargenomen procesgedrag.
* Nauwkeurigheid: Exponentiële middeling is een *schatting* en geen perfecte voorspeller. De nauwkeurigheid van de voorspelling hangt af van het gedrag van het proces en de keuze voor `α`.
* Overhead voor contextwisseling: Er moet rekening worden gehouden met de overhead van het meten van burst-tijden en het bijwerken van schattingen, vooral als contextwisselingen frequent voorkomen.
* Andere voorspellingstechnieken: Hoewel exponentiële middeling de meest voorkomende is, bestaan er ook andere technieken, zoals het gebruik van complexere historische gemiddelden of machine learning-modellen. Deze worden echter minder vaak gebruikt vanwege de extra complexiteit en potentiële overhead.
Samenvattend gaat het bij het berekenen van de CPU-bursttijd om het *schatten* van deze tijd op basis van gedrag uit het verleden. Exponentiële middeling is een eenvoudige maar effectieve methode waarmee het besturingssysteem zich kan aanpassen aan de veranderende CPU-vereisten van het proces, waardoor betere planningsbeslissingen mogelijk zijn. |