De vanligaste schemaläggningsalgoritmerna – så fördelas CPU-tid i Linux

De vanligaste schemaläggningsalgoritmerna – så fördelas CPU-tid i Linux

När flera program körs samtidigt i Linux måste operativsystemet bestämma vem som får använda processorn – och hur länge. Det är här schemaläggning kommer in.

En schemaläggningsalgoritm är helt enkelt en metod för att avgöra vilken process eller tråd som ska köras härnäst. Olika algoritmer har olika mål: vissa prioriterar rättvisa, andra snabb respons eller maximal genomströmning.

I det här inlägget går vi igenom de vanligaste schemaläggningsalgoritmerna och förklarar hur de fungerar, deras styrkor och svagheter – och hur de relaterar till Linux.



Varför behövs schemaläggning?

En CPU kan i praktiken bara köra en instruktion per kärna åt gången. Men i ett modernt system finns ofta:

  • flera användarprogram
  • bakgrundstjänster
  • systemprocesser
  • nätverkshantering
  • övervakningsscript

Så fungerar schemaläggning i linux

Schemaläggaren avgör:

  • vilken process som får CPU-tid
  • hur länge den får köra
  • när den ska avbrytas

Vill du förstå grunden först? Läs mer här:
Schemaläggning i Linux

1. FIFO – First In, First Out

FIFO (First In, First Out) är en av de enklaste algoritmerna. Den fungerar ungefär som en kö:

  • Första processen som kommer in körs först.
  • Den körs tills den är klar.
  • Nästa i kön får sedan CPU:n.

Läs mer : Nu kan du låta stjärnor och planeter styra ditt linux

Fördelar

  • Enkel att implementera
  • Förutsägbar

Nackdelar

  • Långa processer kan blockera alla andra
  • Dålig respons i interaktiva system

FIFO används främst i realtidssammanhang och i vissa prioriterade scheman, men är olämplig i vanliga desktopsystem.

2. SJF – Shortest Job First

SJF (Shortest Job First) väljer den process som förväntas ta kortast tid att köra.

Idén är enkel: genom att köra korta jobb först minskar den genomsnittliga väntetiden i systemet.

Fördelar

  • Optimal genomsnittlig väntetid (teoretiskt)
  • Effektiv för batch-system

Nackdelar

  • Man vet sällan hur lång en process kommer att vara
  • Långa jobb kan svälta

I praktiken används uppskattningar snarare än exakta tider.

3. Round Robin

Round Robin är en mycket vanlig algoritm i interaktiva system.

Varje process får en liten tidskvant (time slice). När tiden är slut avbryts processen och nästa i kön får köra.

Fördelar

  • Rättvis fördelning
  • Snabb respons för användare

Nackdelar

  • För liten tidskvant → för många kontextbyten
  • För stor tidskvant → liknar FIFO

Det är en balans mellan effektivitet och responsivitet.



4. Prioritetsbaserad schemaläggning

I en prioritetsbaserad modell tilldelas varje process en prioritet. Processer med högre prioritet körs före lägre.

Fördelar

  • Kritiska systemprocesser kan prioriteras
  • Flexibel modell

Nackdelar

  • Lågprioriterade processer kan svälta

För att motverka svält används ofta aging, där en process gradvis får högre prioritet ju längre den väntar.

5. Fair Scheduling (CFS och EEVDF)

Moderna Linux-kärnor använder mer avancerade algoritmer, såsom Completely Fair Scheduler (CFS) och nyare modeller som bygger vidare på samma rättviseprinciper.

Målet är att:

  • alla processer ska få en rättvis andel CPU-tid
  • interaktiva program ska kännas responsiva
  • bakgrundsprocesser inte blockeras helt

I stället för att arbeta med enkla köer beräknas virtuella tidsvärden som avgör vem som är mest ”berättigad” att köra.

Hur detta påverkar Python och servrar

När du kör ett Python-script i Linux blir det en vanlig process. Den schemaläggs enligt samma regler som allt annat.

Det betyder att:

  • övervakningsscript konkurrerar om CPU
  • nätverksautomation påverkas av systembelastning
  • långkörande tjänster måste hanteras korrekt

Läs vidare om hur Python fungerar som Linux-process här:
Python som Linux-process

Sammanfattning

De vanligaste schemaläggningsalgoritmerna är:

  • FIFO – enkel kömodell
  • SJF – kortaste jobbet först
  • Round Robin – rättvis tidsfördelning
  • Prioritetsbaserad – viktning efter betydelse
  • Fair scheduling – modern rättvis modell

I Linux används mer avancerade varianter som kombinerar rättvisa, respons och effektivitet.

För att förstå hur detta hänger ihop med processer och trådar rekommenderas att du först läser:

Processer i Linux
Trådar i Linux
Schemaläggning i Linux