Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

Introduktion till operativsystem

Hej, Habr! Jag vill presentera för er en serie översĂ€ttningsartiklar av en intressant litteratur — OSTEP. I detta material behandlas djupgĂ„ende hur unix-liknande operativsystem fungerar, nĂ€mligen arbetet med processer, olika schemalĂ€ggare, minne och andra liknande komponenter som utgör ett modernt OS. Originalet av allt material kan du se hĂ€r ). Ett typiskt exempel pĂ„ anvĂ€ndning:. Observera att översĂ€ttningen Ă€r utförd oprofessionellt (relativt fritt), men jag hoppas att jag har bevarat den övergripande meningen.

Laborationsarbeten för detta Àmne kan hittas hÀr:

Andra delar:

Och du kan ocksÄ kolla in min kanal pÄ telegram =)

SchemalÀggning: Multi-Level Feedback Queue

I denna förelÀsning kommer vi att diskutera problemen med att utveckla en av de mest kÀnda metoderna för
schemalÀggning, som kallas Multi-Level Feedback Queue (MLFQ). Första gÄngen MLFQ-schemalÀggaren beskrevs var 1962 av Fernando J. Corbató i systemet kÀnt som
Compatible Time-Sharing System (CTSS). Dessa arbeten (inklusive senare arbeten inom
Multics) presenterades senare för Turing Award. SchemalÀggaren har
sedan förbÀttrats och fÄtt formen som vi ser i
nÄgra moderna system.

MLFQ-algoritmen försöker lösa 2 grundlÀggande överlappande problem.
För det första, den försöker optimera genomloppstiden, som vi diskuterade i den föregÄende förelÀsningen, och som optimeras genom att köra de
kortaste uppgifterna först. Men, OS vet inte hur lÀnge en viss process kommer att ta, och detta
Àr nödvÀndig kunskap för att algoritmer som SJF, STCF ska fungera. För det andra, MLFQ försöker
göra systemet responsivt för anvÀndare (till exempel de som vÀntar och
ser pÄ skÀrmen i vÀntan pÄ att uppgiften ska slutföras) och pÄ sÄ sÀtt minimera
respons tiden. TyvÀrr minskar algoritmer som RR respons tiden, men de pÄverkar negativt
genomloppstiden. DÀrmed har vi vÄrt problem: Hur kan vi designa en
schemalÀggare som uppfyller vÄra krav utan att veta nÄgot om
processens natur, generellt? Hur kan schemalÀggaren lÀra sig egenskaperna hos uppgifterna
som den kör och dÀrmed fatta bÀttre beslut om schemalÀggning?

KÀrnproblemet: Hur schemalÀgger man uppgifter utan perfekt kunskap?
Hur kan vi utveckla en schemalÀggare som bÄde minimerar respons tiden
för interaktiva uppgifter och samtidigt minimerar genomloppstiden utan tydlig
kunskap om uppgiftens exekveringstid?

Notering: lÀr sig av tidigare hÀndelser

MLFQ-kö Àr ett utmÀrkt exempel pÄ ett system som lÀr sig frÄn
tidigare hÀndelser för att förutsÀga framtiden. Liknande metoder förekommer ofta
i OS (och mÄnga andra omrÄden inom datavetenskap, inklusive
prediktioner inom hÄrdvara och cachalgoritmer). Liknande metoder
fungerar nÀr uppgifterna har beteendefaser och dÀrmed Àr förutsÀgbara.
Men med sÄdan teknik bör man vara försiktig, eftersom förutsÀgelser mycket lÀtt
kan visa sig vara felaktiga och leda systemet till att fatta sÀmre beslut Àn
vad som skulle vara fallet utan kunskap överhuvudtaget.

MLFQ: GrundlÀggande regler

LĂ„t oss titta pĂ„ de grundlĂ€ggande reglerna för MLFQ-algoritmen. Även om det finns flera
implementationer av denna algoritm, Àr de grundlÀggande tillvÀgagÄngssÀtten liknande.
I den implementation vi kommer att titta pÄ, kommer MLFQ att ha flera
separata köer, dÀr varje kö har olika prioritet. NÀr som helst
Àr en uppgift som Àr redo att köras i en kö. MLFQ anvÀnder prioriteringar
för att avgöra vilken uppgift som ska köras, det vill sÀga, uppgiften med högre
prioritet (uppgiften frÄn kön med högst prioritet) kommer att köras först.
SjÀlvklart kan det finnas mer Àn en uppgift i en specifik kö, sÄ de
kommer att ha samma prioritet. I sÄ fall kommer en RR-mekanism
att anvÀndas för att schemalÀgga körningen mellan dessa uppgifter.
SÄledes kommer vi till tvÄ grundlÀggande regler för MLFQ:
Regel 1: Om Prioritet(A) > Prioritet(B), kommer uppgift A att köras (B kommer inte)

  • Regel 2: Om Prioritet(A) = Prioritet(B), A och B körs med hjĂ€lp av RR
  • Baserat pĂ„ ovanstĂ„ende, Ă€r nyckelelementen för MLFQ-schemalĂ€ggning

prioriteter. IstÀllet för att ge varje uppgift en fast prioritet,
Àndrar MLFQ sin prioritet baserat pÄ observerat beteende.
Till exempel, om en uppgift stÀndigt slÀnger CPU-arbete i vÀntan pÄ tangentbordsinmatning,
kommer MLFQ att hÄlla processens prioritet hög, eftersom det Àr sÄ
en interaktiv process bör fungera. Om en uppgift dÀremot stÀndigt och
intensivt anvÀnder CPU under en lÀngre period, kommer MLFQ att sÀnka dess
prioritet. SÄledes kommer MLFQ att studera processers beteende under deras körning
och anvÀnda detta beteende.
LÄt oss rita ett exempel pÄ hur köerna skulle kunna se ut vid en viss tidpunkt
och dÄ fÄ nÄgot i stil med detta:
I detta schema ligger processerna A och B i kön med högst prioritet. Process C
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

Àr nÄgonstans i mitten, och process D i slutet av kön. Enligt de ovan nÀmnda
beskrivningarna av MLFQ-algoritmen kommer schemalÀggaren att utföra uppgifter med högst prioritet.
ĐŸĐżĐžŃĐ°ĐœĐžŃĐŒ Đ°Đ»ĐłĐŸŃ€ĐžŃ‚ĐŒĐ° MLFQ ĐżĐ»Đ°ĐœĐžŃ€ĐŸĐČщоĐș Đ±ŃƒĐŽĐ”Ń‚ ĐžŃĐżĐŸĐ»ĐœŃŃ‚ŃŒ заЎачО Ń‚ĐŸĐ»ŃŒĐșĐŸ с ĐœĐ°ĐžĐČŃ‹ŃŃˆĐžĐŒ
prioriteras enligt RR, medan uppgifterna C och D inte kommer att vara aktuella.
SjÀlvklart kommer en statisk snapshot inte att ge en fullstÀndig bild av hur MLFQ fungerar.
Det Àr viktigt att förstÄ hur bilden förÀndras över tid.

Försök 1: Hur man Àndrar prioritet

Vid denna punkt mÄste det lösas hur MLFQ kommer att justera prioriteringsnivÄn
för uppgifter (och dÀrigenom positionen för uppgiften i kön) under hela dess livscykel. För
detta mÄste man ha arbetsflödet i Ätanke: ett visst antal
interaktiva uppgifter med kort tid av arbete (och dÀrigenom frekvent frigivning av
CPU) och ett par lÄnga uppgifter som anvÀnder CPU hela sin arbetstid, dÀr
responsiviteten för sÄdana uppgifter inte Àr viktig. Och sÄ kan man göra det första försöket
att implementera MLFQ-algoritmen med följande regler:

  • Rule3: NĂ€r en uppgift kommer in i systemet placeras den i kön med högst
  • prioritet.
  • Rule4a: Om en uppgift anvĂ€nder hela det tilldelade tidsfönstret, dĂ„ sĂ€nks dess
  • prioritet.
  • Rule4b: Om uppgiften frigör CPU innan tidsfönstret har löpt ut, förblir den
  • med samma prioritet.

Exempel 1: En lÄngvarig uppgift

I detta exempel placeras uppgiften vid ankomst med högsta
prioritet. Efter ett tidsfönster pÄ 10 ms sÀnks prioriteten av
schemalÀggaren. Efter nÀsta tidsfönster sÀnks uppgiften till
den lÀgsta prioriteten i systemet, dÀr den förblir.
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

Exempel 2: En kort uppgift har anlÀnt

Nu ska vi se ett exempel pÄ hur MLFQ försöker nÀrma sig SJF. I detta
exempel finns tvÄ uppgifter: A, som Àr en lÄngvarig uppgift som konstant
anvÀnder CPU och B, som Àr en kort interaktiv uppgift. Anta att
A redan har arbetat en tid nÀr uppgift B kommer.
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

I denna graf kan resultaten av scenariot ses. Uppgift A, som alla uppgifter,
som anvÀnder CPU hamnar lÀngst ner. Uppgift B kommer vid tid T=100 och kommer
att placeras i kön med högsta prioritet. Eftersom tiden för dess arbete Àr kort, kommer
den att avslutas innan den nÄr den sista kön.

FrÄn detta exempel kan man förstÄ algoritmens huvudmÄl: eftersom algoritmen inte
vet om en uppgift Àr lÄng eller kort, antar den först att uppgiften
kort och ger den högsta prioritet. Om det verkligen Àr en kort uppgift, sÄ
kommer den att utföras snabbt, annars, om det Àr en lÄng uppgift, kommer den att ta tid
prioritet nedÄt och snart bevisa att det faktiskt Àr en lÄng uppgift som inte
krÀver svar.

Exempel 3: Vad gÀller in- och utmatning?

LÄt oss nu titta pÄ ett exempel med in- och utmatning. Som nÀmnts i regel 4b,
om en process frigör processorn utan att ha anvÀnt hela sin processor-tid,
sÄ förblir den pÄ samma prioriteringsnivÄ. Syftet med denna regel Àr ganska enkelt
— om en interaktiv uppgift utför mĂ„nga in- och utmatningsoperationer, till exempel och vĂ€ntar
pÄ att anvÀndaren ska trycka pÄ tangenterna eller musen, kommer en sÄdan uppgift att frigöra processorn
tidigare Àn det tilldelade fönstret. Vi vill inte sÀnka prioriteten för en sÄdan uppgift,
och dÀrför förblir den pÄ samma nivÄ.
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

Detta exempel visar hur algoritmen kommer att fungera med sĂ„dana processer — den interaktiva uppgiften B, som behöver CPU endast i 1 ms innan den utför
in- och utmatningsprocessen och den lÄnga uppgiften A, som anvÀnder CPU hela sin tid.
MLFQ hÄller process B pÄ den högsta prioriteten, eftersom den alltid fortsÀtter
att frigöra CPU. Om B Àr en interaktiv uppgift, dÄ har algoritmen pÄ sÄ sÀtt uppnÄtt
sitt mÄl att snabbt köra interaktiva uppgifter.

Problem med den nuvarande MLFQ-algoritmen

I de föregÄende exemplen har vi byggt en grundlÀggande version av MLFQ. Och det verkar som om den
gör sitt jobb vÀl och rÀttvist, fördelar processortid rÀttvist mellan
lÄnga uppgifter och lÄter korta uppgifter eller uppgifter som intensivt anvÀnder
in- och utmatning bearbeta snabbt. TyvÀrr innehÄller detta tillvÀgagÄngssÀtt flera
allvarliga problem.
För det första, hungersproblem: om det finns mÄnga interaktiva
uppgifter i systemet, kommer de att konsumera all processortid och dÀrmed kommer ingen lÄng
uppgift att fÄ möjlighet att utföras (de svÀlter).

För det andra, smarta anvÀndare kan skriva sina program sÄ att
de lurar schemalÀggaren. FÀllan ligger i att göra nÄgot sÄdant som tvingar
schemalÀggaren att ge processen mer processortid. Algoritmen som
beskrivs ovan Àr helt sÄrbart för sÄdana attacker: innan tidsfönstret nÀstan Àr
utslutat behöver en in-och-ut operation (till nÄgon, vilken som helst fil) utföras
och pÄ sÄ sÀtt frigöra CPU:n. Ett sÄdant beteende gör att man kan förbli i samma
kö och ÄterfÄ en större procentandel av processortiden. Om man gör detta
korrekt (till exempel att köras 99 % av tiden under fönstret innan CPU:n frigörs),
kan en sÄdan uppgift enkelt monopoliserar processorn.

Slutligen kan programmet Àndra sitt beteende över tid. De uppgifter som
anvÀnde CPU:n kan bli interaktiva. I vÄrt exempel kommer sÄdana
uppgifter inte att fÄ rÀtt hantering av schemalÀggaren, som de skulle ha fÄtt av andra
(ursprungliga) interaktiva uppgifter.

FrÄga till publiken: vilka attacker pÄ schemalÀggaren skulle kunna utföras i den moderna vÀrlden?

Försök 2: Höja prioriteten

Vi försöker Àndra reglerna och se om vi kan undvika problem med
svÀlt. Vad skulle vi kunna göra för att sÀkerstÀlla att CPU-relaterade
uppgifter fÄr sin tid (Àven om det inte Àr lÀnge).
En enkel lösning pÄ problemet skulle kunna vara att regelbundet
höja prioriteten för alla sÄdana uppgifter i systemet. Det finns mÄnga sÀtt
att uppnÄ detta, lÄt oss försöka genomföra nÄgot enkelt som exempel: att omedelbart
översÀtta alla uppgifter till högsta prioritet, dÀrav den nya regeln:

  • Regel 5: Efter en viss period S, att översĂ€tta alla uppgifter i systemet till högsta kö.

VÄr nya regel löser tvÄ problem pÄ en gÄng. För det första garanteras att processerna
inte svÀlter: uppgifter som befinner sig i den högsta kön kommer att dela
processortid enligt RR-algoritmen och pÄ sÄ sÀtt kommer alla processer att fÄ
processortid. För det andra, om en process som tidigare endast anvÀnde
processorn blir interaktiv, kommer den att förbli i kön med högre
prioritet efter att ha fÄtt en höjning av prioriteten till högsta.
LÄt oss övervÀga ett exempel. I det hÀr scenariot ska vi granska en process som anvÀnder
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

CPU och tvÄ interaktiva, korta processer. Till vÀnster visar bilden beteende utan prioriteringshöjning, vilket innebÀr att en lÄng uppgift börjar svÀlta efter att tvÄ interaktiva uppgifter anlÀnder till systemet. Till höger utförs prioriteringshöjning var 50ms, vilket gör att alla processer garanterat fÄr CPU-tid och kommer att köras periodiskt. 50ms Àr hÀr ett exempel; i verkligheten Àr detta tal nÄgot större.
Det Àr uppenbart att tillÀgg av tidsperiodisk höjning S leder till
den ofrÄnkomliga frÄgan: vilket vÀrde bör sÀttas? En av de ansedda
systemingenjörerna John Ousterhout benÀmnde sÄdana storheter i systemen som voo-doo
konstanter, eftersom de pÄ nÄgot sÀtt krÀvde svart magi för korrekt
instÀllning. Och tyvÀrr har S en sÄdan arom. Om man sÀtter vÀrdet för högt
börjar de lÄngvariga uppgifterna svÀlta. Och om man sÀtter vÀrdet för lÄgt,
fÄr de interaktiva uppgifterna inte tillrÀcklig CPU-tid.

Försök 3: BÀsta redovisning

Nu har vi ett annat problem som behöver lösas: hur fÄr vi inte
vÄr schemalÀggare att bli lurad? Anklagade för denna möjlighet Àr
reglerna 4a, 4b, som tillÄter en uppgift att behÄlla sin prioritet genom att frigöra CPU
innan den tilldelade tiden har gÄtt ut. Hur hanterar vi detta?
Lösningen i det hÀr fallet kan ses som bÀsta redovisning av CPU-tid pÄ varje
nivÄ av MLFQ. IstÀllet för att glömma den tid programmet anvÀnde
CPU:n under den tilldelade perioden, bör den beaktas och sparas. Efter att
processen har förbrukat den tilldelade tiden, bör den sÀnkas till nÀsta
prioritetsnivĂ„. Nu spelar det ingen roll hur processen anvĂ€nder sin tid — om
den konstant berÀknar pÄ processorn eller om den gör ett flertal anrop. PÄ sÄ sÀtt
bör regel 4 skrivas om till följande:

  • Rule4: Efter att uppgiften har förbrukat sin tilldelade tid i den aktuella kön (oavsett hur mĂ„nga gĂ„nger den har frigjort CPU:n) sĂ€nks prioriteten för en sĂ„dan uppgift (den flyttas nedĂ„t i kön).

LÄt oss titta pÄ ett exempel:
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)»

Bilden visar vad som hÀnder om man försöker lura schemalÀggaren, hur
om det skulle vara med de tidigare reglerna 4a, 4b, skulle resultatet bli till vÀnster. Med den nya
regeln - resultatet till höger. Före skyddet kunde vilken process som helst orsaka I/O till avslut och
dÀrmed dominera CPU:n, efter aktivering av skyddet, oavsett I/O-beteende
kommer det fortfarande att sjunka i köerna och dÀrmed inte kunna orÀttvist
tillgodogöra sig CPU-resurser.

FörbÀttringar av MLFQ och andra problem

Med de ovan nÀmnda förbÀttringarna uppstÄr nya problem: en av de största
frÄgorna Àr hur man ska parametrisera en sÄdan schemalÀggare? Dvs. Hur mÄnga skall det finnas
köer? Vad bör storleken pÄ arbetsfönstret vara inom kön? Hur
ofta bör man höja programmets prioritet för att undvika svÀlt och
ta hÀnsyn till förÀndringar i programmets beteende? Det finns inget enkelt
svar pÄ dessa frÄgor och endast experiment med belastningar och efterföljande konfigurationer
av schemalÀggaren kan leda till en viss tillfredsstÀllande balans.

Till exempel tillÄter de flesta implementationer av MLFQ att olika
tidsintervall tilldelas olika köer. Högt prioriterade köer tilldelas vanligtvis
korta intervall. Dessa köer bestÄr av interaktiva uppgifter,
dÀr vÀxlingen mellan dem Àr ganska kÀnslig och bör ta 10 millisekunder eller mindre.
I kontrast bestÄr lÄgt prioriterade köer av lÄnga uppgifter som anvÀnder
CPU:n. I det hÀr fallet passar lÄnga tidsintervall vÀldigt bra (100 ms).
Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (översÀttning)

I detta exempel finns det 2 uppgifter som har arbetat i den högprioriterade kön i 20
ms, uppdelat i fönster om 10 ms. 40 ms i den medelprioriterade kön (fönster om 20 ms) och i den lÄgt prioriterade
kön blev tidsfönstret 40 ms, dÀr uppgifterna avslutade sitt arbete.

Implementation av MLFQ i Solaris-OS - en klass av tidsdelade schemalÀggare.
SchemalÀggaren tillhandahÄller en uppsÀttning tabeller som exakt definierar hur
prioriteten för processen ska Àndras under dess livstid, vad storleken pÄ
det tilldelade fönstret ska vara och hur ofta uppgifternas prioriteringar ska höjas. Systemadministratören
kan interagera med denna tabell och fÄ schemalÀggaren att bete sig
annorlunda. Som standard innehÄller denna tabell 60 köer med gradvis ökande
fönsterstorlek frÄn 20 ms (högt prioritet) till flera hundra ms (lÀgre prioritet), och
Àven med boost av alla uppgifter en gÄng per sekund.

Andra MLFQ-schemalÀggare anvÀnder inte tabeller eller specifika
regler som beskrivs i denna förelÀsning, Ä andra sidan berÀknar de prioriteringar med hjÀlp av
matematiska formler. Till exempel anvÀnder schemalÀggaren i FreeBSD en formel för
att berÀkna den aktuella prioriteten för en uppgift, baserat pÄ hur mycket processorn
har anvÀnt CPU. Dessutom förfaller CPU-anvÀndningen över tid, och pÄ sÄ sÀtt
höjs prioriteten pÄ ett nÄgot annat sÀtt Àn beskrivits ovan. Detta kallas sÄ
kallade decay-algoritmer. FrÄn version 7.1 anvÀnds schemalÀggaren ULE i FreeBSD.

Slutligen har mÄnga schemalÀggare andra funktioner. Till exempel
reserverar vissa schemalÀggare de högsta nivÄerna för att driva operativsystemet, vilket gör att
ingen anvÀndarprocess kan fÄ högsta prioritet i
systemet. Vissa system tillÄter att ge tips för att hjÀlpa
schemalÀggaren att korrekt sÀtta prioriteringar. Till exempel kan man med hjÀlp av kommandot trevlig
öka eller minska prioriteten för en uppgift och dÀrigenom höja eller
sÀnka programmets chanser till processorstid.

MLFQ: Sammanfattning

Vi har beskrivit en planeringsmetod som kallas MLFQ. Namnet
ligger i dess funktion — den har flera köer och anvĂ€nder Ă„terkoppling
för att bestÀmma uppgiftens prioritet.
Den slutgiltiga beskrivningen av reglerna kommer att vara som följer:

  • Regel1: Om prioritet(A) > Prioritet(B), kommer uppgift A att köras (B kommer inte att köras)
  • Regel2: Om prioritet(A) = Prioritet(B), A och B körs med RR
  • Regel3: NĂ€r en uppgift kommer in i systemet, placeras den i kön med högsta prioritet.
  • Rule4: Efter att uppgiften har förbrukat sin tilldelade tid i den aktuella kön (oavsett hur mĂ„nga gĂ„nger den har frigjort CPU:n) sĂ€nks prioriteten för en sĂ„dan uppgift (den flyttas nedĂ„t i kön).
  • Regel 5: Efter en viss period S, att översĂ€tta alla uppgifter i systemet till högsta kö.

MLFQ Ă€r intressant av följande anledning — istĂ€llet för att krĂ€va förkunskaper om
uppdragets natur i förvÀg, studerar algoritmen tidigare beteenden av uppgiften och sÀtter
prioriteringar dĂ€refter. PĂ„ sĂ„ sĂ€tt försöker den klara tvĂ„ mĂ„l samtidigt — uppnĂ„ prestanda för smĂ„ uppgifter (SJF, STCF) och rĂ€ttvist köra lĂ„ngvariga,
CPU-krÀvande uppgifter. DÀrför anvÀnder mÄnga system, inklusive BSD och deras derivat,
Solaris, Windows, Mac, nÄgon form av algoritm
MLFQ som grundlÀggande planeringsmetod.

Ytterligare material:

  1. manpages.debian.org/stretch/manpages/sched.7.sv.html
  2. en.wikipedia.org/wiki/Scheduling_(berÀkning)
  3. pages.lip6.fr/Julia.Lawall/atc18-bouron.pdf
  4. www.usenix.org/legacy/event/bsdcon03/tech/full_papers/roberson/roberson.pdf
  5. chebykin.org/freebsd-process-scheduling

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster