What is the difference between a scheduler and a dispatcher in AOS?

Scheduler vs. Dispatcher: Hjernen bag din CPU

20/03/2020

Rating: 4.06 (14985 votes)

I den moderne computerverden tager vi det for givet, at vores enheder kan håndtere utallige opgaver samtidigt. Vi kan surfe på internettet, lytte til musik, skrive i et dokument og modtage notifikationer – alt sammen tilsyneladende på samme tid. Denne utrolige evne, kendt som multitasking, er ikke magi, men resultatet af et komplekst og elegant system, der arbejder i hjertet af dit operativsystem. To af de mest afgørende, men ofte oversete, komponenter i denne proces er Scheduleren (planlæggeren) og Dispatcheren. Selvom de arbejder tæt sammen, har de vidt forskellige roller. At forstå forskellen mellem dem er at forstå kernen i, hvordan en computer effektivt fordeler sin mest værdifulde ressource: processorkraft.

What is a CPU dispatcher?
The dispatcher is a crucial component of an operating system’s CPU scheduling system. It’s the module that gives control of the CPU to the process selected by the short-term scheduler. This function involves a context switch, switching to user mode, and jumping to the proper location in the user program to restart that program.
Indholdsfortegnelse

Hvad er en Scheduler? CPU'ens Strategiske Planlægger

Man kan tænke på scheduleren som den strategiske hjerne i et operativsystem. Dens primære opgave er at administrere og beslutte, hvilken af de mange ventende processer (programmer eller dele af programmer) der skal have adgang til CPU'en og hvornår. I en travl lufthavn er scheduleren som flyvelederen, der beslutter, hvilket fly der skal have lov til at lette eller lande. Uden denne styring ville der opstå kaos. Scheduleren sikrer, at systemets ressourcer udnyttes optimalt, og at alle processer får en fair behandling. Der findes typisk tre forskellige typer schedulere:

  • Long-Term Scheduler (Job Scheduler): Denne type bestemmer, hvilke processer fra lageret (harddisken) der overhovedet skal indlæses i hukommelsen (RAM) for at blive klar til eksekvering. Man kan se den som en dørmand til en eksklusiv klub, der beslutter, hvor mange gæster der må komme ind ad gangen. Dette kontrollerer graden af multiprogrammering i systemet.
  • Medium-Term Scheduler: Denne scheduler er involveret i processen med 'swapping'. Hvis en proces midlertidigt er inaktiv (f.eks. venter på input fra brugeren eller en I/O-operation), kan denne scheduler fjerne den fra RAM for at gøre plads til andre processer. Når processen er klar igen, bliver den hentet tilbage. Dette optimerer hukommelsesbrugen.
  • Short-Term Scheduler (CPU Scheduler): Dette er den mest aktive og velkendte scheduler. Den vælger den næste proces, der skal køres, fra den pulje af processer, der allerede er i RAM og klar til at blive eksekveret (den såkaldte 'ready queue'). Beslutningen tages meget hyppigt – mange gange i sekundet – og er baseret på forskellige planlægningsalgoritmer som FCFS (First-Come, First-Served), SJF (Shortest Job First) eller Round Robin (RR).

Scheduleren arbejder altså på et mere overordnet, politisk niveau. Den analyserer situationen og træffer en beslutning baseret på en foruddefineret algoritme. Men den udfører ikke selv handlingen med at give CPU'en til processen.

Mød Dispatcheren: CPU'ens Udførende Hånd

Hvis scheduleren er hjernen, er dispatcheren hænderne. Når Short-Term Scheduleren har truffet sin beslutning og udvalgt den næste proces, træder dispatcheren til. Dispatcheren er den lavpraktiske, effektive modul, der rent faktisk udfører skiftet. Det er den, der tager kontrol over CPU'en fra den nuværende proces og giver den til den nyvalgte proces. Denne overdragelse er en kritisk operation og involverer tre primære trin:

  1. Kontekstskifte (Context Switching): Dette er måske den vigtigste opgave. Dispatcheren gemmer den nuværende tilstand (kontekst) af den proces, der bliver afbrudt. Dette inkluderer værdier i CPU-registre, programtæller og andre vigtige data. Derefter indlæser den den gemte tilstand for den nye proces, der skal køre. Dette sikrer, at processer kan genoptages præcis, hvor de slap, uden at miste data. Kontekstskifte er en fundamental del af moderne operativsystemer.
  2. Skift til Brugertilstand (Switching to User Mode): Operativsystemer har forskellige tilstande for at beskytte systemet. Kernel-tilstand giver fuld adgang til al hardware, mens brugertilstand er begrænset. Dispatcheren sikrer, at CPU'en skifter til brugertilstand, før den overdrager kontrollen til brugerprogrammet, hvilket er en vigtig sikkerhedsforanstaltning.
  3. Spring til den korrekte placering: Til sidst hopper dispatcheren til den korrekte instruktion i det nye program (baseret på den gemte programtæller), så programmet kan fortsætte sin eksekvering.

Hele denne proces sker utroligt hurtigt, men den tager stadig tid. Den tid, det tager for dispatcheren at stoppe én proces og starte en anden, kaldes dispatch latency. Selvom den er minimal, er det en form for overhead, og systemdesignere arbejder konstant på at gøre denne proces så hurtig som muligt.

What is a CPU dispatcher?
The dispatcher is a crucial component of an operating system’s CPU scheduling system. It’s the module that gives control of the CPU to the process selected by the short-term scheduler. This function involves a context switch, switching to user mode, and jumping to the proper location in the user program to restart that program.

Scheduler vs. Dispatcher: En Detaljeret Sammenligning

For at gøre forskellene helt klare, er her en direkte sammenligning af de to komponenters egenskaber og funktioner i en tabel.

EgenskabSchedulerDispatcher
DefinitionEn systemkomponent, der udvælger den næste proces, der skal køres, baseret på en algoritme.Et modul, der giver kontrol over CPU'en til den proces, som scheduleren har valgt.
HovedopgaveSelektion og beslutningstagning.Implementering og eksekvering af skiftet.
TyperLong-term, Medium-term, Short-term.Der er kun én type; det er et specifikt kodemodul.
AfhængighedArbejder uafhængigt for at træffe en beslutning.Er fuldstændig afhængig af scheduleren; den agerer kun, når en beslutning er truffet.
ArbejdsprincipBruger planlægningsalgoritmer (FCFS, RR, etc.).Har ingen algoritme; den følger en fast procedure for kontekstskifte.
TidsforbrugTiden for selve beslutningen er normalt ubetydelig.Tiden, det tager, kaldes 'dispatch latency' og er en målbar overhead.
InteraktionInteragerer med køen af klar-processer ('ready queue').Interagerer direkte med CPU'en og processernes gemte tilstande.

Hvordan fungerer det i praksis? Et Eksempel

Lad os forestille os et simpelt scenarie for at illustrere samspillet. Antag, at vi har fire processer i vores 'ready queue': P1, P2, P3 og P4. De ankom i den rækkefølge. Vores operativsystem bruger en simpel FCFS (First-Come, First-Served) planlægningsalgoritme.

  1. Trin 1: Scheduleren vælger. Scheduleren kigger på 'ready queue'. Da P1 ankom først, beslutter den, at P1 er den næste proces, der skal eksekveres. Den giver denne information videre.
  2. Trin 2: Dispatcheren handler. Dispatcheren modtager ordren. Den udfører et kontekstskifte, fjerner P1 fra 'ready queue', indlæser P1's tilstand i CPU'en og starter dens eksekvering.
  3. Trin 3: Processen kører. P1 kører nu på CPU'en. Imens kan andre processer ankomme til 'ready queue'.
  4. Trin 4: Næste cyklus. Når P1 er færdig (eller dens tildelte tid udløber), kaldes scheduleren igen. Den ser, at P2 nu er den første i køen og vælger den.
  5. Trin 5: Dispatcheren handler igen. Dispatcheren stopper P1 (og gemmer dens tilstand, hvis den ikke var færdig), fjerner P2 fra køen, indlæser P2's tilstand og starter den.

Denne cyklus af 'vælg-og-udfør' fortsætter konstant og skaber illusionen af, at alle processer kører samtidigt. Scheduleren leverer en ordnet liste af processer, som dispatcheren så eksekverer én efter én.

What does a task dispatcher do?
In a real-time operating system, the dispatcher is used on a call-by-call basis to coordinate task-state transitions that any system calls might have caused. When a task makes a system call, the dispatcher is used to exit the kernel after the system call completes. For instance, one or more tasks may have become ready to run as a result of the system call.

Ofte Stillede Spørgsmål (FAQ)

Er dispatcheren en del af scheduleren?

Nej, de betragtes som separate komponenter, selvom de arbejder uløseligt sammen. Man kan sige, at de er to sider af samme mønt inden for CPU-planlægning. Scheduleren er den 'politiske' del, der beslutter *hvad* der skal ske, mens dispatcheren er den 'mekaniske' del, der sikrer, *at* det sker.

Hvorfor er 'dispatch latency' et problem?

Fordi det er ren overhead. I den tid, dispatcheren bruger på at skifte mellem processer, udføres der intet meningsfuldt arbejde for brugeren. I de fleste systemer er denne forsinkelse målt i mikrosekunder og er ubetydelig. Men i realtidssystemer, som f.eks. styrer en robotarm eller en bils bremser, kan selv den mindste forsinkelse være kritisk. Derfor er optimering af dispatcheren ekstremt vigtigt i sådanne systemer.

Gælder disse koncepter også for min smartphone?

Absolut. Ethvert moderne operativsystem, uanset om det er Windows, macOS, Linux, Android eller iOS, bygger på disse fundamentale principper. Din smartphone kører konstant adskillige processer – fra brugerfladen og de apps, du har åbne, til baggrundstjenester, der tjekker for nye e-mails eller beskeder. En effektiv scheduler og en lynhurtig dispatcher er afgørende for den flydende og responsive oplevelse, du forventer.

What is a dispatcher module?
Dispatcher module gives control of the CPU to the process selected by the short-term scheduler; this involves: switching context, switching to user mode, jumping to the proper location in the user program to restart that program The operating system's principal responsibility is controlling the execution of processes.

Kan én enhed ikke bare gøre det hele?

Opdelingen i en scheduler og en dispatcher følger et vigtigt designprincip i softwareudvikling kaldet 'separation of concerns' (adskillelse af ansvarsområder). Ved at adskille den komplekse logik i planlægningsalgoritmerne (scheduleren) fra den lavpraktiske, hardware-nære mekanisme til at skifte kontekst (dispatcheren), bliver systemet mere modulært, lettere at vedligeholde og lettere at optimere. Hver del kan specialiseres til sin specifikke opgave.

Sammenfattende er scheduleren og dispatcheren det usynlige, men uundværlige makkerpar, der orkestrerer den komplekse dans af processer inde i din computer. Scheduleren er den kloge dirigent, der læser noderne og beslutter, hvem der skal spille hvornår. Dispatcheren er den dygtige koncertmester, der sikrer, at hver musiker kommer ind på præcis det rigtige tidspunkt. Uden deres perfekte samarbejde ville den symfoni af multitasking, vi oplever hver dag, falde til jorden i et kaotisk virvar.

Hvis du vil læse andre artikler, der ligner Scheduler vs. Dispatcher: Hjernen bag din CPU, kan du besøge kategorien Teknologi.

Go up