CPU-planning

Leer hoe een besturingssysteem beslist welk programma als volgende op de CPU draait. Meet planningen met doorloop- en responstijd en vergelijk vervolgens FIFO, kortste taak eerst, round-robinplanning en prioriteitsplanning aan de hand van uitgewerkte voorbeelden. Zie hoe een feedbackwachtrij met meerdere niveaus leert welke taken interactief zijn, hoe loterijplanning, strideplanning en de eerlijke schedulers van Linux elke taak een vast aandeel van de CPU geven en hoe schedulers werk over meerdere CPU's verdelen. Analyseer tot slot de schedulers van Linux en Windows en kies beleid voor een gegeven werklast.

GemiddeldLes 2 van 9 in Cursus Besturingssystemen: processen, geheugen, threads en bestandssystemen

Wat je leert

  1. Leg uit op welke momenten in de levenscyclus van een proces planningsbeslissingen worden genomen, onderscheid planning met en zonder preëmptie en bereken de maatstaven waarmee je planningsbeleid vergelijkt.
    • Leg uit wanneer en hoe de scheduler de volgende taak kiest
      Plaats de CPU-scheduler in de levenscyclus van een proces, onderscheid planning met en zonder preëmptie en noem de soorten schedulers die een besturingssysteem kan hebben.
    • Bereken de doorlooptijd, responstijd en wachttijd
      Teken een tijdlijn van een planning en bereken doorlooptijd, responstijd, wachttijd, doorvoer en CPU-bezettingsgraad. Leg uit welk doel elke maatstaf dient.
  2. Plan een reeks taken volgens de klassieke beleidsvormen, bereken hoe elk beleid presteert en leg uit waarom elk beleid geschikt is voor sommige werklasten en tekortschiet bij andere.
    • Plan taken met FIFO en kortste taak eerst
      Pas FIFO en kortste taak eerst zonder preëmptie toe, leg het konvooi-effect uit en schat uitvoeringstijden die niet vooraf bekend zijn.
    • Onderbreek taken voor kortere taken en laat I/O overlappen met CPU-uitvoering
      Pas kortste resterende uitvoeringstijd eerst toe, leg uit wanneer preëmptie de doorlooptijd verbetert en houd de CPU bezig door andere taken uit te voeren terwijl een taak op I/O wacht.
    • Gebruik round-robinplanning voor een snelle respons
      Pas round-robinplanning toe, leg het effect op respons- en doorlooptijd uit en kies een verstandige tijdschijf.
    • Gebruik prioriteiten zonder taken uit te hongeren
      Pas prioriteitsplanning toe, lees de verschillende prioriteitsschalen die in de praktijk worden gebruikt en voorkom uithongering en prioriteitsinversie.
  3. Leg uit hoe een feedbackwachtrij met meerdere niveaus leert van het gedrag van een taak om kortste taak eerst te benaderen en tegelijk interactieve taken snel te laten reageren, en hoe de regels worden afgestemd om uithongering en manipulatie tegen te gaan.
    • Volg taken door een feedbackwachtrij met meerdere niveaus
      Geef de basisregels van de feedbackwachtrij met meerdere niveaus en volg hoe CPU-gebonden, korte en interactieve taken tussen de wachtrijen bewegen.
    • Stel MLFQ af om uithongering en manipulatie te voorkomen
      Leg de problemen van de basisregels van MLFQ uit, verhelp ze met prioriteitsverhogingen en betere gebruiksregistratie en kies de parameters.
  4. Leg planning op basis van evenredige aandelen uit, bereken de aandelen die loterijplanning, strideplanning en de eerlijke schedulers van Linux geven en vergelijk hun sterke punten.
    • Verdeel de CPU door loting
      Geef aandelen weer met tickets, voer een loting uit, voorspel hoe dicht loterijplanning bij de beoogde aandelen komt en gebruik lokale ticketsystemen, ticketoverdracht en ticketinflatie.
    • Realiseer exacte aandelen met strideplanning
      Bereken stapgroottes en voortgangswaarden, volg een strideplanning en vergelijk strideplanning met loterijplanning.
    • Leg de eerlijke schedulers van Linux uit: CFS en EEVDF
      Bereken tijdschijven en virtuele uitvoeringstijd bij de Completely Fair Scheduler, koppel nice-waarden aan gewichten en beschrijf hoe EEVDF de volgende taak kiest.
  5. Leg uit hoe caches, coherentie en affiniteit de planning op een multiprocessor veranderen en vergelijk ontwerpen met één en met meerdere wachtrijen die de belasting over CPU's verdelen.
    • Leg uit wat er verandert bij meerdere CPU's
      Beschrijf multiprocessorhardware zoals de scheduler die ziet: privé-caches, cachecoherentie, de noodzaak van vergrendeling, cacheaffiniteit en verschillende soorten processorkernen.
    • Vergelijk multiprocessorplanning met één wachtrij en met meerdere wachtrijen
      Vergelijk multiprocessorschedulers met één en met meerdere wachtrijen, herken ongelijke belasting en verhelp die met migratie en werk stelen.
  6. Onderzoek hoe Linux, Windows en andere systemen prioriteiten, terugkoppeling en evenredige verdeling combineren, stuur ze aan met standaardhulpmiddelen en kies en beoordeel beleid voor een gegeven werklast.
    • Stuur de Linux-scheduler aan
      Beschrijf het planningsbeleid van Linux en de geschiedenis ervan en gebruik nice-waarden, realtimebeleid, CPU-affiniteit en controlegroepen.
    • Analyseer de schedulers van Windows en andere systemen vanuit het MLFQ-model
      Bereken Windows-basisprioriteiten, leg dynamische prioriteitsverhogingen en hun afname uit en herken dezelfde ideeën van terugkoppeling in andere systemen.
    • Kies en beoordeel een planningsbeleid voor een werklast
      Koppel planningsbeleid aan werklasten, vergelijk beleidsvormen aan de hand van één voorbeeld en kies een methode om een scheduler te beoordelen.

CPU-planning: uitleg

6 hoofdstukken

1

Beslis wie draait en meet het resultaat

Een CPU kan één thread tegelijk uitvoeren, maar een druk systeem kan veel threads hebben die gereed zijn om die te gebruiken. De scheduler beslist bij elke gelegenheid welk werk vooruitgaat. Om die keuze te beoordelen, volg je zowel de procestoestanden als de klok: een snelle eerste beurt, een vroege voltooiing en een hoog tempo van voltooid werk beschrijven verschillende successen. Een tijdlijn maakt die verschillen zichtbaar en geeft je de gegevens om beleidsvormen te vergelijken.

1.1 Van een gereedstaande naar een draaiende taak

Een CPU-scheduler kiest het gereedstaande proces of de gereedstaande thread die als volgende op een CPU draait. De regel die de scheduler volgt, is het beleid. De dispatcher voert de keuze uit door de uitvoering naar de geselecteerde taak te wisselen. Ander beleid kan hetzelfde wisselmechanisme gebruiken.

Volg de toestandsveranderingen

Een draaiende taak heeft een CPU. Een gereedstaande taak kan draaien maar wacht op een beurt. Een geblokkeerde taak wacht op een gebeurtenis, zoals de voltooiing van een schijfleesbewerking. Alleen gereedstaande taken komen voor selectie in aanmerking.

Stel dat een editor een schijfleesbewerking start terwijl een compiler gereedstaat. De editor gaat van de toestand in uitvoering naar de geblokkeerde toestand, zodat de compiler kan draaien. Wanneer de leesbewerking eindigt, maakt een interrupt de editor weer gereed. De editor draait niet noodzakelijk onmiddellijk: het beleid moet kiezen tussen de editor en ander gereedstaand werk.

Planningsbeslissingen vinden plaats wanneer een taak blokkeert, eindigt, gereed wordt of wordt onderbroken en terugkeert naar de gereedtoestand. Ook vrijwillig de CPU-beurt afstaan geeft de CPU vrij. Preëmptie betekent dat de CPU wordt afgenomen van een taak die had kunnen blijven draaien; de taak behoudt haar opgeslagen toestand en kan later verdergaan.

Soort beleidWanneer een draaiende taak de CPU opgeeftEffect van een nieuwe gereedstaande taak
Zonder preëmptieDe taak blokkeert, staat de beurt af of eindigtDe nieuwe taak wacht op een beslismoment
Met preëmptieDe taak kan de CPU ook verliezen terwijl ze nog kan draaienDe nieuwe taak kan de huidige taak verdringen

Met een timerinterrupt kan de kernel een tijdschijf afdwingen, zelfs als een programma blijft herhalen zonder de beurt af te staan. Voltooide I/O kan ook preëmptie veroorzaken doordat een taak met meer voorrang gereed wordt. Linux, Windows en macOS gebruiken planning met preëmptie.

Werk komt in bursts

Programma's wisselen CPU-bursts, waarin ze rekenen, af met perioden waarin ze op I/O wachten. Een CPU-gebonden programma zoals een encoder heeft lange CPU-bursts. Een I/O-gebonden programma zoals een editor rekent vaak kort en wacht dan. Door een editor na een toetsaanslag snel te bedienen, kan die sneller reageren zonder veel totale CPU-tijd te krijgen.

De dispatcher slaat de toestand van de oude taak op, herstelt de registers van de gekozen taak en hervat de instructiestroom ervan in de gebruikersmodus. Dispatchlatentie is de tijd die nodig is om de uitvoering over te dragen. Wisselen verstoort ook caches en de adresvertaalbuffer, of TLB, die adresvertalingen in de cache bewaart. De volgende taak moet die mogelijk opnieuw vullen, dus de tijd voor het opslaan van registers is slechts een deel van de kosten.

Drie tijdschalen voor planning

De langetermijnscheduler laat ingediende taken toe en bepaalt hoeveel er in het systeem zijn. De middellangetermijnscheduler kan volledige processen opschorten door ze uit het geheugen te wisselen en later terug te plaatsen. De kortetermijnscheduler kiest de volgende gereedstaande taak en handelt vaak. Systemen voor algemeen gebruik vertrouwen vooral op deze laatste rol; batchsystemen en clusters kunnen ook de toelating expliciet regelen.

Begin een beleidsvergelijking met eenvoudige taken die alleen de CPU gebruiken en waarvan de lengtes bekend zijn. Varieer dan één kenmerk: ongelijke lengtes laten de vertragingen van FIFO zien, latere aankomsten laten de grenzen van planning zonder preëmptie zien, I/O biedt mogelijkheden om werk te laten overlappen en onbekende lengtes vereisen voorspelling of terugkoppeling.

Belangrijkste punten

  • Alleen gereedstaande taken kunnen worden geselecteerd om te draaien.
  • Het planningsbeleid kiest; de dispatcher voert de wisseling uit.
  • Bij preëmptie blijft een taak behouden zodat die kan worden hervat.
  • Timer- en apparaatinterrupts kunnen planningsmomenten creëren.
  • Vaak wisselen kost zowel dispatchtijd als cachelokaliteit.
  • Toelating, uitwisseling en CPU-selectie werken op verschillende tijdschalen.

1.2 Lees tijden af uit een planning

Een planning laat zien wanneer taken draaien. Een maatstaf vertelt je welk deel van die planning van belang is. Noteer voor elke taak de aankomst, eerste uitvoering en voltooiing voordat je gemiddelden berekent.

Onderscheid de drie tijden

Doorlooptijd meet het hele interval van aankomst tot voltooiing. Responstijd meet de vertraging tot de eerste uitvoering. Wachttijd telt elk interval op waarin de taak gereed is maar niet draait.

Tdoorlooptijd=Tvoltooiing−Taankomst Trespons=Teerste uitvoering−Taankomst

Voor een taak die alleen de CPU gebruikt, is de doorlooptijd gelijk aan de wachttijd plus de CPU-uitvoeringstijd. Bij I/O maakt de geblokkeerde tijd ook deel uit van de doorlooptijd, dus als je alleen de CPU-tijd aftrekt, tel je te veel wachttijd. Hier wordt responstijd gedefinieerd met de eerste uitvoering; een dienst voor gebruikers kan daarnaast de tijd tot de eerste uitvoer meten.

Werk een FIFO-tijdlijn uit

A komt aan op 0 ms en heeft 8 ms CPU-tijd nodig. B komt aan op 1 ms en heeft 4 ms nodig. C komt aan op 2 ms en heeft 2 ms nodig. Zonder wisselkosten geeft FIFO:

  • A: 0–8 ms.
  • B: 8–12 ms.
  • C: 12–14 ms.
TaakDoorlooptijdResponstijdWachttijd
A8−0=8 ms0−0=0 ms0 ms
B12−1=11 ms8−1=7 ms7 ms
C14−2=12 ms12−2=10 ms10 ms

De gemiddelde doorlooptijd is 8+11+123=313≈10,33 ms. De gemiddelde respons- en wachttijd zijn beide 0+7+103=173≈5,67 ms. Ze zijn gelijk omdat elke taak eenmaal zonder onderbreking draait. Bij preëmptie kan een taak na haar eerste beurt opnieuw wachten, zodat de wachttijd groter kan zijn dan de responstijd.

Meet de hele werklast

Doorvoer telt voltooide taken per eenheid verstreken tijd. De planning voltooit drie taken in 14 ms, ongeveer 214,29 taken/s. De CPU-bezettingsgraad is de tijd dat de CPU bezig is gedeeld door de verstreken tijd; die is hier 100% omdat de CPU nooit niets doet. Vermeld het meetinterval: als je na voltooiing een periode toevoegt waarin de CPU niets doet, veranderen beide cijfers.

Een hoge bezettingsgraad kan nog steeds samengaan met lange wachttijden. Die hoeft ook niet te betekenen dat alle tijd waarin de CPU bezig is nuttig toepassingswerk is: werkelijke metingen kunnen wisselingen en ander kernelwerk meetellen als bezette tijd. Vermeld of een overheadberekening bezette tijd of nuttig werk meet.

Kies wat je optimaliseert

Bij batchwerk is de gemiddelde doorlooptijd vaak van belang. Bij interactief werk telt een snelle respons. Gedeelde diensten hebben zowel eerlijke toegang als doorvoer nodig. Uithongering betekent dat een taak die in aanmerking komt onbeperkt wacht, dus een goed gemiddelde alleen toont geen eerlijke behandeling aan.

Bekijk afzonderlijke vertragingen en de staart van de verdeling. Een responstijd op het 99e percentiel beschrijft de vertraging waar ongeveer 99% van de waarnemingen op of onder valt; enkele ernstige vertragingen kunnen in een laag gemiddelde verdwijnen. Trek altijd het eigen aankomsttijdstip van de taak af en tel haar uitvoeringsintervallen als bediening, nooit als wachttijd.

Belangrijkste punten

  • De doorlooptijd eindigt bij voltooiing; de responstijd bij de eerste uitvoering.
  • De wachttijd telt perioden in de gereedtoestand en sluit geblokkeerde perioden uit.
  • Trek de aankomsttijd van elke taak af voordat je het gemiddelde berekent.
  • Doorvoer en bezettingsgraad hangen af van het waarnemingsinterval.
  • Bekijk naast gemiddelden ook vertragingen in de staart en uithongering.
2

Volg de klassieke planningsbeleidsvormen

Dezelfde gereedstaande taken kunnen onder verschillende beleidsvormen in heel andere volgorden eindigen. FIFO volgt de aankomstvolgorde, beleid dat de kortste taak kiest bevoordeelt kleine CPU-behoeften, round-robinplanning wisselt beurten af en prioriteitsplanning volgt een rangorde. Bouw de tijdlijn op vanuit de regel op elk beslismoment en bereken daarna de uitkomst. Latere aankomsten, geblokkeerde taken en wisselkosten laten afwegingen zien die één volgorde van taken niet kan tonen. Bij het met de hand volgen worden wisselkosten genegeerd, tenzij anders vermeld.

2.1 FIFO en de kortste gereedstaande burst

FIFO, ook FCFS genoemd, voert gereedstaande taken in aankomstvolgorde uit. Het werkt zonder preëmptie: een latere aankomst kan een draaiende CPU-burst niet onderbreken. In voorbeelden met alleen CPU-gebruik draait elke gekozen taak tot voltooiing.

Bekijk het konvooi-effect

A, B en C komen tegelijk aan. A heeft 60 ms nodig; B en C hebben elk 6 ms nodig. Met A vooraan voert FIFO A 0–60, B 60–66 en C 66–72 uit. De doorlooptijden zijn 60, 66 en 72 ms, gemiddeld 66 ms. De kleine taken wachten het grootste deel van hun bestaan achter A. Dit is het konvooi-effect.

Kortste taak eerst (SJF) kiest de kortste volgende CPU-burst uit de gereedstaande taken en onderbreekt die niet. Met dezelfde aankomsten voert het B 0–6, C 6–12 en daarna A 12–72 uit. De gemiddelde doorlooptijd wordt 6+12+723=30 ms. Het totale CPU-werk blijft 72 ms; de verbetering komt doordat korte taken eerder eindigen.

Waarom helpt dit? Als een lange burst direct vóór een korte burst draait, wachten beide taken op al het eerdere werk. Als je alleen deze twee omwisselt, verkort je de vertraging van de korte taak met de lengte van de lange burst, terwijl je de vertraging van de lange taak alleen met de lengte van de korte burst verlengt. Door zulke wisselingen te herhalen, komen de bursts in oplopende volgorde. Als alle taken tegelijk aankomen en hun lengtes bekend zijn, minimaliseert SJF de gemiddelde doorloop- en wachttijd; in dit geval zonder preëmptie en met alleen CPU-gebruik is de responstijd tot de eerste uitvoering ook gelijk aan de wachttijd.

Beperk de keuze tot gereedstaande taken

Nu komt A aan op 0 ms, terwijl B en C op 10 ms aankomen. Op 0 ms is A de enige keuze. SJF zonder preëmptie voert A 0–60, B 60–66 en C 66–72 uit. De doorlooptijden zijn 60, 56 en 62 ms, gemiddeld ongeveer 59,33 ms. SJF kan niet handelen op basis van een toekomstige taak of een al gestarte burst onderbreken.

BeleidGebruikte informatieBelangrijkste zwakte
FIFOAankomstvolgordeKort werk kan achter lang werk wachten
SJFVoorspelde lengte van de volgende burstLang werk kan worden uitgesteld door steeds opnieuw aankomend kort werk

FIFO voorkomt uithongering wanneer taken die ervoor staan de CPU uiteindelijk vrijgeven. Bij SJF kan een lange wachtende taak uithongeren als er kort werk blijft aankomen.

Voorspel een burst

De volgende CPU-burst is meestal onbekend. Een exponentieel gemiddelde combineert de laatst gemeten burst met de vorige voorspelling:

τn+1=αtn+(1−α)τn

Hier is tn de gemeten burst, τn de vorige voorspelling en α een gewicht tussen 0 en 1. Als je begint met 10 ms en α=0,5 gebruikt, geeft een gemeten 6 ms een voorspelling van 8 ms. Een daaropvolgende 4 ms geeft 6 ms; nog eens 6 ms laat de voorspelling op 6 ms. Bij gewicht nul hebben metingen geen effect; bij gewicht één telt alleen de nieuwste meting. De voorspelde grootheid is de CPU-burstlengte, niet de grootte van het programmabestand of het aantal regels code.

Belangrijkste punten

  • FIFO gebruikt de aankomstvolgorde en kan een konvooi veroorzaken.
  • SJF kiest de kortste burst die al gereedstaat.
  • Het optimum van SJF voor de gemiddelde tijd vereist de relevante aannames over de werklast.
  • Latere aankomsten kunnen SJF zonder preëmptie niet onderbreken.
  • Exponentiële middeling weegt recente metingen af tegen eerdere voorspellingen.
  • Een stroom korte taken kan bij SJF een lange taak laten uithongeren.

2.2 Onderbreek een lange taak en laat I/O overlappen

Kortste resterende uitvoeringstijd eerst (STCF), ook SRTF genoemd, is SJF met preëmptie. Vergelijk bij een aankomst of voltooiing hoeveel CPU-tijd elke gereedstaande taak nog nodig heeft. Een nieuwkomer onderbreekt de huidige taak wanneer die minder tijd nodig heeft dan de huidige taak nog nodig heeft.

Vergelijk de resterende tijd

A heeft 60 ms nodig en komt aan op 0 ms. B en C hebben elk 6 ms nodig en komen aan op 10 ms. A draait 10 ms en heeft nog 50 ms nodig. Op 10 ms wint B omdat 6 ms minder is dan 50 ms; C heeft dezelfde lengte, dus beslissen eerst de aankomstvolgorde en daarna de naam.

De tijdlijn is A 0–10, B 10–16, C 16–22, A 22–72. De doorlooptijden zijn A 72 ms, B 6 ms en C 12 ms, gemiddeld 30 ms. De responstijden zijn 0, 0 en 6 ms, gemiddeld 2 ms. SJF zonder preëmptie geeft bij deze aankomsten een gemiddelde doorlooptijd van ongeveer 59,33 ms en een gemiddelde responstijd van 35,33 ms.

Trek altijd de al ontvangen uitvoeringstijd af. Een nieuwe burst van 12 ms vergelijken met de oorspronkelijke 60 ms van A zou onjuist zijn als A nog maar 5 ms nodig had. STCF zou A eerst voltooien. Bij bekende lengtes voor taken met alleen CPU-gebruik en zonder wisselkosten minimaliseert STCF de gemiddelde doorlooptijd bij willekeurige aankomsten. Lange taken kunnen nog steeds uithongeren bij een aanhoudende stroom korter werk.

Wanneer alle taken met alleen CPU-gebruik tegelijk aankomen, geven SJF en STCF dezelfde volgorde. De draaiende kortste taak wordt alleen maar korter, dus vormt geen wachtende taak een reden om die te onderbreken.

Gebruik de geblokkeerde tijd van een andere taak

Een geblokkeerde taak kan de CPU niet gebruiken. Haar I/O-wachttijd biedt de gelegenheid om ander gereedstaand werk uit te voeren, zelfs bij beleid zonder preëmptie. Preëmptie wordt weer van belang wanneer voltooide I/O een korte burst gereedmaakt terwijl een andere taak draait.

Neem A met vijf CPU-bursts van 10 ms en een schijfleesbewerking van 10 ms na elk van de eerste vier bursts. B heeft één CPU-burst van 50 ms nodig. Beide komen aan op 0 ms. Als de CPU niets doet tijdens de leesbewerkingen van A en B uitstelt totdat A eindigt, voltooit A op 90 ms en B op 140 ms.

Behandel elke terugkerende burst van A als kort gereedstaand werk:

  • A draait van 0–10; de leesbewerking duurt van 10–20 terwijl B draait.
  • A keert terug voor 20–30; B heeft nog 40 ms nodig, dus de 10 ms van A wint.
  • B draait van 30–40 tijdens de volgende leesbewerking. De afwisseling herhaalt zich.
  • De laatste burst van A draait van 80–90; B voltooit zijn laatste 10 ms van 90–100.

A eindigt nog steeds op 90 ms, maar B eindigt op 100 ms. De CPU voert 100 ms werk uit in 100 ms verstreken tijd. Schijfactiviteit en CPU-activiteit overlappen; de CPU voert A niet uit terwijl A geblokkeerd is. Een apparaatinterrupt maakt A gereed wanneer elke leesbewerking eindigt, waarna STCF de nieuwe burst vergelijkt met het resterende werk van B.

Belangrijkste punten

  • STCF vergelijkt de resterende CPU-behoefte op beslismomenten.
  • Door preëmptie kunnen later aangekomen korte taken veel eerder eindigen.
  • Bij gelijktijdige aankomst van taken met alleen CPU-gebruik komen SJF en STCF overeen.
  • Een geblokkeerde taak geeft de CPU vrij, zodat ander werk kan overlappen met haar I/O.

2.3 Wissel beurten af met round-robinplanning

Round-robinplanning (RR) houdt een FIFO-gereedwachtrij bij en geeft de voorste taak maximaal één tijdkwantum, of tijdschijf. Een taak die eindigt of blokkeert, verlaat de CPU eerder. Een taak die nog gereed is wanneer haar tijdschijf afloopt, gaat naar achteren.

Volg de beurten voordat je tijden berekent

A, B en C komen aan op 0 ms en hebben elk 9 ms nodig. Met een tijdkwantum van 3 ms voert RR uit:

  • Eerste ronde: A 0–3, B 3–6, C 6–9.
  • Tweede ronde: A 9–12, B 12–15, C 15–18.
  • Laatste ronde: A 18–21, B 21–24, C 24–27.

De eerste uitvoeringen zijn op 0, 3 en 6 ms, dus de gemiddelde responstijd is 3 ms. De voltooiingen zijn op 21, 24 en 27 ms, dus de gemiddelde doorlooptijd is 24 ms. FIFO geeft een gemiddelde responstijd van 9 ms en een gemiddelde doorlooptijd van 18 ms. Hier laat RR iedereen snel beginnen, maar stelt het de eerste voltooide taak uit tot 21 ms.

RR verdeelt CPU-toegang terwijl taken concurreren; het maakt de voltooiingstijden niet gelijk. Een korte taak kan in haar eerste beurt eindigen. Met een vaste groep van n gereedstaande taken en tijdkwantum q is de wachttijd tussen beurten maximaal (n−1)q zonder wisselkosten. Voortdurende aankomsten, andere prioriteitsklassen en beperkingen op welke CPU's taken mogen gebruiken, veranderen de omstandigheden van die grens.

Verwerk aankomsten op de grens van een tijdschijf

Gebruik de aankomstvolgorde en bij gelijke aankomsttijden de alfabetische volgorde. Een taak die precies aankomt wanneer een tijdschijf afloopt, komt vóór de onderbroken taak in de wachtrij. Als A aankomt op 0 ms en 8 ms nodig heeft, B op 1 ms en 4 ms nodig heeft en C op 2 ms en 2 ms nodig heeft, geeft een tijdkwantum van 2 ms A 0–2, B 2–4, C 4–6, A 6–8, B 8–10, A 10–14.

Het laatste interval van A bevat twee opeenvolgende beurten zonder concurrent. De responstijden zijn 0, 1 en 2 ms; de doorlooptijden zijn 14, 9 en 4 ms. De gemiddelden zijn 1 ms en 9 ms. Wanneer een geblokkeerde taak bij eenvoudige RR terugkeert, sluit die aan voor een nieuwe beurt; de taak reserveert geen ongebruikte CPU-tijd terwijl ze geblokkeerd is.

Zorg dat het tijdkwantum zijn kosten waard is

Een zeer groot tijdkwantum laat RR zich als FIFO gedragen voor bursts die korter zijn dan dat kwantum. Een zeer klein tijdkwantum veroorzaakt veel overdrachten en herhaalde verstoring van caches. In een eenvoudige implementatie op basis van een timer is het tijdkwantum een geheel aantal timerperioden.

Bij wisselkosten s na elke nuttige tijdschijf met lengte q is het geschatte overheadaandeel sq+s. Een wisseling van 0,1 ms kost ongeveer 9,1% bij een tijdschijf van 1 ms, maar ongeveer 0,99% bij een tijdschijf van 10 ms. Langere tijdschijven amortiseren wisselkosten door die over meer nuttig werk te spreiden.

Een veelgebruikte vuistregel voor de grootte is dat de meeste bursts, bijvoorbeeld ongeveer 80%, binnen één tijdschijf eindigen. De juiste keuze hangt af van gemeten burstlengtes en de responsvertragingen die de werklast kan verdragen. Tel wisselingen tussen taken afzonderlijk van timergebeurtenissen die simpelweg dezelfde enige gereedstaande taak laten doorgaan.

Belangrijkste punten

  • RR plaatst een onvoltooide gereedstaande taak na haar tijdkwantum terug in de wachtrij.
  • De responstijd kan verbeteren terwijl de gemiddelde doorlooptijd stijgt.
  • Regels voor aankomst op een tijdschijfgrens bepalen de wachtrijvolgorde.
  • Een kort tijdkwantum verhoogt de wisseloverhead.
  • Langere tijdschijven amortiseren dispatch- en cachekosten.

2.4 Prioriteiten, geleidelijke prioriteitsverhoging en afhankelijkheden van vergrendelingen

Een prioriteitsscheduler voert de gereedstaande taak met de hoogste prioriteit uit. Taken met gelijke prioriteit kunnen FIFO of round-robinplanning volgen. In een versie met preëmptie krijgt een nieuw gereedstaande taak met hogere prioriteit onmiddellijk de CPU; in een versie zonder preëmptie wacht die totdat de huidige taak de CPU vrijgeeft.

Lees de richting van de schaal

Prioriteitsgetallen hebben geen universele richting. Gebruik in de voorbeelden uit dit leerboek kleinere getallen voor hogere prioriteit. Linux-nice-waarden volgen die richting, maar Windows-prioriteitsniveaus en Linux-realtimeprioriteiten gebruiken grotere getallen voor hogere prioriteit.

A, B en C komen aan op 0 ms met bursts van 4, 3 en 5 ms en prioriteiten 2, 1 en 3. Prioriteitsplanning zonder preëmptie voert B 0–3, A 3–7 en C 7–12 uit. Hun wachttijden zijn 0, 3 en 7 ms, gemiddeld ongeveer 3,33 ms; hun doorlooptijden zijn 3, 7 en 12 ms, gemiddeld ongeveer 7,33 ms.

Een interne prioriteit komt voort uit gemeten gedrag, zoals CPU-gebruik of wachten op I/O. SJF leidt de rangorde af uit de voorspelde burstlengte. Een externe prioriteit komt van een persoon, zoals een beheerder die een back-up als minder urgent aanmerkt. Geen van beide keuzes verzekert dat werk met lage prioriteit tijd krijgt bij een voortdurende toevoer van werk met hogere prioriteit.

Verhoog de prioriteit tijdens het wachten

Geleidelijke prioriteitsverhoging verhoogt de prioriteit van een wachtende taak geleidelijk. Als de rang elke 100 ms met één verbetert, bereikt een taak die begint met prioriteit 20 na 2 s wachten in de gereedtoestand de hoogste prioriteit 0. Door de hogere rang concurreert de taak met werk dat voorrang krijgt; regels voor gelijke prioriteit bepalen de beurten van taken met dezelfde rang.

Uithongering is gebrek aan voortgang doordat steeds ander werk wordt gekozen. Geleidelijke prioriteitsverhoging pakt dit aan door de rang in de loop van de tijd te veranderen. Dit dient een ander doel dan het voorspellen van de burstlengte: een lang wachtende lange taak kan een beurt verdienen, ook al blijft haar burst lang.

Volg de afhankelijkheid bij prioriteitsinversie

Een taak H met hoge prioriteit kan geblokkeerd zijn op een vergrendeling die wordt vastgehouden door taak L met lage prioriteit. Een taak M met gemiddelde prioriteit kan L onderbreken. Nu kan H niet verder, ook al heeft M een lagere prioriteit dan H: L moet eerst draaien om de vergrendeling vrij te geven. Dit is prioriteitsinversie.

Bij prioriteitsovererving erft L tijdelijk de prioriteit van H zolang L de vergrendeling vasthoudt die H nodig heeft. M kan L niet langer van de CPU houden. L draait, geeft de vergrendeling vrij en verliest de overgeërfde prioriteit; H wordt gereed en kan draaien.

ProbleemOorzaakReactie van de scheduler
UithongeringAnder gereedstaand werk blijft een hogere rang houden dan een taakGeleidelijke prioriteitsverhoging verhoogt de rang tijdens het wachten
PrioriteitsinversieWerk met voorrang wacht op een houder van een vergrendeling met lagere rangOvererving verhoogt de prioriteit van de houder zolang de afhankelijkheid bestaat

De eigen prioriteit van H verhogen geeft de vergrendeling waarop H wacht niet vrij: H blijft geblokkeerd. Het gaat erom de thread te laten draaien die aan de afhankelijkheid kan voldoen. In 1997 kreeg Mars Pathfinder te maken met een probleem van prioriteitsinversie dat werd aangepakt door prioriteitsovererving in te schakelen.

Belangrijkste punten

  • Controleer welke richting een hogere prioriteit betekent.
  • Geleidelijke prioriteitsverhoging verhoogt wachtende taken om uithongering tegen te gaan.
  • Een geblokkeerde taak met hoge prioriteit kan pas draaien wanneer aan haar afhankelijkheid is voldaan.
  • Prioriteitsovererving verhoogt tijdelijk de prioriteit van de houder van de vergrendeling.
3

Leer het gedrag van een taak kennen met feedbackwachtrijen

De volgende CPU-burst is zelden vooraf bekend. Een feedbackwachtrij met meerdere niveaus leert van CPU-gebruik: nieuw werk krijgt vroeg een kans, terwijl aanhoudend rekenwerk zakt naar wachtrijen die minder urgent worden bediend. Door zowel de wachtrij als het verbruikte budget te volgen, kun je dat gedrag verklaren. Periodieke verhogingen en zorgvuldige registratie pakken vervolgens de twee belangrijkste problemen aan: werk dat te lang wacht en werk dat strategisch de CPU-beurt afstaat om zijn rang te behouden.

3.1 Volg taken door feedbackwachtrijen

Een feedbackwachtrij met meerdere niveaus (MLFQ) combineert prioriteiten met round-robinplanning. Het doel is de bediening van korte taken te benaderen en interactief werk snel te laten reageren zonder dat de toekomstige uitvoeringstijd van elke taak bekend is. Recent CPU-gebruik levert de terugkoppeling.

Pas de wachtrijregels toe

Elke gereedstaande taak behoort tot één prioriteitswachtrij. De basisversie met gebruiksregistratie volgt vier regels:

  1. Kies de wachtrij met de hoogste prioriteit die gereedstaand werk bevat.
  2. Wissel binnen die wachtrij taken met gelijke prioriteit af volgens round-robinplanning.
  3. Plaats een nieuwe taak in de bovenste wachtrij.
  4. Verlaag de prioriteit van een taak wanneer die haar CPU-tijdbudget op het huidige niveau verbruikt, waarbij het gebruik over alle beurten en I/O-onderbrekingen wordt meegeteld.

Een tijdkwantum begrenst één beurt. Een budget begrenst de totale bediening op een prioriteitsniveau. Een niveau kan meerdere tijdkwanta toestaan voordat de prioriteit daalt. Op het laagste niveau blijft de taak bij een verlaging in de onderste wachtrij.

Zo krijgt een nieuwe taak een kans om snel te eindigen. Een taak die herhaaldelijk CPU-tijd verbruikt, laat zien dat ze langer nodig heeft en zakt. Een korte burst die blokkeert, verbruikt weinig budget, zodat interactieve taken doorgaans langer hoog blijven.

Volg een lange taak en een nieuwkomer

Gebruik wachtrijen Q2, Q1 en Q0, met Q2 als hoogste, tijdkwanta van 10 ms en budgetten van 10 ms op elk niveau, en geen verhoging tijdens dit voorbeeld. A heeft 200 ms nodig en komt aan op 0 ms. De taak draait in Q2 van 0–10, in Q1 van 10–20 en daarna in Q0.

Op 100 ms heeft A 100 ms CPU-tijd gekregen. B komt aan en heeft 20 ms nodig. B komt in Q2 en onderbreekt A, en draait vervolgens van 100–110 in Q2. B heeft het budget van dat niveau verbruikt en zakt naar Q1. Q1 heeft voorrang op Q0 van A, dus B draait van 110–120 en eindigt. A gaat verder op 120 en voltooit de resterende 100 ms op 220 ms. De doorlooptijd van B is 20 ms, ondanks de aankomst na een veel langere taak.

Houd het resterende werk van A bij terwijl B draait: dat blijft 100 ms. De verstreken tijd loopt door tijdens de bediening van B, maar A krijgt dan geen CPU-tijd.

Onderscheid wachten van CPU-verbruik

Een editor die 1 ms draait en op invoer wacht, gebruikt een budget van 10 ms over tien van zulke bursts. Geblokkeerde tijd gaat niet van het CPU-budget af. Bij strikte registratie tellen die korte bursts nog steeds op, zodat de editor uiteindelijk zakt, tenzij een prioriteitsverhoging de editor eerst terugplaatst.

Een vroege MLFQ-regel verlaagde alleen de prioriteit van taken die een volledig ononderbroken tijdkwantum gebruikten. Een taak die vlak vóór het aflopen de beurt afstond, behield haar prioriteit. Die regel liet interactief werk snel reageren, maar maakte ook opzettelijke manipulatie mogelijk. Door cumulatief CPU-gebruik te tellen, sluit je die achterdeur.

Lagere wachtrijen draaien wanneer alle hogere wachtrijen geen gereedstaand werk hebben. Een geblokkeerde taak met hogere prioriteit verhindert niet dat taken met lagere prioriteit de CPU gebruiken. Bij aanhoudende vraag met hoge prioriteit heeft lager geplaatst werk een extra mechanisme tegen uithongering nodig, in de vorm van periodieke verhogingen.

Belangrijkste punten

  • MLFQ leert van waargenomen CPU-gebruik, zonder toekomstige burstlengtes te kennen.
  • De hoogste wachtrij met gereedstaand werk wint; taken met gelijke prioriteit wisselen elkaar af.
  • Nieuwe taken komen bovenaan binnen.
  • Tijdkwantum en budget regelen verschillende onderdelen van de planning.
  • Cumulatieve CPU-registratie omvat ook de uitvoering voordat een taak blokkeert.

3.2 Voorkom uithongering en strategisch afstaan van de CPU-beurt

Terugkoppeling zorgt voor een nuttige scheiding, maar het vroegere gedrag van een taak hoeft niet haar huidige behoeften te blijven weerspiegelen. Een lange berekening kan later interactief worden. Ondertussen kan een taak in de onderste wachtrij onbeperkt wachten als de hogere wachtrijen druk blijven.

Beoordeel elke taak periodiek opnieuw

Een prioriteitsverhoging brengt na een periode S alle taken terug naar de bovenste wachtrij. Daardoor kunnen wachtende taken de bovenste wachtrij delen en kan de scheduler veranderd gedrag opnieuw leren. Een verhoogde CPU-gebonden taak verbruikt later haar budget en zakt weer.

Neem de vroege MLFQ-regels: twee interactieve taken staan altijd de beurt af vóór het einde van een volledige tijdschijf van 10 ms en houden samen Q2 bezig. Een CPU-gebonden taak wacht in Q0. Zonder verhogingen krijgt die geen uitvoeringstijd. In een herhalende planning waarin een verhoging elke 100 ms de taak één beurt van 10 ms op het hoogste niveau geeft voordat ze zakt en werk met hogere prioriteit de rest vult, krijgt ze 10% van de CPU. Dat percentage komt uit dit voorbeeld; een verhoging kent geen algemeen vast aandeel toe.

Een lang interval tussen verhogingen laat taken lang wachten tussen kansen om te draaien. Een zeer kort interval plaatst CPU-gebonden werk steeds opnieuw bovenaan en verzwakt het voordeel van interactief werk. Ontwerpen hebben perioden van ongeveer één seconde gebruikt, maar de periode is een keuze die je afstemt op het gedrag van de werklast en de responsdoelen.

Registreer gebruik over meerdere beurten

Een afzonderlijk probleem is manipulatie. Volgens de vroege regel voor volledige tijdschijven kan een programma 9 ms draaien, 1 ms I/O aanvragen en dat herhalen. Het gebruikt nooit een volledige tijdschijf van 10 ms achter elkaar en behoudt daardoor de hoogste prioriteit, terwijl het bijna alle beschikbare CPU-tijd verbruikt.

Bij een cumulatief budget van 10 ms verbruikt de eerste burst 9 ms en blijft 1 ms over. Na de I/O put één extra milliseconde het budget uit en daalt de prioriteit van de taak tijdens haar tweede burst. Een I/O-verzoek verandert de toestand; het wist de al ontvangen uitvoeringstijd niet. De registratieregel voorkomt deze tactiek ook zonder verhoging.

MechanismeWat het verandertProbleem dat het aanpakt
BudgetregistratieTelt CPU-gebruik over beurten opStrategisch de beurt afstaan vóór het aflopen
Periodieke verhogingBegint het leren van prioriteiten opnieuwUithongering en veranderd gedrag
Stel de niveaus af

Kies het aantal wachtrijen, het tijdkwantum van elke wachtrij, het budget van elk niveau en het interval tussen verhogingen. Bovenste wachtrijen gebruiken meestal korte tijdkwanta, bijvoorbeeld 10 ms, om interactieve taken snel af te wisselen. Lagere wachtrijen kunnen veel langere tijdkwanta gebruiken, soms honderden milliseconden, om wisselingen tijdens aanhoudend rekenwerk te verminderen.

Het budget kan onafhankelijk van het tijdkwantum groeien. Een niveau met een tijdkwantum van 5 ms en een budget van 15 ms kan drie volledige beurten toestaan voordat de prioriteit daalt. Een groter budget stelt de indeling als langlopende taak uit; een groter tijdkwantum verlengt een afzonderlijke beurt.

Het tijdsverdelingsontwerp van Solaris illustreert tabelgestuurde terugkoppeling: de klassieke instelbare tabel heeft 60 prioriteitsniveaus, met tijdkwanta van ongeveer 20 ms bij hoge prioriteit tot enkele honderden milliseconden bij lage prioriteit. Klassieke BSD-ontwerpen berekenden de prioriteit daarentegen uit recent CPU-gebruik dat in de loop van de tijd afneemt. Bij beide verliest oud CPU-gebruik invloed, zodat het verre verleden van een thread de behandeling niet blijvend bepaalt.

Belangrijkste punten

  • Verhogingen bieden opnieuw kansen op uitvoering en laten veranderd gedrag opnieuw aanleren.
  • Een verhoging geeft geen blijvende hoge prioriteit of vast CPU-aandeel.
  • Cumulatieve registratie voorkomt de tactiek om de beurt vóór het aflopen af te staan.
  • Korte tijdkwanta op hoge niveaus ondersteunen snelle respons; langere tijdkwanta op lage niveaus verminderen overhead.
  • Een budget kan meerdere beurten op één niveau omvatten.
  • Terugkoppeling kan prioriteitstabellen of formules met afnemende invloed van CPU-gebruik gebruiken.
4

Verdeel CPU-tijd in aandelen

Een scheduler voor eerlijke aandelen begint met een aanspraak: hoeveel van de betwiste CPU-tijd elke uitvoerbare taak hoort te krijgen. Bij loterij- en strideplanning drukken tickets die aanspraak uit; in de eerlijke klasse van Linux doen gewichten dat. De selectieregels verschillen in hoe nauwkeurig korte intervallen de beoogde verdeling volgen en hoe ze snelle uitvoering bevorderen. Volg de registratie om te zien waarom een groter gewicht meer werkelijke CPU-tijd oplevert, terwijl de virtuele voortgang langzamer groeit.

4.1 Loot gewogen beurten met loterijplanning

Planning op basis van evenredige aandelen beoogt CPU-tijd te verdelen volgens toegekende aandelen. Bij loterijplanning heeft elke uitvoerbare taak tickets. Een willekeurig winnend ticket kiest de taak voor de volgende even lange tijdschijf. De winkans van een taak is haar aantal tickets gedeeld door alle tickets van uitvoerbare taken.

Zoek een winnend ticket

A heeft 100 tickets, B 50 en C 250. Nummer de 400 tickets van 0 tot en met 399. A heeft 0–99, B heeft 100–149 en C heeft 150–399. Een trekking van 300 kiest C.

Een implementatie met een lijst trekt een getal en telt de aantallen tickets op. De lopende totalen zijn 100 na A, 150 na B en 400 na C. Stop bij het eerste totaal dat strikt groter is dan het getrokken getal. Met “groter dan of gelijk aan” zouden tickets op de grens verkeerd worden toegewezen: trekking 100 hoort bij B. Door houders van meer tickets vooraan te plaatsen, wordt deze zoekactie in de lijst gemiddeld korter.

Onderscheid verwachting van garantie

Als A 75 tickets heeft en B 25, is het verwachte aandeel van A 75%. Bij 100 onafhankelijke trekkingen met gelijke tijdschijven waarbij beide uitvoerbaar zijn, verwacht A 75 keer te winnen. De standaardafwijking is:

100×0,75×0,25≈4,33 tijdschijven.

Een resultaat van ongeveer 71–79 overwinningen ligt binnen ongeveer één standaardafwijking van het gemiddelde; het is geen gegarandeerd bereik. Korte reeksen kunnen aanzienlijk afwijken van de beoogde verhouding 3:1. Naarmate het waarnemingsvenster groeit, wordt de relatieve willekeurige variatie kleiner. Loterijplanning biedt kansmatige eerlijkheid, geen exacte verdeling over een eindig venster of begrensde wachttijd tot de volgende beurt.

Voor twee taken met evenveel tickets en gelijke CPU-behoeften deelt de maat voor oneerlijkheid U het vroegere voltooiingstijdstip door het latere. De verhouding bereikt 1 wanneer ze tegelijk eindigen en is kleiner wanneer één veel eerder eindigt. Deze voltooiingsverhouding varieert vooral sterk bij korte taken die met loterijplanning worden gepland.

Verdeel tickets over gebruikers en afhankelijkheden

Met een lokaal ticketsysteem kan een gebruiker een toegewezen globale aanspraak lokaal verdelen. Gebruiker X heeft 200 globale tickets en wijst 300 lokale tickets toe aan X1 en 100 aan X2. Van de 400 lokale tickets heeft X1 driekwart, wat 150 globale tickets geeft; X2 krijgt er 50. Gebruiker Y heeft 100 globale tickets voor Y1. Het totaal is 300, dus X1 ontvangt naar verwachting 50%, X2 ongeveer 16,67% en Y1 ongeveer 33,33% van de betwiste CPU-tijd.

Ticketoverdracht leent de tickets van een client tijdelijk uit aan een server die werk voor de client doet en geeft ze terug wanneer het verzoek is voltooid. Dit volgt de werkafhankelijkheid. Met ticketinflatie kunnen samenwerkende taken hun eigen aantallen tickets verhogen om meer uitvoeringstijd te vragen. Dit vereist vertrouwen of grenzen: onbeperkte inflatie laat een hebzuchtige taak de aandelen van alle anderen verwateren.

Loterijplanning heeft tickettotalen nodig, maar geen registratie van hoeveel uitvoeringstijd elke taak voorligt. Een nieuwe taak draagt eenvoudig haar tickets bij aan de verzameling uitvoerbare taken. De toewijzing van tickets blijft een beleidskeuze; de willekeurige trekking dwingt die keuze in verwachting af. De tickets van een geblokkeerde taak dingen niet mee naar een tijdschijf die de taak niet kan gebruiken.

Belangrijkste punten

  • De ticketfractie geeft de kans dat een taak elke trekking wint.
  • Cumulatief zoeken stopt wanneer het totaal groter is dan het winnende getal.
  • Loterijaandelen zijn verwachte verhoudingen, met variatie op korte termijn.
  • Een lokaal ticketsysteem behoudt de globale aanspraak van een gebruiker terwijl die lokaal wordt verdeeld.
  • Overdracht volgt een afhankelijkheid; onbeperkte inflatie kan de aandelen van anderen verwateren.

4.2 Houd de verdeling op koers met stapgroottes

Strideplanning zet ticketaandelen om in een deterministische reeks. Elke uitvoerbare taak heeft een stapgrootte, berekend als een grote constante gedeeld door haar tickets, en een voortgangswaarde die haar gewogen voortgang bijhoudt. Kies de laagste voortgangswaarde, voer die taak één even lange tijdschijf uit en tel dan haar stapgrootte bij haar voortgangswaarde op.

Bereken de stapgroottes

A heeft 50 tickets, B 25 en C 100. Met constante 1.000 zijn hun stapgroottes 20, 40 en 10. Meer tickets leveren een kleinere stapgrootte op. De voortgangswaarde van een bevoordeelde taak stijgt langzaam, zodat die vaker het minimum wordt.

Begin alle voortgangswaarden bij nul en gebruik bij gelijke waarden de alfabetische volgorde. Houd de tuple in de vaste volgorde A, B, C:

Voortgangswaarden vóór selectieGeselecteerde taakVoortgangswaarden na haar tijdschijf
(0, 0, 0)A(20, 0, 0)
(20, 0, 0)B(20, 40, 0)
(20, 40, 0)C(20, 40, 10)
(20, 40, 10)C(20, 40, 20)
(20, 40, 20)A(40, 40, 20)
(40, 40, 20)C(40, 40, 30)
(40, 40, 30)C(40, 40, 40)

Alleen de voortgangswaarde van de geselecteerde taak verandert. In zeven tijdschijven krijgt A twee beurten, B één en C vier: precies de verhouding 50:25:100. Bij de gezamenlijke voortgangswaarde 40 heeft elk dezelfde hoeveelheid gewogen uitvoeringstijd doorlopen. Tussen zulke gelijke standen hoeven aandelen over korte perioden niet exact te zijn.

Houd werkelijke uitvoering en virtuele voortgang gescheiden

De voortgangswaarde is een ordeningswaarde, geen verstreken tijd of aantal tickets. Door de grote stapgrootte van B wacht die taak terwijl A en C de voortgangswaarde inhalen. B krijgt nog steeds het beoogde aandeel van een zevende over deze herhalende cyclus. Het aantal tickets bij de voortgangswaarde optellen zou het ontwerp omkeren: de taak met de meeste tickets zou de grootste sprong maken en minder vaak worden gekozen.

De constante bepaalt de schaal van de stapgroottes, niet de beoogde ticketverhoudingen. Implementaties met gehele getallen hebben voldoende precisie nodig om te voorkomen dat afronding die verhoudingen vertekent. Vergelijkingen en updates moeten dezelfde schaal gebruiken.

Plaats een nieuwkomer verstandig

Stel dat bestaande taken voortgangswaarden rond 4.000 hebben. Een nieuwe taak die bij nul begint, zou herhaaldelijk winnen tijdens het inhalen, zelfs met weinig tickets. Initialiseer haar voortgangswaarde ten opzichte van de huidige systeemvoortgang, bijvoorbeeld op de huidige minimale voortgangswaarde, zodat ze geen uitvoeringstijd verzamelt voor de periode vóór haar aankomst.

LoterijplanningStrideplanning
Willekeurige trekkingen dwingen verwachte aandelen afSelectie op de laagste voortgangswaarde volgt de uitvoering deterministisch
Aantallen tickets zijn voldoende voor selectieElke taak heeft een voortgangswaarde en stapgrootte nodig
Een nieuwkomer voegt eenvoudig tickets toeEen nieuwkomer heeft een geschikte beginwaarde nodig

De virtuele uitvoeringstijd van Linux gebruikt het verwante idee om gewogen voortgang toe te rekenen voor werkelijk ontvangen CPU-tijd. In beide ontwerpen laat een grotere aanspraak die voortgang langzamer groeien, zodat de taak blijft meedingen naar latere uitvoeringstijd.

Belangrijkste punten

  • De stapgrootte is de gemeenschappelijke constante gedeeld door het aantal tickets.
  • Selecteer de laagste voortgangswaarde en tel alleen de stapgrootte van die taak op.
  • Meer tickets laten voortgangswaarden langzamer groeien.
  • Nieuwe taken hebben voortgangswaarden nodig die aansluiten op de huidige voortgang.

4.3 Gewichten, virtuele uitvoeringstijd en deadlines voor taken die in aanmerking komen

De eerlijke schedulers van Linux houden gewogen CPU-tijd bij. De Completely Fair Scheduler (CFS), geïntroduceerd in Linux 2.6.23 in 2007, koos de uitvoerbare taak met de kleinste virtuele uitvoeringstijd. Linux begon die selectieregel in 6.6 in 2023 te vervangen door EEVDF.

Verdeel uitvoeringstijd naar gewicht

Een nice-waarde loopt van −20, met de meeste voorrang, tot +19, met de minste voorrang. Nice 0 heeft gewicht 1024. Elke stap naar een grotere nice-waarde verlaagt het gewicht met een factor van ongeveer 1,25. Voorbeeldgewichten zijn 3121 bij nice −5, 820 bij nice 1, 335 bij nice 5, 110 bij nice 10 en 15 bij nice 19.

Nice 0 tegenover nice 1 geeft 10241024+820≈0,555, ongeveer 55,5% tegenover 44,5%. Aandelen hangen ongeveer af van het verschil tussen nice-waarden: 3121/1024 en 335/110 zijn beide ongeveer 3,05. Nice +19 krijgt in dit eenvoudige model met twee taken nog steeds ongeveer 1,4% wanneer het concurreert met nice 0.

Klassieke CFS verdeelt een beoogde planningslatentie naar gewicht:

tijdschijfk=wk∑iwi×latentie

Voor gewichten 1024, 1024 en 335 is het totaal 2383. Een beoogde periode van 48 ms geeft ongeveer 20,63 ms aan elk van de zwaardere taken en 6,75 ms aan de lichtere. Dit zijn illustratieve parameters, geen universele standaardwaarden van de kernel. Met vier gelijke taken geeft 48 ms elk 12 ms. Met tien zou 4,8 ms per taak onder een illustratieve minimale granulariteit van 6 ms vallen, dus moet de periode groeien.

Reken virtuele voortgang toe

CFS verhoogt de virtuele uitvoeringstijd van een draaiende taak met:

Δv=1024w×Δt

Een taak met gewicht 1024 krijgt één virtuele milliseconde per werkelijke milliseconde. Een taak met gewicht 335 krijgt er ongeveer 3,06. Door lichtere taken sneller voortgang toe te rekenen, moeten ze eerder wachten terwijl zwaardere taken meer werkelijke uitvoeringstijd krijgen.

Klassieke CFS ordent uitvoerbare taken in de wachtrij in een rood-zwartboom op virtuele uitvoeringstijd. Invoegen en verwijderen kosten logaritmische tijd; een in de cache bewaarde pointer naar de meest linkse knoop maakt het vinden van het minimum mogelijk in constante tijd. Geblokkeerde taken verlaten deze boom van uitvoerbare taken. De plaatsing bij ontwaken beperkt de mate waarin eerder slapen een onbeperkte aanspraak op inhaaltijd kan worden.

Kies met EEVDF uit taken die in aanmerking komen

Earliest Eligible Virtual Deadline First behoudt gewichten en registratie van virtuele uitvoeringstijd. Een taak heeft een positieve achterstand wanneer ze nog uitvoeringstijd tegoed heeft en een negatieve achterstand wanneer ze meer dan haar aanspraak heeft gekregen. Taken met een niet-negatieve achterstand komen in aanmerking. EEVDF kiest de taak die in aanmerking komt en de vroegste virtuele deadline heeft.

De deadline combineert de virtuele start van een verzoek met de aangevraagde uitvoeringsduur, omgerekend naar virtuele tijd. Het is een waarde voor de uitvoeringsvolgorde, geen beloofd voltooiingstijdstip op de klok. Een kortere aangevraagde tijdschijf kan een taak die in aanmerking komt een vroegere deadline geven en de latentie verbeteren zonder haar gewichtsaandeel op lange termijn te verhogen. Huidige Linux-versies ondersteunen aanvragen voor tijdschijven via sched_setattr().

Selectie bij klassieke CFSSelectie bij EEVDF
Kleinste virtuele uitvoeringstijdVroegste virtuele deadline van taken die in aanmerking komen

Belangrijkste punten

  • Nice-waarden bepalen relatieve gewichten voor normale uitvoering in de eerlijke klasse.
  • Virtuele uitvoeringstijd groeit omgekeerd evenredig met het gewicht.
  • Klassieke CFS gebruikt de minimale virtuele uitvoeringstijd en een in de cache bewaard boomminimum.
  • Minimale granulariteit kan de klassieke CFS-periode verlengen.
  • EEVDF controleert eerst welke taken in aanmerking komen en vergelijkt daarna virtuele deadlines.
  • Kortere EEVDF-verzoeken veranderen de latentie, terwijl gewichten de aandelen bepalen.
5

Verdeel werk over meerdere CPU's

Meerdere CPU's bieden meer mogelijkheden om werk uit te voeren, maar de plaatsing beïnvloedt nu de kosten van elke keuze. Een thread kan op de ene processorkern gevulde caches vinden en op een andere ver verwijderd geheugen. Gereedwachtrijen moeten ook gelijktijdige beslissingen ondersteunen zonder gedeelde toestand te beschadigen. Vergelijk één gedeelde wachtrij met afzonderlijke wachtrijen per CPU en weeg vervolgens het voordeel van een gelijkmatige werkverdeling af tegen de kosten van verplaatsing.

5.1 Houd rekening met caches en CPU-topologie

Meerdere CPU's helpen alleen wanneer er parallel werk is. Eén thread draait op één logische CPU tegelijk; meerdere threads of onafhankelijke programma's kunnen samen meerdere CPU's gebruiken. Een scheduler moet kiezen welke taak draait en waar die draait.

Deel de verantwoordelijkheid voor planning

Bij symmetrische multiprocessing (SMP) voeren CPU's kernelcode uit en nemen ze zelf planningsbeslissingen. Bij asymmetrische multiprocessing coördineert één hoofdprocessor de planning terwijl andere toegewezen werk uitvoeren. Centrale besturing is eenvoudiger, maar de hoofdprocessor kan een knelpunt worden. Systemen voor algemeen gebruik gebruiken SMP.

Gelijktijdige beslissingen vereisen coördinatie. Als twee CPU's taken uit een gedeelde gereedwachtrij verwijderen, moeten de wijzigingen worden gesynchroniseerd zodat geen vermelding verloren gaat en dezelfde taak uit de wachtrij niet twee keer wordt gekozen. Meer CPU's kunnen de concurrentie om die gedeelde structuur vergroten.

Behoud nuttige cache-inhoud

Processorkernen hebben kleine snelle caches, meestal eigen L1- en L2-caches en een grotere L3-cache die meerdere kernen delen. Temporele lokaliteit betekent dat recent gebruikte gegevens opnieuw worden gebruikt. Ruimtelijke lokaliteit betekent dat nabijgelegen gegevens worden gebruikt, zoals opeenvolgende array-elementen.

Een sorterende thread op kern 0 vult de caches en TLB van die kern. Als de thread daar na een korte preëmptie wordt hervat, kunnen veel benodigde vermeldingen nog aanwezig zijn. Op kern 3 moet de thread mogelijk dezelfde gegevens opnieuw ophalen uit een gedeelde cache of het geheugen. Cacheaffiniteit is de neiging van de scheduler om een thread dicht bij de recent gebruikte CPU te houden. Het precieze voordeel hangt af van wat in de cache blijft en van de topologie van gedeelde caches.

Onderscheid coherentie van synchronisatie

Cachecoherentie voorkomt dat kernen onbeperkt tegenstrijdige gecachte kopieën van één geheugenlocatie gebruiken. Busverkeer afluisteren is één mogelijke implementatie: caches observeren verkeer en maken kopieën ongeldig of werken die bij wanneer een andere kern schrijft. Grotere systemen kunnen andere coherentiemechanismen gebruiken.

Coherentie maakt van meerdere instructies geen enkele atomaire bewerking. Als twee CPU's allebei een wachtrijlengte lezen, vermeldingen wijzigen en de lengte terugschrijven, laten coherente afzonderlijke lees- en schrijfbewerkingen nog steeds schadelijke vervlechtingen toe. De scheduler heeft vergrendelingen of een andere synchronisatiemethode nodig voor de hele wijziging. De gedeelde cacheregel van een vergrendeling kan zelf tussen kernen bewegen terwijl die erom concurreren.

Lees de hardware-indeling
HardwarekenmerkWaar de scheduler rekening mee moet houden
Gelijktijdige multithreading (SMT)Logische CPU's op één kern delen uitvoeringseenheden en caches
Niet-uniforme geheugentoegang (NUMA)Geheugen dicht bij een socket kan sneller toegankelijk zijn dan verder verwijderd geheugen
Heterogene processorkernenPrestatie- en efficiëntiekernen bieden verschillende afwegingen tussen snelheid en energie

Intel noemt zijn SMT-implementatie Hyper-Threading. Twee drukke threads op logische CPU's van dezelfde kern concurreren om de bronnen van die kern; twee logische CPU's zijn niet gelijk aan twee onafhankelijke fysieke kernen. Een NUMA-migratie kan berekeningen ook verder van het gebruikte geheugen brengen, zelfs wanneer het opwarmen van de cache kort duurt.

Een thread naar een ongebruikte CPU verplaatsen kan een lange wachtrijvertraging wegnemen. De thread op zijn plaats houden kan lokaliteit behouden. Vergelijk die kosten aan de hand van de werkelijke werklast: affiniteit is een prestatievoorkeur, terwijl een expliciet affiniteitsmasker beperkt welke CPU's überhaupt zijn toegestaan.

Belangrijkste punten

  • Parallelle versnelling vereist meerdere uitvoerbare threads of programma's.
  • Met SMP kunnen meerdere CPU's planningsbeslissingen nemen.
  • Cacheaffiniteit behoudt recent nuttige gegevens en vertalingen.
  • Coherentie maakt een wijziging met meerdere stappen niet atomair.
  • SMT, NUMA en verschillende soorten processorkernen beïnvloeden de plaatsingskosten.

5.2 Verdeel werk zonder het voortdurend te verplaatsen

Een multiprocessorscheduler heeft een plaats nodig om gereedstaand werk te bewaren. Eén gedeelde wachtrij maakt werk gemakkelijk te vinden. Afzonderlijke wachtrijen per CPU verminderen concurrentie om gedeelde bronnen en behouden de plaatsing, maar kunnen één CPU overbelast laten terwijl een andere niets doet.

Vergelijk wachtrijontwerpen
OntwerpBelangrijkste voordeelBelangrijkste kosten
Eén wachtrij (SQMS)Elke geschikte ongebruikte CPU kan wachtend werk nemenConcurrentie om de wachtrij en zwakkere cacheaffiniteit
Meerdere wachtrijen (MQMS)Lokale beslissingen schalen goed en behouden affiniteitOngelijke belasting vereist actieve correctie

Bij multiprocessorplanning met één wachtrij halen alle CPU's werk uit één gedeelde wachtrij. Als taken op elke CPU kunnen draaien, vult wachtend werk vanzelf een ongebruikte CPU. Een gedeelde vergrendeling beschermt de wachtrij, zodat een groter aantal CPU's die vergrendeling tot een knelpunt kan maken.

Met vijf round-robintaken A–E op vier CPU's wijst een mogelijke reeks A, B, C, D toe in de eerste ronde; E, A, B, C in de tweede; en D, E, A, B in de derde. A draait op CPU 0, daarna 1 en daarna 2. De machine blijft bezig, maar A wisselt herhaaldelijk van eigen caches. Affiniteitsregels kunnen de meeste plaatsingen behouden en geselecteerde taken verplaatsen om het werk te verdelen.

Merk ongelijke aandelen op

Bij multiprocessorplanning met meerdere wachtrijen plant elke CPU zijn eigen wachtrij. Stel dat CPU 0 A en C heeft en CPU 1 B en D, allemaal CPU-gebonden en lokaal delend volgens round-robinplanning. Aanvankelijk krijgt elke taak een halve CPU. Wanneer C eindigt, krijgt A heel CPU 0, terwijl B en D nog steeds elk de helft van CPU 1 krijgen.

De machine blijft volledig bezet, maar de taken krijgen niet langer gelijke aandelen. Als A ook eindigt, gaat CPU 0 niets doen hoewel B en D gereed zijn. Door één ervan naar CPU 0 te verplaatsen krijgen beide een volledige CPU en wordt eerder ongebruikte capaciteit benut.

Met drie gelijke CPU-gebonden taken en twee CPU's is gelijke uitvoering op lange termijn twee derde van een CPU per taak. Bij een vaste plaatsing staat één taak alleen en delen twee taken een CPU. Door periodiek af te wisselen welke taak alleen staat, kun je de gelijke verdeling benaderen. Niet één thread draait op beide CPU's tegelijk.

Beslis wanneer je migreert

Migratie verplaatst een taak naar de wachtrij van een andere CPU. Werk stelen is een haalstrategie: een CPU met weinig werk bekijkt de wachtrij van een drukkere CPU en neemt werk over. Vaak controleren veroorzaakt synchronisatieverkeer; zelden controleren laat ongelijke belasting voortbestaan. Bij stelen moet ook rekening worden gehouden met toegestane CPU's en geheugenlokaliteit.

Vergelijk de verwachte bespaarde wachttijd met de migratiekosten. Een lange wachtrij op één CPU en een ongebruikte geschikte CPU vormen een sterke reden om te verplaatsen. Een klein tijdelijk verschil tussen wachtrijen kan verdwijnen voordat de kosten van een koude cache zijn terugverdiend.

De O(1)- en CFS-ontwerpen van Linux gebruikten uitvoeringswachtrijen per CPU; Linux verdeelt de belasting over hardwareplanningsdomeinen en houdt rekening met gedeelde kernen en sockets. De alternatieve BF Scheduler gebruikte één wachtrij. Gebruikers kunnen plaatsing beperken met taskset of sched_setaffinity() op Linux en SetThreadAffinityMask() op Windows. Een beperkt affiniteitsmasker kan verklaren waarom een gereedstaande taak een ogenschijnlijk ongebruikte CPU niet gebruikt.

Belangrijkste punten

  • Een gedeelde wachtrij vindt wachtend werk gemakkelijk, maar vereist gedeelde synchronisatie.
  • Wachtrijen per CPU behouden lokaliteit en verminderen concurrentie om gedeelde bronnen.
  • Volledige CPU-bezetting kan samengaan met ongelijke aandelen per taak.
  • Migratie corrigeert ongelijke belasting tegen cache- en coördinatiekosten.
  • Werk stelen haalt taken naar CPU's met capaciteit over.
  • Affiniteitsbeperkingen begrenzen welke ongebruikte CPU's een taak mogen aannemen.
6

Lees systeeminstellingen en beoordeel beleid

Bestaande schedulers combineren verschillende ideeën: prioriteitsklassen, gewogen aandelen, terugkoppeling na wachtperioden en plaatsing over CPU's. Een instelling kan voorrang, aandeel of toegestane plaatsing veranderen, dus bepaal welke instelling je leest voordat je het effect voorspelt. Linux en Windows bieden concrete voorbeelden. Om beleid te kiezen verbind je die mechanismen met een werklast en onderzoek je zowel gemiddelde resultaten als de vertragingen van de minst bevoordeelde taken.

6.1 Gebruik de planningsinstellingen van Linux

Linux plant threads, die in de kernel taken worden genoemd. Het planningsbeleid, de nice-waarde, groepsinstellingen en CPU-affiniteit van een taak beantwoorden verschillende vragen over wanneer en waar die draait.

Lees eerst het beleid
BeleidSelectiegedrag
SCHED_OTHER en SCHED_BATCHNormale uitvoering in de eerlijke klasse, gewogen volgens nice
SCHED_IDLENormaal werk met uiterst lage prioriteit; nice heeft er geen invloed op
SCHED_FIFORealtimeprioriteit, zonder tijdkwantum voor gelijke prioriteiten
SCHED_RRRealtimeprioriteit, met afwisseling van taken met gelijke prioriteit per tijdkwantum
SCHED_DEADLINEUitvoering in de deadlineklasse boven de andere klassen

De normale beleidsvormen hebben statische prioriteit 0. Realtime-FIFO en -RR gebruiken 1–99, waarbij 99 het hoogst is. Een FIFO-taak gaat door totdat die blokkeert, de beurt afstaat of wordt onderbroken door werk met hogere prioriteit. RR voegt beurten toe voor taken met gelijke prioriteit; sched_rr_get_interval() geeft het tijdkwantum. Deze namen beschrijven Linux-beleid: normale eerlijke planning is niet het RR-algoritme met gelijke tijdschijven uit het leerboek.

Verander aandelen en plaatsing

Nice loopt van −20 tot +19, met standaard 0. Grotere waarden verlagen het gewicht in de eerlijke klasse met ongeveer een factor 1,25 per stap. Bij een gebruikelijke start met nice 0 start nice -n 10 make een bouwproces met nice 10; -n is een aanpassing van de overgeërfde nice-waarde. renice -n 5 -p 4321 stelt het doelproces in op nice 5. Een gebruiker kan eigen werk minder voorrang geven; voor het verhogen van de prioriteit is een geschikt privilege of een toegestane brongrens nodig.

taskset -c 0,1 ./app staat toe dat een programma op CPU's 0 en 1 draait. Het maakt geen tweede thread aan en belooft geen exclusief gebruik van een van beide CPU's. ps -o pid,cls,ni,rtprio,comm toont velden die met beleid samenhangen, terwijl top helpt om prioriteit, nice en CPU-verbruik te observeren.

chrt -f 50 ./app kiest FIFO-realtimeprioriteit 50. Gebruik realtime-instellingen alleen in een gecontroleerde omgeving: een drukke thread met hoge prioriteit kan de shell en essentieel systeemwerk vertragen. Standaardlimieten voor realtimebandbreedte reserveren enige tijd voor normaal werk, maar zorgen er niet voor dat elke dergelijke werklast snel reageert. Voorrang verandert de toegang tot CPU-tijd, niet de snelheid van een instructie.

Onderscheid groepsgewicht van quotum

In cgroup v2 loopt cpu.weight van 1 tot 10.000, met standaard 100, en verdeelt het betwiste CPU-capaciteit in de eerlijke klasse over actieve nevengroepen. Gewichten 200 en 100 geven ongeveer twee derde en een derde van één CPU wanneer beide groepen bezig zijn. Als de tweede niets gaat doen, kan de eerste alle beschikbare capaciteit gebruiken.

cpu.max stelt een bandbreedtelimiet in. De waarde “50000 100000” staat 50 ms gezamenlijke CPU-tijd per periode van 100 ms toe, gemiddeld gelijk aan een halve CPU. Meerdere threads kunnen dat budget parallel verbruiken en het eerder in verstreken tijd uitputten. Een begrensde groep kan worden afgeremd, zelfs wanneer er CPU-capaciteit over is.

Plaats de namen in de geschiedenis

De O(1)-scheduler van Linux 2.6.0 gebruikte prioriteitsarrays en terugkoppeling over interactiviteit. CFS verscheen in 2.6.23 in 2007. Linux 6.6 begon in 2023 de overgang naar EEVDF-selectie in de eerlijke klasse. Sinds Linux 6.12 in 2024 ondersteunt sched_ext dynamisch geladen BPF-planningsbeleid op daarvoor geconfigureerde kernels. Als zo'n scheduler faalt of uitvoerbaar werk laat vastlopen, herstelt de kernel de ingebouwde planning.

Belangrijkste punten

  • De beleidsklasse bepaalt de voorrang voordat nice wordt geïnterpreteerd.
  • Nice past het relatieve aandeel in de eerlijke klasse aan; affiniteit beperkt de toegestane CPU's.
  • SCHED_IDLE negeert nice.
  • Een cgroup-gewicht verdeelt betwiste capaciteit; een quotum begrenst de gezamenlijke CPU-tijd.
  • EEVDF verandert de selectie in de eerlijke klasse, terwijl sched_ext vervangbaar beleid ondersteunt.

6.2 Volg Windows-prioriteiten en terugkoppeling

Windows plant gereedstaande threads op prioriteit van 0 tot en met 31, waarbij grotere getallen hoger zijn. Gereedstaande threads met gelijke prioriteit wisselen elkaar af volgens round-robinplanning. Een nieuw gereedstaande thread met hogere prioriteit onderbreekt een thread met lagere prioriteit zonder te wachten tot het tijdkwantum daarvan eindigt. Prioriteit 0 behoort toe aan de thread die vrije pagina's met nullen vult.

Bepaal de basisprioriteit uit twee instellingen

De basisprioriteit van een thread hangt af van de prioriteitsklasse van het proces en het eigen relatieve threadniveau. Procesklassen zijn inactief, onder normaal, normaal, boven normaal, hoog en realtime. Threadniveaus omvatten inactief, laagste, onder normaal, normaal, boven normaal, hoogste en tijdkritisch.

ProcesklasseThreadniveauBasisprioriteit
NormaalNormaal8
NormaalHoogste10
HoogNormaal13
RealtimeNormaal24

Tijdkritisch geeft 15 buiten de klasse realtime en 31 daarbinnen. Threadniveau inactief geeft 1 buiten realtime en 16 daarbinnen. Deze grensniveaus zijn bijzondere tabelvermeldingen, dus een vaste waarde bij elke klasse optellen zou verkeerde resultaten geven.

Volg een tijdelijke verhoging

Prioriteiten 1–15 vormen het variabele bereik; 16–31 vormen het realtimebereik. Een thread begint met een dynamische prioriteit gelijk aan de basisprioriteit. Voor threads in het variabele bereik kunnen gebeurtenissen zoals invoer of het einde van een wachtperiode de dynamische prioriteit tijdelijk verhogen. Threads met een realtimebasisprioriteit krijgen zulke verhogingen niet.

Stel dat een thread met basisprioriteit 8 wordt verhoogd naar 14. Als de thread blijft rekenen, daalt de dynamische prioriteit na elk volledig tijdkwantum één niveau: 13 na het eerste, 12 na het tweede en 8 na het zesde. De verhoging verandert de basisprioriteit niet blijvend en neemt niet af tot onder die basis.

Dit is terugkoppeling: recent gedeblokkeerd werk krijgt snel uitvoeringstijd, terwijl aanhoudend CPU-gebruik het tijdelijke voordeel verliest. Windows gebruikt ook tijdelijke verhogingen voor lang wachtende gereedstaande threads om uithongering tegen te gaan. Zo'n verhoging kan een taak met lage rang die een vergrendeling vasthoudt helpen vooruitgang te boeken, maar is een ander mechanisme dan prioriteitsovererving voor een specifieke vergrendeling.

Herken verwante ontwerpen

De tijdsverdelingsklasse van Solaris is een tabelgestuurd MLFQ-ontwerp. ULE van FreeBSD gebruikt uitvoeringswachtrijen per CPU en vergelijkt slaapgedrag met uitvoeringsgedrag om interactieve threads te herkennen. Deze systemen delen het idee om de uitvoering aan te passen aan waargenomen gedrag zonder identieke wachtrijregels te gebruiken.

macOS biedt dienstkwaliteitsklassen (QoS), waaronder gebruikersinteractief, door gebruiker gestart, standaard, hulpprogramma en achtergrond. Die beschrijven de urgentie van werk. Op Apple silicon helpt QoS het systeem om werk over prestatie- en efficiëntiekernen te verdelen. Programma's geven het belang van het werk door; het besturingssysteem kiest de plaatsing volgens het beleid en de beschikbare hardware.

Bestaande schedulers combineren terugkoppeling, prioriteiten, eerlijkheid en affiniteit. Een Windows-klasse realtime heeft sterkere voorrang, maar garandeert geen snellere berekening of volledige correctheid voor realtimegebruik.

Belangrijkste punten

  • Windows-prioriteitsgetallen stijgen met de voorrang.
  • De basisprioriteit combineert de procesklasse met het relatieve threadniveau.
  • Verhogingen in het variabele bereik nemen per volledig tijdkwantum één niveau af richting de basis.
  • Realtimebasisprioriteiten krijgen geen dynamische verhogingen.
  • Solaris, ULE en macOS gebruiken verwante ideeën met verschillende mechanismen.
  • QoS geeft de urgentie van werk door en helpt de plaatsing sturen.

6.3 Kies beleid en onderzoek de gevolgen

Kies het doel van de werklast voordat je een scheduler kiest. Bij een batchwachtrij kan het belangrijk zijn dat veel kleine taken snel worden voltooid. Een editor heeft na invoer snelle bediening nodig. Een gedeelde server heeft een verdedigbare verdeling tussen gebruikers of groepen nodig.

Stem het mechanisme af op het doel
Behoefte van de werklastGeschikt mechanismeAfweging om te onderzoeken
Lage gemiddelde doorlooptijd voor batchtakenSJF of STCF met bekende of voorspelde burstsVoorspellingsfouten en uithongering
Snelle bediening van interactief werkPreëmptie met terugkoppeling of eerlijke selectie die rekening houdt met latentieWisselkosten en vertragingen in de staart
Evenredige toegang voor gebruikersTickets, stapgroottes of groepsgewichtenEerlijkheid over korte perioden en verdeling tussen groepen
Lange CPU-gebonden berekeningVoldoende uitvoeringstijd per beurt om wisselingen te amortiserenReactiesnelheid van concurrerend werk
Tijdkritisch apparaatwerkGeschikt realtimebeleidVerstoring van andere taken
Vergelijk beleid met dezelfde invoer

A komt aan op 0 ms en heeft 8 ms nodig, B op 1 ms en heeft 4 ms nodig, en C op 2 ms en heeft 2 ms nodig. Negeer wisselkosten. FIFO voert A, B, C uit. SJF begint ook met A, maar voert daarna C vóór B uit. STCF voert A 0–1, B 1–2, C 2–4, B 4–7, A 7–14 uit. RR gebruikt een tijdkwantum van 2 ms, waarbij taken die op de grens aankomen vóór de taak met de verlopen tijdschijf in de wachtrij komen.

BeleidGemiddelde doorlooptijdGemiddelde responstijd tot eerste uitvoering
FIFO10,33 ms5,67 ms
SJF9,67 ms5 ms
STCF7,33 ms0 ms
RR9 ms1 ms

STCF wint bij deze werklast op beide maatstaven omdat elke nieuw aankomende kortere taak onmiddellijk draait. RR laat taken snel beginnen zonder burstlengtes te kennen. Als even lange taken tegelijk aankomen, kan FIFO een lagere gemiddelde doorlooptijd hebben dan RR. Een rangorde bij één werklast zegt iets over die werklast.

Kies een beoordelingsmethode

Deterministische modellering berekent een vast verloop met de hand. Ze geeft exacte resultaten voor de invoer en maakt beslissingen gemakkelijk te onderzoeken, maar laat vaak dispatch- en cachekosten weg. Wachtrijmodellen beschrijven aankomst- en bedieningspatronen met verdelingen en voorspellen gemiddeld gedrag.

Voor een stabiel systeem in een stationaire toestand verbindt de wet van Little het gemiddelde aantal taken n, de aankomstsnelheid λ en de gemiddelde verblijftijd W:

n=λW

Bij 14 taken/s en een gemiddelde tijd van 0,5 s in het systeem is het gemiddelde aantal 7 taken. Houd de grens consistent: bij het aantal in de gereedwachtrij hoort de wachttijd in die wachtrij, terwijl bij het aantal in het hele systeem de tijd in het hele systeem hoort. Zet eenheden om voordat je vermenigvuldigt.

Simulatie voert een schedulermodel uit, vaak met een geregistreerde werklast. Daarmee kun je ingewikkelde aankomst- en blokkeringspatronen onderzoeken, maar de conclusies hangen af van het model en de gekozen registraties. Implementatie meet de scheduler in een echt besturingssysteem en omvat de werkelijke overhead; dit kost meer moeite en vereist nog steeds representatieve werklasten en herhaalbare metingen.

Bekijk naast gemiddelden ook doorvoer, bezettingsgraad, individuele vertragingen en vertragingen in de staart, eerlijkheid en energiegebruik. Bij een multiprocessor kan een drukke machine de uitvoeringstijd nog steeds ongelijk verdelen of tijd verspillen aan het opnieuw vullen van caches. Vergelijk beleidsvormen met hetzelfde waarnemingsvenster en dezelfde werklast en varieer vervolgens de werklastkenmerken die voor de beoogde gebruikers van belang zijn.

Belangrijkste punten

  • Kies maatstaven die passen bij de werkelijke behoeften van de werklast.
  • Vergelijk beleidsvormen met dezelfde aankomsten en CPU-behoeften.
  • Een rangorde voor één werklast wijst geen universele winnaar aan.
  • De wet van Little vereist een stabiel systeem en overeenkomende grenzen voor aantal en tijd.
  • Simulatie hangt af van het model; implementatie omvat werkelijke overhead.
  • Beoordeel naast gemiddelden ook vertragingen in de staart, eerlijkheid, doorvoer en energiegebruik.

CPU-planning: voorbeelden

6 Walkthroughs

1

Van gereedtoestanden naar gemeten vertragingen

11 stappen
Volg een planningsbeslissing en lees vervolgens respons-, wacht- en doorlooptijd af uit één tijdlijn.
  1. 1
    IntroductieVolg de overdracht van de CPU

    Een draaiende taak start een schijfleesbewerking terwijl een andere taak gereed is. Het besturingssysteem kan die wachtperiode gebruiken om ander werk vooruit te helpen. We volgen eerst de toestandsveranderingen (een taak is gereed, in uitvoering of geblokkeerd) en lezen daarna een korte CPU-tijdlijn om te meten wat elke taak heeft ervaren: respons, wachten en doorlooptijd.

    Houd tijdens het werken twee vragen gescheiden: wie kan nu draaien en welke vertraging moet een maatstaf tellen? Een taak kan snel een eerste beurt krijgen maar toch veel later eindigen.

  2. 2
    UitlegKies uit taken die kunnen worden uitgevoerd

    De scheduler kiest gereedstaand werk. Een draaiende taak heeft al een CPU; een geblokkeerde taak moet op haar gebeurtenis wachten. Wanneer de leesbewerking begint, wordt de aanroeper geblokkeerd en geeft die de CPU vrij. Wanneer de leesbewerking eindigt, wordt de taak weer gereed.

    De voltooide leesbewerking schept een selectiemoment. Of de terugkerende taak onmiddellijk draait, hangt af van het beleid en van ander gereedstaand werk.

  3. 3
    VerbandOnderscheid de keuze van de wisseling

    Het beleid kiest de volgende gereedstaande taak. De dispatcher slaat de oude toestand op, herstelt de gekozen toestand en hervat de uitvoering. De latentie daarvan en het opnieuw vullen van caches voor de volgende taak kosten tijd.

    Een timer kan de besturing teruggeven aan de kernel, ook als een programma de beurt nooit afstaat. Een apparaatinterrupt kan ook werk met voorrang gereedmaken. Bij preëmptie blijft de onderbroken taak behouden voor een latere beurt.

  4. 4
    UitdagingKan de wachtende editor een taak onderbreken?

    Een editor is geblokkeerd in afwachting van invoer terwijl een CPU-gebonden taak draait. De editor heeft hogere prioriteit. Kan de editor de CPU overnemen voordat de invoer aankomt? Leg uit welke toestand van belang is.

    ---reveal---

    Nee. De editor is geblokkeerd en kan niet worden uitgevoerd totdat de invoergebeurtenis plaatsvindt. Nadat invoer de editor gereedmaakt, kan een prioriteitsscheduler met preëmptie de editor kiezen. Prioriteit bepaalt de rangorde van gereedstaand werk; ze neemt de afhankelijkheid van de gebeurtenis niet weg.

  5. 5
    VoorbeeldTeken de uitvoeringsintervallen

    A komt aan op 0 ms en heeft 5 ms nodig, B op 2 ms en heeft 3 ms nodig, en C op 4 ms en heeft 1 ms nodig. Het zijn taken met alleen CPU-gebruik. FIFO zonder wisselkosten voert A 0–5, B 5–8 en daarna C 8–9 uit.

    Noteer de tijdstippen van eerste uitvoering 0, 5 en 8 ms en de voltooiingstijdstippen 5, 8 en 9 ms. Dit zijn tijdstippen. Hierna trekken we de eigen aankomsttijd van elke taak af om er vertragingen van te maken.

  6. 6
    VoorbeeldMeet de vertraging tot voltooiing

    De doorlooptijd loopt van aankomst tot en met voltooiing. Voor de tijdlijn is de doorlooptijd van A 5 ms, die van B 6 ms en die van C 5 ms.

    Het gemiddelde is:

    (5+6+5)/3=16/3≈5,33 ms.

    Het voltooiingstijdstip van B is 8 ms, maar B is slechts 6 ms in het systeem geweest omdat de taak op 2 ms aankwam. Als je elke taak vanaf het begin van de grafiek meet, overschat je de vertragingen van latere aankomsten.

  7. 7
    VoorbeeldMeet de eerste beurt en de totale wachttijd

    De responstijd eindigt wanneer de taak voor het eerst draait. A wacht 0 ms op die eerste beurt, B wacht 3 ms en C wacht 4 ms. Hun gemiddelde responstijd is ongeveer 2,33 ms.

    Hier is de responstijd gelijk aan de totale wachttijd omdat elke taak met alleen CPU-gebruik na selectie zonder onderbreking draait. Bij preëmptie tellen latere intervallen in de gereedtoestand ook als wachttijd. Een geblokkeerd I/O-interval telt mee voor de doorlooptijd, maar niet voor de wachttijd in de gereedwachtrij.

  8. 8
    UitdagingBereken de vertragingen van een onderbroken taak

    Taak R komt aan op 1 ms, draait voor het eerst op 4 ms en eindigt op 15 ms. De taak gebruikt 6 ms CPU-tijd zonder I/O. Bepaal de respons-, doorloop- en wachttijd.

    ---reveal---

    De responstijd is 3 ms en de doorlooptijd is 14 ms. Als je 6 ms uitvoeringstijd van de doorlooptijd aftrekt, krijg je 8 ms totale wachttijd. De eerste 3 ms is slechts een deel van die wachttijd; nog eens 5 ms vindt plaats na de eerste beurt.

  9. 9
    KernpuntMeet de machine en de afzonderlijke taak

    Ons FIFO-voorbeeld voltooit drie taken in 9 ms zonder tijd waarin de CPU niets doet. De doorvoer is ongeveer 333,33 taken/s en de CPU-bezettingsgraad is 100% over dat interval. Deze cijfers voor de hele machine beschrijven niet de ervaring van elke taak.

    Bekijk individuele vertragingen en een hoog percentiel wanneer gebruikers belang hechten aan zeldzame lange wachttijden. Eerlijkheid gaat ook over de vraag of gereedstaand werk uitvoeringstijd krijgt, inclusief taken die achter een gunstig gemiddelde verborgen blijven.

  10. 10
    UitdagingGebruik een geblokkeerd interval correct

    Een taak komt aan op 0 ms, draait van 0–2, wacht op een apparaat van 2–7, wacht gereed van 7–10 en draait van 10–12 om te eindigen. Wat zijn haar respons- en wachttijd?

    ---reveal---

    De responstijd is 0 ms omdat de taak onmiddellijk draait. De wachttijd is 3 ms, het interval in de gereedtoestand van 7–10. De doorlooptijd van 12 ms bevat ook 4 ms CPU-tijd en 5 ms in geblokkeerde toestand. Als je alle 8 ms buiten de CPU-uitvoering “wachttijd” noemt, haal je twee procestoestanden door elkaar.

  11. 11
    SamenvattingControleer de toestand voordat je tijd telt

    Bepaal bij een nieuw voorbeeld welk werk bij elke gebeurtenis gereed is, noteer de uitvoeringsintervallen en lees vervolgens de tijdstippen van eerste uitvoering en voltooiing af. Trek de aankomsttijden af voordat je gemiddelden berekent. Houd geblokkeerde tijd apart wanneer je de wachttijd in de gereedwachtrij meet.

2

Bouw planningen op vanuit de beleidsregel

17 stappen
Vergelijk selectieregels, onderbrekingen, round-robinbeurten en prioriteitsafhankelijkheden met uitgewerkte tijdlijnen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEén werklast, meerdere keuzes
  2. 2
    VoorbeeldBegin met de aankomstvolgorde
  3. 3
    VoorbeeldLaat kort werk eerst eindigen
  4. 4
    UitdagingVoorspel de volgende burst
  5. 5
    VoorbeeldOnderbreek de lange taak voor een kortere aankomst
  6. 6
    VoorbeeldVoltooi het resterende werk
  7. 7
    UitdagingVergelijk met wat resteert
  8. 8
    VerbandLaat geblokkeerd werk capaciteit vrijmaken
  9. 9
    VoorbeeldWissel twee gelijke taken af
  10. 10
    VoorbeeldBereken de voltooiing bij afwisselende beurten
  11. 11
    UitdagingPlaats een aankomst op de tijdschijfgrens
  12. 12
    KernpuntBetaal voor elke overdracht
  13. 13
    VoorbeeldLees de rang voordat je uitvoert
  14. 14
    VoorbeeldVolg de houder van de vergrendeling
  15. 15
    UitdagingKies de nuttige prioriteitsverandering
  16. 16
    UitdagingKies tussen respons en voltooiing
  17. 17
    SamenvattingZet een regel om in een tijdlijn
3

Volg terugkoppeling en herken manipulatie

12 stappen
Volg een taak door wachtrijniveaus en verhelp daarna strategisch afstaan van de beurt en lange wachttijden met registratie en verhogingen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieLeer zonder toekomstige burstlengte te kennen
  2. 2
    UitlegGebruik één wachtrij en twee uitvoeringsgrenzen
  3. 3
    VoorbeeldLaat aanhoudend CPU-gebruik tot een lagere prioriteit leiden
  4. 4
    VoorbeeldGeef de nieuwkomer vroeg een kans
  5. 5
    UitdagingBehoud een onderbroken budget
  6. 6
    VoorbeeldMaak de achterdeur van vroeg afstaan zichtbaar
  7. 7
    VoorbeeldBewaar de gebruiksgeschiedenis
  8. 8
    UitdagingTel alleen CPU-verbruik
  9. 9
    UitlegGeef oud werk een nieuwe kans
  10. 10
    UitdagingOnderscheid de twee oplossingen
  11. 11
    VerbandStel beurten en indeling afzonderlijk af
  12. 12
    SamenvattingVolg de gegevens die de prioriteit veranderen
4

Registreer evenredige CPU-uitvoering

16 stappen
Zet tickets om in kansen en stapgroottes en volg daarna gewogen virtuele voortgang en welke taken bij EEVDF in aanmerking komen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBegin met een aanspraak
  2. 2
    VoorbeeldLees de ticketintervallen
  3. 3
    KernpuntVerwacht variatie over korte perioden
  4. 4
    UitdagingReken een lokale toewijzing om
  5. 5
    VerbandLaat een dienst de aanspraak van de client overnemen
  6. 6
    VoorbeeldBereken stapgroottes uit het omgekeerde van het aantal tickets
  7. 7
    VoorbeeldBreng gewogen voortgang weer samen
  8. 8
    UitdagingPlaats een nieuwe taak bij strideplanning
  9. 9
    UitlegReken werkelijke uitvoering toe in virtuele eenheden
  10. 10
    VoorbeeldVerdeel een beoogde periode
  11. 11
    TipLees nice als invoer voor het gewicht
  12. 12
    VerbandVind het minimum efficiënt
  13. 13
    UitlegBepaal eerst welke taken in aanmerking komen en kijk dan naar deadlines
  14. 14
    UitdagingPas beide EEVDF-vergelijkingen toe
  15. 15
    UitdagingBehoud het aandeel terwijl de verzoekgrootte verandert
  16. 16
    SamenvattingOnderscheid toewijzing van selectie
5

Verdeel CPU-belasting met behoud van nuttige lokaliteit

11 stappen
Onderzoek hardwarekosten, vergelijk wachtrijontwerpen en bepaal wanneer het verplaatsen van gereedstaand werk helpt.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEen tweede CPU voegt een plaatsingskeuze toe
  2. 2
    UitlegHerken het beschikbare parallellisme
  3. 3
    VoorbeeldBehoud een recent gebruikte werkverzameling
  4. 4
    UitdagingBeschermt coherentie de hele wijziging?
  5. 5
    UitlegKies een wachtrijindeling
  6. 6
    VoorbeeldHerken ongelijke uitvoeringstijd op drukke CPU's
  7. 7
    VoorbeeldWissel plaatsingen af voor gelijke uitvoeringstijd
  8. 8
    UitdagingGebruik een ongebruikte CPU volgens de beperkingen
  9. 9
    KernpuntWeeg herstelkosten af tegen bespaarde vertraging
  10. 10
    UitdagingBepaal of de verplaatsing tijd bespaart
  11. 11
    SamenvattingControleer capaciteit, toegestane CPU's en lokaliteit
6

Lees systeeminstellingen en beoordeel een scheduler

15 stappen
Interpreteer het gedrag van Linux en Windows, kies daarna een meetgrens en beoordeel de gegevens.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieLees elke instelling op haar eigen laag
  2. 2
    UitlegControleer de Linux-beleidsklasse
  3. 3
    VoorbeeldOnderscheid aandeel van plaatsing
  4. 4
    VoorbeeldPas groepsgewichten toe bij concurrentie
  5. 5
    UitdagingLees een gezamenlijk quotum
  6. 6
    VerbandHerken de generatie van de scheduler
  7. 7
    UitlegKoppel Windows-instellingen aan de basisrang
  8. 8
    VoorbeeldLaat een tijdelijke verhoging afnemen
  9. 9
    UitdagingControleer het bereik voor verhogingen
  10. 10
    VerbandHerken verwante ideeën van terugkoppeling
  11. 11
    UitlegKies de meting die telt
  12. 12
    VoorbeeldHoud de wet van Little binnen één grens
  13. 13
    UitdagingLeid wachttijd af uit het aantal taken
  14. 14
    UitdagingVerklaar een schijnbare prestatiewinst
  15. 15
    SamenvattingVerbind een instelling met een gemeten effect

CPU-planning: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees beslissingen en volg CPU-uitvoering10 Oefenvragen

Vraag 1 van 10

Een editor wacht op een schijfleesbewerking, een compiler is gereed en een viewer is klaar. Welke taak kan de CPU-scheduler nu kiezen?
  1. De editor.
  2. De compiler.
  3. De viewer.
  4. De editor en de compiler.
Toon antwoordVerberg antwoord
Antwoord: B
De compiler is gereed en kan worden uitgevoerd zodra die wordt gekozen. De editor moet op de schijfgebeurtenis wachten voordat die kandidaat wordt. Onvoltooid werk hebben is niet genoeg: geblokkeerd werk kan de CPU nog niet gebruiken.

Vraag 2 van 10

Een taak met alleen CPU-gebruik komt aan op 4 ms, draait voor het eerst op 9 ms en eindigt op 22 ms na 10 ms CPU-tijd te hebben gebruikt. Wat zijn haar responstijd en totale wachttijd?
  1. Responstijd 9 ms; wachttijd 12 ms.
  2. Responstijd 5 ms; wachttijd 18 ms.
  3. Responstijd 8 ms; wachttijd 5 ms.
  4. Responstijd 5 ms; wachttijd 8 ms.
Toon antwoordVerberg antwoord
Antwoord: D
De responstijd is de vertraging tot de eerste uitvoering: 9 min 4 geeft 5 ms. De doorlooptijd is 22 min 4, oftewel 18 ms, dus de wachttijd is 18 min 10, oftewel 8 ms. Als je de vertraging tot de eerste uitvoering als totale wachttijd gebruikt, mis je de 3 ms die de taak na de eerste dispatch gereed doorbrengt.

Vraag 3 van 10

Drie taken met alleen CPU-gebruik komen tegelijk aan: A heeft 18 ms nodig, B 4 ms en C 8 ms. Wat is hun gemiddelde doorlooptijd bij SJF zonder preëmptie en zonder wisselkosten?
  1. 15,33 ms.
  2. 10,00 ms.
  3. 20,67 ms.
  4. 24,67 ms.
Toon antwoordVerberg antwoord
Antwoord: A
SJF voert B, C en daarna A uit, met voltooiingstijden van 4, 12 en 30 ms. Omdat alle aankomsttijden nul zijn, is hun gemiddelde doorlooptijd 46 gedeeld door 3, oftewel 15,33 ms. Het gemiddelde van de burstlengtes is 10 ms, maar daarin ontbreekt de tijd die taken achter eerder werk doorbrengen.

Vraag 4 van 10

Een burstvoorspeller heeft een schatting van 20 ms en gebruikt voor de nieuwste meting een gewicht van 0,25. De voorspeller meet bursts van 8 ms en daarna 12 ms. Wat is de voorspelling na beide metingen?
  1. 17,00 ms.
  2. 14,00 ms.
  3. 15,75 ms.
  4. 13,50 ms.
Toon antwoordVerberg antwoord
Antwoord: C
De eerste bijwerking is 0,25 keer 8 plus 0,75 keer 20, wat 17 ms geeft. De tweede gebruikt die bijgewerkte schatting: 0,25 keer 12 plus 0,75 keer 17 geeft 15,75 ms. Als je opnieuw de oorspronkelijke schatting van 20 ms gebruikt, gaat het effect van de eerste meting verloren.

Vraag 5 van 10

Taken met alleen CPU-gebruik zijn A (aankomst 0 ms, behoefte 10 ms), B (2 ms, 4 ms) en C (3 ms, 2 ms). Wat is bij STCF de gemiddelde doorlooptijd? Negeer wisselkosten.
  1. 7,00 ms.
  2. 9,33 ms.
  3. 8,00 ms.
  4. 8,67 ms.
Toon antwoordVerberg antwoord
Antwoord: C
A draait van 0–2, B van 2–3, C van 3–5, B van 5–8 en A van 8–16. De doorlooptijden zijn 16, 6 en 2 ms, gemiddeld 8 ms. Als je B laat eindigen voordat je C overweegt, mis je de tweede preëmptie: op 3 ms heeft B nog 3 ms nodig en C slechts 2 ms.

Vraag 6 van 10

Op 0 ms begint taak D een apparaatbewerking van 7 ms en blokkeert. Taak E is gereed en heeft 5 ms CPU-tijd nodig, zonder I/O. Wanneer eindigt E als de CPU geen werk laat liggen en de wisselkosten nul zijn?
  1. Op 7 ms.
  2. Op 12 ms.
  3. Op 2 ms.
  4. Op 5 ms.
Toon antwoordVerberg antwoord
Antwoord: D
E kan de CPU onmiddellijk gebruiken terwijl de apparaatbewerking van D doorgaat, dus de vijf milliseconden uitvoering eindigen op 5 ms. Wachten tot de bewerking van D eindigt zou 12 ms opleveren, maar D is geblokkeerd en bezet de CPU niet. Apparaattijd en CPU-tijd van een andere taak kunnen overlappen.

Vraag 7 van 10

Round-robinplanning gebruikt een tijdkwantum van 3 ms. A komt aan op 0 ms en heeft 7 ms nodig, B op 1 ms en heeft 4 ms nodig, en C op 3 ms en heeft 2 ms nodig. Een taak die op de tijdschijfgrens aankomt, komt vóór de taak met de verlopen tijdschijf in de wachtrij. Wanneer eindigt A? Negeer wisselkosten.
  1. Op 13 ms.
  2. Op 10 ms.
  3. Op 11 ms.
  4. Op 12 ms.
Toon antwoordVerberg antwoord
Antwoord: A
De beurten zijn A 0–3, B 3–6, C 6–8, A 8–11, B 11–12 en A 12–13. A heeft de laatste milliseconde na de laatste beurt van B nodig en eindigt dus op 13 ms. Als je A vóór C plaatst, die op de tijdschijfgrens aankomt, verander je de wachtrij na de eerste tijdschijf ten onrechte.

Vraag 8 van 10

Een herhalende planningscyclus bevat 3,8 ms nuttig CPU-werk, gevolgd door een wisseling van 0,2 ms. Welk deel van de verstreken tijd is wisseloverhead?
  1. 5,26%.
  2. 5%.
  3. 0,05%.
  4. 95%.
Toon antwoordVerberg antwoord
Antwoord: B
De hele cyclus duurt 4 ms, waarvan 0,2 ms wisseltijd is, dus het aandeel is 0,05, oftewel 5%. Als je alleen door de 3,8 ms nuttig werk deelt, krijg je ongeveer 5,26%, maar dat is een verhouding tot het nuttige werk en niet het gevraagde aandeel van de totale verstreken tijd.

Vraag 9 van 10

Gereedstaande taken P, Q, R en S hebben de prioriteiten 7, 2, 5 en 9 volgens de schaal in dit leerboek. Kleinere getallen betekenen hogere prioriteit. Welke taak draait eerst bij prioriteitsplanning?
  1. P.
  2. R.
  3. S.
  4. Q.
Toon antwoordVerberg antwoord
Antwoord: D
Q heeft het kleinste prioriteitsgetal en dus de hoogste rang op deze schaal. Prioriteitsplanning kiest Q vóór P, R of S, ongeacht hun namen. Als je S kiest vanwege het grootste getal, pas je de richting van Windows toe op een schaal die expliciet andersom is gedefinieerd.

Vraag 10 van 10

Een draaiende taak start vrijwillig een leesbewerking en raakt geblokkeerd. Een andere gereedstaande taak wordt gekozen. Vereist deze overdracht planning met preëmptie?
  1. Ja; elke wisseling is preëmptie.
  2. Nee; blokkering geeft de CPU vrij.
  3. Ja; I/O is een timergebeurtenis.
  4. Nee; de geblokkeerde taak draait nog.
Toon antwoordVerberg antwoord
Antwoord: B
Een geblokkeerde taak kan niet verder draaien, dus ook een scheduler zonder preëmptie kan een andere taak kiezen. Bij preëmptie wordt de CPU specifiek afgenomen van een taak die nog kan draaien. Als je elke contextwisseling preëmptie noemt, verwar je het wisselmechanisme met de reden voor de overdracht.
Set 2: Volg prioriteiten, budgetten en terugkoppeling10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een thread met hoge prioriteit wacht op een vergrendeling die een thread met lage prioriteit vasthoudt, terwijl een thread met gemiddelde prioriteit blijft draaien. Hoe heet dit planningsprobleem?
  1. Geleidelijke prioriteitsverhoging.
  2. Round-robinplanning.
  3. Prioriteitsinversie.
  4. Ongelijke CPU-belasting.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een gereedstaande taak begint met prioriteit 12, waarbij kleinere getallen hoger zijn. Geleidelijke prioriteitsverhoging verbetert haar prioriteit met één per 15 ms wachten in de gereedtoestand. Wat is op 90 ms haar rang ten opzichte van een gereedstaande taak met prioriteit 5?
  1. Prioriteit 6; ze staat nog lager.
  2. Prioriteit 5; ze staan nu gelijk.
  3. Prioriteit 6; ze staat nu hoger.
  4. Prioriteit 7; ze staat nog lager.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een MLFQ-niveau heeft een tijdkwantum van 4 ms en een cumulatief budget van 10 ms. Een taak gebruikt 4 ms, later 3 ms en gaat dan verder. Hoeveel CPU-uitvoering resteert voordat haar prioriteit daalt?
  1. 4 ms.
  2. 3 ms.
  3. 6 ms.
  4. 7 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een MLFQ heeft Q2 boven Q1 boven Q0, met op elk niveau tijdkwanta van 4 ms en budgetten van 4 ms. A komt aan op 0 ms en heeft 15 ms nodig; B komt aan op 6 ms en heeft 3 ms nodig. Er zijn geen verhogingen of wisselkosten. Wanneer draait A voor het eerst in Q0?
  1. Op 8 ms.
  2. Op 9 ms.
  3. Op 12 ms.
  4. Op 11 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een taak draait 5 ms, blokkeert 1 ms en herhaalt dat. Haar budget op het hoogste niveau is 8 ms, met cumulatieve CPU-registratie en zonder verhogingen. Tijdens welke CPU-burst daalt haar prioriteit voor het eerst?
  1. Tijdens de tweede burst.
  2. Na de eerste volledige burst.
  3. Tijdens de derde burst.
  4. De hoogste prioriteit blijft onbeperkt behouden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een MLFQ-taak staat in Q1 en heeft 7 ms van haar budget van 12 ms gebruikt. Ze draait 3 ms, blokkeert 5 ms en draait daarna opnieuw. Er vindt geen verhoging plaats. Na hoeveel verstreken tijd vanaf het begin van deze gebeurtenissen daalt haar prioriteit?
  1. Na 5 ms.
  2. Na 8 ms.
  3. Na 13 ms.
  4. Na 10 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een CPU-gebonden taak wachtte in de onderste wachtrij, maar verwerkt nu korte bursts na invoer. Welk MLFQ-mechanisme laat het nieuwe gedrag weer vanaf de top aanleren?
  1. Een langer tijdkwantum onderaan.
  2. Een groter budget onderaan.
  3. Een periodieke prioriteitsverhoging.
  4. Terugzetten bij elke vroege beurtwisseling.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Drie uitvoerbare taken bij loterijplanning hebben 40, 60 en 100 tickets. Wat is de kans dat de tweede taak de volgende trekking wint?
  1. 20%.
  2. 30%.
  3. 40%.
  4. 60%.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een gebruiker heeft 120 globale tickets en geeft de lokale taken L en M 1 en 3 lokale tickets. Een tweede gebruiker heeft 80 globale tickets voor één uitvoerbare taak. Alle taken blijven uitvoerbaar. Wat is het verwachte CPU-aandeel van L in het hele systeem als de eerste gebruiker beide lokale toewijzingen verdubbelt?
  1. 15%.
  2. 25%.
  3. 30%.
  4. 7,5%.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Twee taken bij strideplanning hebben gelijke voortgangswaarden. Taak A heeft 20 tickets en taak B heeft er 40, met strideconstante 800. Met hoeveel stijgt de voortgangswaarde van A nadat A één tijdschijf heeft gekregen?
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Volg de registratie van tickets en virtuele tijd10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Taken A, B en C bij loterijplanning hebben in die volgorde 35, 25 en 40 tickets. De ticketnummering begint bij nul. Welke taak wint bij een trekking van 60?
  1. A.
  2. B.
  3. B en C staan gelijk.
  4. C.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een taak bij loterijplanning heeft 20% van alle tickets van uitvoerbare taken en wint 2 van de eerste 20 gelijke tijdschijven. Wat kun je over dit resultaat concluderen?
  1. Haar ticketaandeel moet nu 10% zijn.
  2. Het kan bij een eerlijke trekking voorkomen.
  3. Haar volgende twee overwinningen zijn gegarandeerd.
  4. De loterij moet verkeerd zijn geïmplementeerd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Gebruiker X heeft 180 globale tickets, lokaal verdeeld als A:2 en B:1. Gebruiker Y heeft 120 globale tickets voor C. Alle drie de taken zijn uitvoerbaar. X verandert alleen het lokale aantal van A van 2 naar 5. Wat is het nieuwe verwachte systeemaandeel van B?
  1. 20%.
  2. 16,67%.
  3. 10%.
  4. 8,33%.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Taken A, B en C bij strideplanning hebben 30, 60 en 20 tickets, met constante 600 en alle voortgangswaarden aanvankelijk op nul. Gebruik bij gelijke waarden de alfabetische volgorde. Wat is de eerste selectiereeks van zes taken?
  1. A, B, C, B, A, B.
  2. A, B, C, A, B, C.
  3. A, B, C, B, C, A.
  4. A, B, C, B, B, A.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Bestaande voortgangswaarden bij strideplanning zijn 420, 440 en 460. Een nieuwe taak krijgt als beginwaarde de huidige minimale voortgangswaarde. Wat is haar beginwaarde?
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Taken A en B bij strideplanning hebben stapgroottes 15 en 40 en beginnen beide met voortgangswaarde nul. Gebruik bij gelijke waarden de alfabetische volgorde. Hoeveel tijdschijven heeft A gekregen wanneer hun voortgangswaarden voor het eerst weer gelijk zijn?
  1. 3 tijdschijven.
  2. 8 tijdschijven.
  3. 5 tijdschijven.
  4. 11 tijdschijven.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een klassiek CFS-model heeft taakgewichten 1024 en 512 en een beoogde periode van 30 ms, zonder actieve beperking door minimale granulariteit. Welke nominale tijdschijf krijgt de lichtere taak?
  1. 5 ms.
  2. 15 ms.
  3. 20 ms.
  4. 10 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een taak met gewicht 256 draait 2 werkelijke ms in een klassiek CFS-model. Hoeveel virtuele uitvoeringstijd krijgt ze erbij?
  1. 0,5 virtuele ms.
  2. 2 virtuele ms.
  3. 8 virtuele ms.
  4. 4 virtuele ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Bij een EEVDF-beslissing heeft A achterstand −1 en virtuele deadline 6, B heeft achterstand 2 en deadline 12, en C heeft achterstand 0 en deadline 9. Welke taak draait als volgende?
  1. A.
  2. C.
  3. B.
  4. A en C staan gelijk.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Twee altijd uitvoerbare taken met gelijk gewicht in de eerlijke klasse concurreren op één CPU. Eén vraagt kortere EEVDF-tijdschijven aan. Wat zou kunnen veranderen zonder haar gewicht te veranderen?
  1. Haar aandeel verdubbelt; haar latentie blijft gelijk.
  2. Haar aandeel krimpt; haar deadlines blijven gelijk.
  3. Haar latentie blijft gelijk; haar aandeel wordt willekeurig.
  4. Haar latentie kan verbeteren; haar aandeel blijft gelijk.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Plaats werk en interpreteer Linux-instellingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een programma heeft één uitvoerbare thread en geen hulpprocessen. Hoeveel logische CPU's kunnen die thread op hetzelfde moment uitvoeren?
  1. Eén.
  2. Twee.
  3. Alle CPU's in het affiniteitsmasker.
  4. Alle CPU's die de cache delen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Twee CPU's lezen elk een gedeelde wachtrijlengte, wijzigen een vermelding en schrijven daarna een bijgewerkte lengte. Hun caches zijn coherent. Wat is nog meer nodig om de wijziging te beschermen?
  1. De cache vóór elke wachtrijlezing leegmaken.
  2. Een langer tijdkwantum voor elke taak.
  3. Synchronisatie over de hele wachtrijbewerking.
  4. Alleen een dubbele eigen wachtrijlengte.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Twee identieke CPU's bedienen gelijke CPU-gebonden taken A, B en C. Gedurende 12 ms draait A alleen terwijl B en C de andere CPU gelijk delen. De volgende 6 ms draait B alleen terwijl A en C delen; de laatste 6 ms draait C alleen terwijl A en B delen. Wat is na 24 ms de grootste min de kleinste CPU-uitvoeringstijd per taak, als je kosten negeert?
  1. 0 ms.
  2. 6 ms.
  3. 12 ms.
  4. 3 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Drie taken met alleen CPU-gebruik zijn gereed op 0 ms: A heeft 8 ms nodig, B 2 ms en C 6 ms. A en B mogen alleen op CPU 1 draaien; C mag op CPU 0 of 1 draaien. Beide CPU's zijn identiek en laten geen werk liggen, met lokale SJF en kosteloze migratie. Wat is de laagst haalbare gemiddelde doorlooptijd?
  1. 5,33 ms.
  2. 6 ms.
  3. 8 ms.
  4. 8,67 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een programma wordt vanuit een shell met nice 0 gestart met nice -n 8 ./worker. Wat verandert het commando bij normale eerlijke planning met drukke concurrerende taken?
  1. Het werkproces krijgt meer voorrang.
  2. Het werkproces krijgt minder voorrang.
  3. Het werkproces krijgt realtimeprioriteit 8.
  4. Het werkproces wordt beperkt tot 8% van één CPU.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Twee nevencgroups delen één CPU. A heeft gewicht 300 en een quotum van 40 ms per 100 ms; B heeft gewicht 100 en geen quotum. Beide zijn altijd bezig. Negeer overhead. Welke gemiddelde verdeling is haalbaar over volledige quotumperioden?
  1. A 75%; B 25%.
  2. A 40%; B 25%.
  3. A 40%; B 60%.
  4. A 30%; B 70%.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een cgroup heeft cpu.max ingesteld op “60000 100000”. Aan het begin van een nieuwe periode draaien twee threads daarin gelijktijdig op twee CPU's. Na hoeveel verstreken uitvoeringstijd putten ze het budget uit?
  1. 30 ms.
  2. 60 ms.
  3. 100 ms.
  4. 120 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Twee gereedstaande Linux-realtimetaken kunnen op dezelfde CPU draaien: de ene gebruikt SCHED_FIFO met prioriteit 35, de andere SCHED_RR met prioriteit 45. Welke heeft meer voorrang?
  1. De FIFO-taak met prioriteit 35.
  2. Geen van beide; ze delen de CPU.
  3. De taak met de laagste nice-waarde.
  4. De RR-taak met prioriteit 45.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een Windows-thread heeft basisprioriteit 10 en wordt verhoogd naar dynamische prioriteit 14. De thread gebruikt daarna drie volledige tijdkwanta zonder verdere verhogingen. Wat is haar dynamische prioriteit?
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een stabiele gereedwachtrij ontvangt 250 taken/s en bevat gemiddeld 5 wachtende taken. Elke taak gebruikt na het verlaten van de wachtrij 8 ms CPU-tijd, zonder andere vertraging. Wat is de gemiddelde tijd van aankomst tot voltooiing?
  1. 28 ms.
  2. 20 ms.
  3. 8 ms.
  4. 12 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Vergelijk systeemgedrag en beoordeel gegevens10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een Windows-proces heeft prioriteitsklasse normaal en een thread met relatief niveau hoogste. Welke basisprioriteit heeft die combinatie?
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een Windows-thread heeft basisprioriteit 18 en een wachtperiode op toetsenbordinvoer eindigt. Verhoogt het normale mechanisme voor dynamische prioriteitsverhoging de prioriteit?
  1. Ja; toetsenbordinvoer geeft altijd een verhoging.
  2. Nee; de basis ligt in het realtimebereik.
  3. Nee; alleen CPU-gebonden threads krijgen verhogingen.
  4. Ja; de basis wordt blijvend 31.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Taken A en B met alleen CPU-gebruik komen tegelijk aan en hebben 6 ms en 2 ms nodig. Bij gelijke waarden plaatst de alfabetische volgorde A eerst bij FIFO en RR. Vergelijk FIFO met RR van 2 ms en negeer wisselkosten. Hoe verandert RR de gemiddelde respons- en doorlooptijd?
  1. De responstijd verbetert 2 ms; de doorlooptijd verbetert 1 ms.
  2. De responstijd verbetert 1 ms; de doorlooptijd verslechtert 2 ms.
  3. De responstijd verbetert 2 ms; de doorlooptijd verslechtert 1 ms.
  4. De responstijd verslechtert 2 ms; de doorlooptijd verbetert 1 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een stabiel systeem bevat gemiddeld 6 taken en voltooit 15 taken/s, gelijk aan de aankomstsnelheid. Wat is de gemiddelde verblijftijd?
  1. 2,50 s.
  2. 0,90 s.
  3. 0,10 s.
  4. 0,40 s.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Twee RR-ontwerpen gebruiken nuttige tijdkwanta van 0,9 ms en 4,9 ms. Op elk volledig tijdkwantum volgt een wisseling van 0,1 ms. Nuttige uitvoering voltooit 2 records per CPU-milliseconde. Welk ontwerp haalt minstens 1.900 records/s en welke doorvoer bereikt het? Neem aan dat volledige tijdkwanta zich voortdurend herhalen.
  1. Het ontwerp van 0,9 ms; 2.000 records/s.
  2. Beide ontwerpen; elk 2.000 records/s.
  3. Het ontwerp van 4,9 ms; 1.900 records/s.
  4. Het ontwerp van 4,9 ms; 1.960 records/s.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een MLFQ gebruikt twee wachtrijen. Het tijdkwantum en budget bovenaan zijn 3 ms; het tijdkwantum onderaan is 6 ms. Op 0 ms worden A en B in die volgorde naar boven verhoogd, met nog 10 ms en 4 ms nodig. Er zijn geen aankomsten, verdere verhogingen of kosten. Wanneer eindigt B?
  1. Op 7 ms.
  2. Op 10 ms.
  3. Op 13 ms.
  4. Op 14 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Na een migratie duurt het 2 ms om nuttige cache-inhoud te herstellen. In de huidige wachtrij blijven betekent 9 ms wachten; verplaatsen naar een geschikte ongebruikte CPU geeft geen andere vertraging. Welk direct voordeel in wacht- en hersteltijd biedt migratie?
  1. 7 ms.
  2. 11 ms.
  3. 9 ms.
  4. 2 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Twee altijd uitvoerbare eerlijke taken hebben gewichten 2048 en 1024 op één CPU. Elke taak krijgt uitvoeringstijd totdat beide vanaf gelijke beginwaarden 12 virtuele ms erbij hebben gekregen. Hoeveel werkelijke CPU-uitvoeringstijd heeft de zwaardere taak gekregen?
  1. 6 ms.
  2. 24 ms.
  3. 12 ms.
  4. 36 ms.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een actieve sched_ext BPF-scheduler laat een uitvoerbare taak vastlopen en de kernel detecteert de fout. Welk herstel biedt de interface?
  1. De scheduler actief houden en alle nice-gewichten verhogen.
  2. Elke betrokken taak naar SCHED_FIFO verplaatsen.
  3. De scheduler afbreken en ingebouwde eerlijke planning herstellen.
  4. De taken blokkeren tot het BPF-beleid opnieuw is geladen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Beleid X geeft een lagere gemiddelde responstijd dan beleid Y, maar één lange gereedstaande taak draait bij X nooit tijdens een aanhoudende stroom korte aankomsten. Welke extra eigenschap moet worden onderzocht?
  1. Bestendigheid tegen uithongering.
  2. Nauwkeurigheid van aankomsttijden.
  3. Gelijke programmagroottes.
  4. Piekdoorvoer van apparaten.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

87 Kernbegrippen, elk met een definitie

A

Achterstand
Achterstand is het verschil tussen de CPU-uitvoering waarop een taak aanspraak heeft en de uitvoering die ze heeft gekregen, waarbij een positieve achterstand aangeeft dat ze uitvoeringstijd tegoed heeft.
Een taak met negatieve achterstand heeft al extra uitvoeringstijd gekregen en komt bij EEVDF niet in aanmerking.
Amortisatie
Amortisatie spreidt vaste kosten over voldoende nuttig werk, zodat die kosten een kleiner deel van de totale tijd worden.
Langere uitvoeringsbeurten verbeteren de amortisatie van de kosten voor het opnieuw vullen van caches na een wisseling.
Apparaatinterrupt
Een apparaatinterrupt signaleert een gebeurtenis zoals de voltooiing van I/O, zodat de kernel wachtend werk weer gereed kan maken.
Een apparaatinterrupt die meldt dat de leesbewerking van een editor is voltooid, brengt die editor van geblokkeerd naar gereed.

B

Basisprioriteit
De basisprioriteit van een Windows-thread is haar uitgangsrang, verkregen door de prioriteitsklasse van het proces te combineren met het relatieve threadniveau.
De procesklasse normaal en het threadniveau hoogste geven een Windows-basisprioriteit van 10.

C

Cacheaffiniteit
Cacheaffiniteit is de voorkeur om een taak dicht bij haar recente CPU-plaatsing uit te voeren, zodat ze aanwezige cachegegevens en vertalingen kan hergebruiken.
Cacheaffiniteit kan kern 2 bevoordelen na een korte onderbreking van een thread die daar aan het sorteren was.
Cachecoherentie
Cachecoherentie houdt gecachte kopieën van afzonderlijke geheugenlocaties consistent tussen processorkernen, zonder bewerkingen met meerdere stappen atomair te maken.
Cachecoherentie kan een wijziging van een gedeelde wachtrij met meerdere instructies niet beschermen tegen schadelijke vervlechting.
CFS
CFS is de klassieke eerlijke scheduler van Linux, geïntroduceerd in 2.6.23, waarvan de taakselectie de kleinste gewogen virtuele uitvoeringstijd bevoordeelt.
CFS rekent een lichtere taak meer virtuele uitvoeringstijd toe voor dezelfde hoeveelheid werkelijke CPU-uitvoering.
Controlegroep
Een controlegroep is een Linux-groepering van processen of threads waarop controllers beleid voor toewijzing en verbruik van bronnen toepassen.
Met een controlegroep kan het CPU-budget van een dienst meerdere samenwerkende werkprocessen omvatten.
CPU-affiniteit
CPU-affiniteit beperkt of bevoordeelt de processoren waarop een taak wordt uitgevoerd; een expliciet masker geeft aan welke CPU's zijn toegestaan.
CPU-affiniteit die beperkt is tot kern 0 verklaart waarom de gereedstaande taak de ongebruikte kern 1 niet kan gebruiken.
CPU-bezettingsgraad
De CPU-bezettingsgraad is het deel van een waarnemingsinterval waarin een CPU bezig is; daarin kan kerneloverhead zijn opgenomen.
Een CPU met een lange gereedwachtrij bereikt een CPU-bezettingsgraad van 100%, ook al krijgen meerdere taken een slechte respons.
CPU-burst
Een CPU-burst is een aaneengesloten periode van berekeningen tussen wachtperioden of voltooiing, waarmee wordt beschreven hoeveel CPU-uitvoering een taak vraagt.
De CPU-burst van een teksteditor na invoer kan veel korter zijn dan een burst van een video-encoder.
CPU-gebonden taak
Een CPU-gebonden taak heeft lange perioden van berekeningen nodig, met relatief weinig wachtperioden op invoer of apparaten tussen CPU-bursts.
Een CPU-gebonden taak zoals videocodering kan elke beschikbare beurt langdurig gebruiken.
CPU-scheduler
Een CPU-scheduler is het onderdeel van het besturingssysteem dat kiest welk gereed proces of welke gereedstaande thread als volgende op een CPU wordt uitgevoerd.
De CPU-scheduler kiest de editor nadat een voltooide leesbewerking de volgende burst gereedmaakt.
CPU-tijdbudget
Een CPU-tijdbudget is de totale CPU-uitvoering die een taak op een MLFQ-niveau mag verbruiken voordat haar prioriteit daalt, eventueel over meerdere beurten.
Het budget van 15 ms staat drie volledige tijdkwanta van 5 ms op hetzelfde prioriteitsniveau toe.
cpu.max
De instelling cpu.max begrenst de gezamenlijke CPU-uitvoering van een cgroup-v2-groep binnen elke ingestelde bandbreedteperiode.
Een cpu.max-quotum kan een groep afremmen nadat haar werkthreads samen het budget van de periode hebben verbruikt.
cpu.weight
De instelling cpu.weight geeft een cgroup-v2-groep een relatief gewicht voor eerlijke uitvoering wanneer die concurreert met actieve nevengroepen.
Een dienst met cpu.weight 300 dingt mee naar ongeveer drie keer zoveel uitvoeringstijd als een actieve nevengroep met 100.
Cumulatieve gebruiksregistratie
Cumulatieve gebruiksregistratie telt het CPU-gebruik van een taak over beurten op één prioriteitsniveau op, zodat blokkeren of de beurt afstaan verbruikt budget niet kan wissen.
Cumulatieve gebruiksregistratie verlaagt de prioriteit van de taak, ook al duurt geen van haar afzonderlijke bursts een volledig tijdkwantum.

D

Deterministische modellering
Deterministische modellering beoordeelt planningsbeleid voor één vaste werklast met opgegeven aankomsttijden, behoeften en gemodelleerde kosten.
Deterministische modellering maakt elke planningskeuze controleerbaar, maar levert alleen resultaten voor dat verloop.
Dienstkwaliteit
Dienstkwaliteit is een indeling naar de urgentie van werk die macOS gebruikt om uitvoeringsbeslissingen te sturen, waaronder plaatsing over soorten processorkernen.
De dienstkwaliteit voor achtergrondwerk geeft op Apple silicon een andere urgentie aan dan gebruikersinteractief werk.
Dispatcher
De dispatcher is het mechanisme dat een planningskeuze uitvoert door de toestand van taken op te slaan en te herstellen en de uitvoering te hervatten.
De dispatcher herstelt de registers van de gekozen thread voordat die naar de gebruikerscode terugkeert.
Dispatchlatentie
Dispatchlatentie is de vertraging die optreedt bij het overdragen van CPU-uitvoering van de ene taak naar de door de scheduler gekozen taak.
Een korter tijdkwantum maakt dispatchlatentie een groter deel van elke uitvoeringscyclus.
Doorlooptijd
Doorlooptijd is de verstreken tijd vanaf de aankomst van een taak tot haar voltooiing, inclusief uitvoering, wachten in de gereedtoestand en geblokkeerde tijd.
Een batchtaak die slechts 7 ms CPU-uitvoering gebruikt maar 18 ms na aankomst eindigt, heeft een doorlooptijd van 18 ms.
Doorvoer
Doorvoer is het aantal taken dat per eenheid verstreken tijd wordt voltooid tijdens een opgegeven waarnemingsinterval.
Een test die twee beleidsvormen vergelijkt, rapporteert voor elk de doorvoer in taken per seconde over hetzelfde interval.
Dynamische prioriteit
De dynamische prioriteit van een Windows-thread is haar huidige planningsrang, die in het variabele bereik tijdelijk boven de basis kan stijgen.
De dynamische prioriteit van de thread daalt na elk volledig verhoogd tijdkwantum richting de basis.

E

EEVDF
EEVDF is een selectiemethode voor de eerlijke klasse die de vroegste virtuele deadline kiest uit taken die in aanmerking komen omdat ze niet voorliggen op hun aanspraak.
EEVDF kan een kort verzoek dat in aanmerking komt bevoordelen zonder het gewogen aandeel van de taak op lange termijn te vergroten.
Evenredig aandeel
Een evenredig aandeel is een beoogd deel van de betwiste CPU-uitvoering dat via een relatieve aanspraak aan een taak of groep wordt toegekend.
De dienst krijgt een groter evenredig aandeel wanneer haar gewicht stijgt ten opzichte van een actieve nevengroep.
Exponentiële middeling
Exponentiële middeling voorspelt een volgende CPU-burst door een vast deel van de nieuwste meting te combineren met de vorige schatting.
Bij exponentiële middeling laat een groter gewicht voor de meting voorspellingen sneller op nieuwe bursts reageren.

F

FIFO
FIFO is beleid zonder preëmptie dat gereedstaande taken in aankomstvolgorde kiest en een draaiende CPU-burst laat doorgaan totdat die eindigt of de CPU-beurt afstaat.
Bij FIFO wacht een korte nieuw aangekomen burst achter de lange burst die al wordt uitgevoerd.

G

Geblokkeerde toestand
De geblokkeerde toestand is de toestand van een taak die pas verder kan wanneer een gebeurtenis plaatsvindt, zoals de voltooiing van een I/O-verzoek.
De editor komt in de geblokkeerde toestand terwijl die op de volgende toetsenbordgebeurtenis wacht.
Geleidelijke prioriteitsverhoging
Geleidelijke prioriteitsverhoging is een geleidelijke verbetering van de prioriteit van een wachtende taak, bedoeld om lang wachtend werk te laten concurreren en uithongering tegen te gaan.
Geleidelijke prioriteitsverhoging brengt een lang wachtende batchtaak dichter bij de rang van voorgrondwerk dat blijft aankomen.
Gereedtoestand
De gereedtoestand is de toestand van een taak die kan worden uitgevoerd maar wacht om voor een beschikbare CPU te worden gekozen.
Een onderbroken compiler keert terug naar de gereedtoestand terwijl een andere taak de CPU gebruikt.

I

I/O-gebonden taak
Een I/O-gebonden taak heeft vaak korte CPU-bursts met daartussen wachtperioden op apparaten of invoer en heeft vaak snelle uitvoering nodig zodra ze gereed wordt.
Een I/O-gebonden taak zoals een editor kan na elke toetsaanslag kort draaien en daarna weer blokkeren.
Interactieve taak
Een interactieve taak reageert vaak op invoer of andere gebeurtenissen met korte CPU-bursts, gescheiden door wachtperioden.
Een interactieve taak kan het grootste deel van de verstreken tijd geblokkeerd zijn en toch na elke invoer snelle uitvoering nodig hebben.
Interval tussen prioriteitsverhogingen
Het interval tussen prioriteitsverhogingen is de verstreken tijd tussen prioriteitsverhogingen voor de hele MLFQ, waarbij nieuwe kansen worden afgewogen tegen nuttige scheiding van prioriteiten.
Een zeer kort interval tussen prioriteitsverhogingen brengt lange berekeningen steeds terug naar de interactieve wachtrijen.

K

Konvooi-effect
Het konvooi-effect is de vertraging van korte taken die achter een lange CPU-burst in de wachtrij staan, wat slechte gemiddelde voltooiingstijden oplevert.
Het konvooi-effect is zichtbaar wanneer meerdere heel kleine taken pas na de eerste grote taak eindigen.
Kortste taak eerst
Kortste taak eerst is beleid zonder preëmptie dat de gereedstaande taak met de kortste bekende of voorspelde volgende CPU-burst kiest.
Kortste taak eerst kiest een gereedstaande burst van 3 ms vóór een gereedstaande burst van 11 ms.

L

Langetermijnscheduler
Een langetermijnscheduler bepaalt welke ingediende taken een systeem binnenkomen en beïnvloedt daarmee de mate van multiprogrammering.
De langetermijnscheduler van een cluster laat een nieuwe batchtaak toe wanneer capaciteit beschikbaar komt.
Lokaal ticketsysteem
Een lokaal ticketsysteem verdeelt de vaste globale aanspraak van een gebruiker over lokale taken door lokale ticketfracties om te rekenen naar globale tickets.
Met een lokaal ticketsysteem kan één gebruiker een vaste toewijzing van 80 tickets over drie lokale taken verdelen.
Loterijplanning
Loterijplanning kiest elke volgende CPU-tijdschijf via een willekeurige tickettrekking en geeft uitvoerbare taken winkansen die evenredig zijn met hun tickets.
Loterijplanning kan een taak met 60 tickets minder dan zes overwinningen in haar eerste tien trekkingen geven.

M

Manipulatie van de scheduler
Manipulatie van de scheduler is het opzettelijk beïnvloeden van waargenomen gedrag om uitvoeringsvoordelen te krijgen die het beleid niet bedoeld was te geven.
Manipulatie van de scheduler slaagt wanneer een regel voor vroeg afstaan de CPU-tijd vóór elke I/O-bewerking vergeet.
Middellangetermijnscheduler
Een middellangetermijnscheduler schort volledige processen tijdelijk op door ze uit het geheugen te wisselen en later terug te plaatsen.
Een middellangetermijnscheduler kan de geheugendruk verminderen door een proces tijdelijk op te schorten.
Migratie
Migratie verplaatst de uitvoering van een taak tussen CPU's, vaak om ongelijke belasting te corrigeren ten koste van cache- en geheugenlokaliteit.
Migratie naar een geschikte ongebruikte CPU kan meer wachttijd besparen dan het opnieuw vullen van caches kost.
Minimale granulariteit
Minimale granulariteit is de ondergrens voor de schaal van uitvoeringsbeurten in klassieke CFS, die voorkomt dat veel uitvoerbare taken buitensporig korte tijdschijven veroorzaken.
Minimale granulariteit kan bij sterke concurrentie de totale planningsperiode boven de beoogde waarde laten uitkomen.
MLFQ
Een MLFQ is een scheduler met meerdere prioriteitswachtrijen die de wachtrij van een taak verandert op basis van waargenomen CPU-verbruik en terugkoppeling.
De MLFQ laat de nieuwkomer bovenaan beginnen en verlaagt de prioriteit na aanhoudend CPU-gebruik.
MQMS
MQMS is multiprocessorplanning met lokale gereedwachtrijen per CPU, die schaalbare lokale selectie ondersteunt maar verdeling van de belasting vereist.
Bij MQMS kan één CPU niets doen terwijl twee gereedstaande taken aan een andere CPU toegewezen blijven.

N

Nice-waarde
Een nice-waarde is een voor gebruikers instelbare prioriteitsinvoer voor normale Linux-taken, van −20, met de meeste voorrang, tot +19, met de minste voorrang.
Een grotere nice-waarde verlaagt het relatieve CPU-aandeel van een normale taak wanneer concurrenten uitvoerbaar zijn.
NUMA
NUMA is een geheugenarchitectuur waarbij de toegangslatentie afhangt van de vraag of geheugen lokaal is voor de uitvoerende processor of op een andere knoop staat.
NUMA-plaatsing is van belang wanneer een gemigreerde thread herhaaldelijk geheugen op de vorige socket aanspreekt.

O

Ongelijke belasting
Ongelijke belasting is een ongelijke verdeling van uitvoerbare vraag over CPU's, waardoor capaciteit verloren kan gaan of vergelijkbare taken ongelijke uitvoeringstijd kunnen krijgen.
Ongelijke belasting ontstaat wanneer één taak een hele CPU krijgt terwijl twee andere een andere CPU delen.
Overlap van I/O en CPU-uitvoering
Overlap van I/O en CPU-uitvoering ontstaat wanneer de CPU één taak uitvoert terwijl een door een andere taak aangevraagde apparaatbewerking nog bezig is.
Door overlap van I/O en CPU-uitvoering kan de compiler vooruitgaan tijdens de schijfleesbewerking van de editor.

P

Preëmptie
Preëmptie is het afnemen van de CPU van een draaiende taak die had kunnen doorgaan, waarbij haar toestand voor latere hervatting behouden blijft.
Door preëmptie via een timer kan een andere gereedstaande thread draaien voordat de berekening eindigt.
Prioriteitsinversie
Prioriteitsinversie treedt op wanneer werk met hoge prioriteit wacht op een afhankelijkheid met lagere prioriteit die door uitvoering met gemiddelde prioriteit kan worden vertraagd.
Door prioriteitsinversie blijft de urgente taak geblokkeerd terwijl werk met gemiddelde prioriteit de houder van haar vergrendeling onderbreekt.
Prioriteitsklasse
Een Windows-prioriteitsklasse is een instelling op procesniveau die samen met het relatieve niveau van elke thread haar basisprioriteit bepaalt.
Als de prioriteitsklasse van het proces verandert, verandert hoe de threadniveaus aan basisprioriteiten worden gekoppeld.
Prioriteitsovererving
Prioriteitsovererving geeft een houder van een vergrendeling tijdelijk de prioriteit van een taak met hogere prioriteit die op die vergrendeling wacht.
Prioriteitsovererving laat de houder met lage rang lang genoeg draaien om de benodigde vergrendeling vrij te geven.
Prioriteitsplanning
Prioriteitsplanning kiest de gereedstaande taak met de hoogste rang en gebruikt een andere regel zoals FIFO of round-robinplanning om gelijke rangen af te handelen.
Prioriteitsplanning voert een nieuw gereedstaande urgente taak vóór gewoon werk uit op een systeem met preëmptie.
Prioriteitsverhoging
Een prioriteitsverhoging verhoogt tijdelijk de planningsrang; een verhoging voor de hele MLFQ brengt taken terug naar boven zodat hun gedrag opnieuw kan worden geleerd.
De prioriteitsverhoging geeft de oude taak uit de onderste wachtrij een nieuwe kans om bovenaan te draaien.
Prioriteitsverlaging
Prioriteitsverlaging is de verplaatsing naar een MLFQ-niveau met lagere prioriteit nadat een taak het uitvoeringsbudget van haar huidige niveau heeft verbruikt.
Door prioriteitsverlaging komt de lange berekening achter nieuw gereedstaand werk in een hogere wachtrij te staan.

R

Registratie van de werklast
Een registratie van de werklast is een vastgelegde reeks gebeurtenissen zoals aankomsten, bursts en wachtperioden die als invoer voor een planningsexperiment kan dienen.
Een registratie van de werklast bij interactief gebruik kan vertragingen blootleggen die ontbreken in een batchtest met alleen CPU-gebruik.
Responstijd
Responstijd in een planningsverloop is het interval vanaf de aankomst van een taak tot haar eerste CPU-uitvoering, vóór eventuele latere wachtperioden.
Een editor kan een korte responstijd hebben, ook als de volledige bewerking veel later eindigt.
Resterende uitvoeringstijd
Resterende uitvoeringstijd is de CPU-uitvoering die een taak of burst nog nodig heeft na aftrek van de uitvoeringstijd die al is ontvangen.
De scheduler vergelijkt de resterende uitvoeringstijd van de draaiende taak met de volledige burst van de nieuwkomer.
Rood-zwartboom
Een rood-zwartboom is een gebalanceerde zoekboom; klassieke CFS ordent uitvoerbare taken in de wachtrij binnen zo'n structuur op virtuele uitvoeringstijd.
De rood-zwartboom ondersteunt bijwerkingen in logaritmische tijd, terwijl een in de cache bewaarde pointer snel het minimum levert.
Round-robinplanning
Round-robinplanning is beleid dat gereedstaande taken door een FIFO-wachtrij laat rouleren en elke taak maximaal één tijdkwantum geeft voordat die opnieuw in de wachtrij wordt geplaatst.
Bij round-robinplanning krijgt een rapportgenerator die nog werk heeft een nieuwe beurt nadat de andere gereedstaande taken draaien.
Ruimtelijke lokaliteit
Ruimtelijke lokaliteit is de neiging van een programma om gegevens dicht bij recent gebruikte locaties te gebruiken, zoals naburige elementen van een array.
Ruimtelijke lokaliteit helpt bij het sequentieel doorlopen van een array te profiteren van het ophalen van een hele cacheregel.

S

sched_ext
Met de klasse sched_ext kan een daarvoor geconfigureerde Linux-kernel een dynamisch geladen BPF-scheduler uitvoeren, met herstel naar ingebouwde planning bij een fout.
Een fout in het actieve sched_ext-beleid zorgt dat de kernel de gewone eerlijke planning herstelt.
SCHED_FIFO
SCHED_FIFO is Linux-realtimebeleid zonder tijdkwantum voor gelijke prioriteiten; taken gaan door totdat ze blokkeren, de beurt afstaan of door een hogere prioriteit worden onderbroken.
Een SCHED_FIFO-taak met prioriteit 40 kan vóór normaal werk draaien zolang ze uitvoerbaar blijft.
SCHED_RR
SCHED_RR is Linux-realtimeplanning die afwisseling op basis van een tijdkwantum toevoegt voor gereedstaande taken met dezelfde statische prioriteit.
SCHED_RR laat twee taken met prioriteit 50 elkaar afwisselen, terwijl prioriteit 60 elk van beide kan onderbreken.
Simulatie
Simulatie beoordeelt een scheduler door een model uit te voeren op synthetische werklasten of geregistreerde gebeurtenissen en het resulterende gedrag te meten.
Simulatie kan dezelfde registratie van aankomsten en blokkeringen opnieuw afspelen voor twee beleidsvormen.
SMP
SMP is een multiprocessorontwerp waarin CPU's code van het besturingssysteem kunnen uitvoeren en zelf planningsbeslissingen kunnen nemen.
Een SMP-kernel coördineert gelijktijdige wijzigingen in de gereedwachtrij door meerdere CPU's.
SMT
Met SMT kunnen meerdere logische CPU's de uitvoeringsbronnen van één fysieke processorkern delen, zodat parallelle instructiestromen gedeelde capaciteit gebruiken.
Twee CPU-gebonden threads op logische SMT-CPU's van dezelfde kern concurreren directer dan threads op afzonderlijke kernen.
SQMS
SQMS is multiprocessorplanning via één gedeelde gereedwachtrij, waardoor werk gemakkelijk te verdelen is maar kosten voor gedeelde synchronisatie ontstaan.
SQMS kan een geschikte ongebruikte CPU de volgende wachtende taak geven zonder afzonderlijke wachtrijen te doorzoeken.
Staartlatentie
Staartlatentie beschrijft vertragingen aan de langzame kant van een responstijdverdeling en wordt vaak met een hoog percentiel gerapporteerd.
De staartlatentie van de dienst verslechtert wanneer een klein aantal verzoeken veel langer dan gemiddeld wacht.
Stapgrootte
Een stapgrootte is een gemeenschappelijke constante gedeeld door het aantal tickets van een taak, die bij haar voortgangswaarde wordt opgeteld nadat de taak een tijdschijf uitvoering heeft gekregen.
Een kleinere stapgrootte laat de voortgangswaarde van de bevoordeelde taak na elke gekozen beurt langzamer stijgen.
STCF
STCF is beleid met preëmptie dat de gereedstaande taak met de kleinste resterende CPU-behoefte uitvoert; het wordt ook kortste resterende tijd eerst genoemd.
STCF onderbreekt een taak die nog 14 ms nodig heeft wanneer een nieuw gereedstaande taak slechts 2 ms nodig heeft.
Strideplanning
Strideplanning is deterministische evenredige verdeling die de taak met de laagste voortgangswaarde uitvoert en haar voortgangswaarde verhoogt met een stapgrootte die omgekeerd evenredig is met haar aantal tickets.
Strideplanning houdt de uitvoering over korte perioden dicht bij de ticketverhoudingen zonder willekeurige loterijtrekkingen.

T

Temporele lokaliteit
Temporele lokaliteit is de neiging van een programma om recent gebruikte gegevens opnieuw te gebruiken, waardoor cache-inhoud nuttig is voor latere uitvoering.
Temporele lokaliteit helpt de lus om dezelfde tabelvermeldingen uit een gevulde cache te hergebruiken.
Ticketinflatie
Ticketinflatie verhoogt het eigen aantal tickets van een taak om meer uitvoeringstijd te vragen en vereist vertrouwen of beperkingen om oneerlijke verwatering te voorkomen.
Door onbeperkte ticketinflatie kan een hebzuchtige taak de winkans van elke andere uitvoerbare taak verlagen.
Ticketoverdracht
Ticketoverdracht is het tijdelijk uitlenen van de tickets van een taak aan een andere taak, vaak een server die het verzoek van de uitlener uitvoert.
Door ticketoverdracht kan de server die het verzoek van de client uitvoert meedingen met de aanspraak van de client.
Tijdkwantum
Een tijdkwantum is de maximale CPU-uitvoering die in één round-robinbeurt is toegestaan voordat een onvoltooide gereedstaande taak wordt onderbroken.
Met een tijdkwantum van 4 ms kan een taak met 10 ms werk over meerdere beurten doorgaan.

U

Uithongering
Uithongering is het onbeperkt uitstellen van een gereedstaande taak doordat planningsbeslissingen herhaaldelijk andere taken de CPU geven.
Een voortdurende stroom korte taken kan bij SJF uithongering van een lange taak veroorzaken.
ULE
ULE is de scheduler van FreeBSD en gebruikt uitvoeringswachtrijen per CPU en waargenomen slaap- en uitvoeringsgedrag om interactieve threads te helpen herkennen.
ULE combineert lokale CPU-planning met terugkoppeling over hoe vaak een thread slaapt.

V

Virtuele deadline
Een virtuele deadline is een gewogen eindpunt voor de uitvoeringsvolgorde dat EEVDF gebruikt om verzoeken te vergelijken van taken die voor uitvoering in aanmerking komen.
Een vroegere virtuele deadline helpt een kort verzoek dat in aanmerking komt eerder te draaien, zonder garantie voor een tijdstip op de klok.
Virtuele uitvoeringstijd
Virtuele uitvoeringstijd is CPU-uitvoering geschaald naar taakgewicht, zodat taken met een hoger gewicht langzamer virtuele voortgang opbouwen.
De zware taak krijgt per milliseconde minder virtuele uitvoeringstijd erbij en blijft meedingen naar meer uitvoeringstijd.
Voortgangswaarde
Een voortgangswaarde registreert gewogen uitvoeringsvoortgang bij strideplanning en wordt met de voortgangswaarden van andere uitvoerbare taken vergeleken om een beurt toe te wijzen.
De taak met voortgangswaarde 40 draait vóór een concurrent waarvan de voortgangswaarde al 60 heeft bereikt.

W

Wachtrijmodel
Een wachtrijmodel geeft aankomsten en bediening weer met kansverdelingen om gemiddelde aantallen, vertragingen en capaciteit te bestuderen.
Een wachtrijmodel kan de gemiddelde wachttijd schatten bij een gekozen verdeling van burstlengtes.
Wachttijd
Wachttijd is de som van de intervallen waarin een taak gereed is maar niet wordt uitgevoerd, exclusief haar CPU-uitvoering en geblokkeerde wachtperioden.
De wachttijd van de taak omvat zowel de eerste wachtrijvertraging als het wachten na preëmptie.
Werk stelen
Werk stelen is een methode om belasting te verdelen waarbij een licht belaste CPU uitvoerbaar werk uit de wachtrij van een drukkere CPU haalt.
Bij werk stelen wordt een berekening uit de wachtrij naar de ongebruikte kern verplaatst nadat is gecontroleerd of die kern is toegestaan.
Wet van Little
De wet van Little verbindt het gemiddelde aantal, de aankomstsnelheid en de verblijftijd in een stabiel systeem in stationaire toestand met een consistente grens.
De wet van Little geeft een gemiddeld aantal van vier wanneer acht taken per seconde aankomen en 0,5 s blijven.
Wisseloverhead
Wisseloverhead is CPU-tijd die wordt besteed aan overdracht tussen taken en herstel van nuttige uitvoeringstoestand in plaats van aan voortgang van toepassingswerk.
Een zeer kort tijdkwantum verhoogt de wisseloverhead doordat nuttige bursts door frequente overdrachten worden gescheiden.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag