Kontekst arvutiteaduses — protsessi ja niidi seisundi määratlus

Arvutiteaduses tähistab ülesande (protsessi või niidi) kontekst seda minimaalset andmekogu, mis peab olema salvestatud, et ülesanne saaks katkestada ja hiljem täpselt samast kohast taastada. Teisisõnu peab konteksti sisaldama kogu seda seisuteavet, mis võimaldab katkestamisel (näiteks signaali, ajastatud ajastuse või operatsioonisüsteemi ajaja korral) peatatud tööd uuesti jätkata nii katkestamise hetkel kui ka suvalisel tulevikus. Konteksti mõiste on eriti oluline multitaskingus ja katkestatavate rutiinide puhul: protsessor salvestab konteksti, käivitab katkestuse teenindamise ja seejärel taastab konteksti, et jätkata originaalülesannet.

Mida täpselt kontekst sisaldab?

  • Protsessori registrid — üldotstarbelised registrid, programmi loendur (program counter / instruction pointer), stack pointer ja protsessori lipud. Need on olulised täpseks täitmise taastamiseks.
  • FPU/SIMD ja muu laiendatud riistvaraseis — liit- ja vektorregisterid (näiteks x86 FPU, XMM, YMM) ning vastavad kontroll- ja olekuregistrid. Paljud OS-id kasutavad optimeerimismeetodeid (näiteks lazy FPU saving), et vältida tarbetut salvestamist.
  • Ülesande poolt kasutatav mälu — aadressiruumi määratlused, leheküljestamise struktuurid (nt page table base register nagu x86 CR3), mälukaardistused (mmap) ja protokollid, mis määravad, milline mäluosa kuulub protsessile.
  • Süsteemi kontrollregistrid ja protsessi haldusinfo — operatsioonisüsteemi poolt hoitavad andmed, nagu protsessi või niidi juhtimisstruktuurid (Process Control Block, Thread Control Block), prioriteet, ajaja, CPU affinity, keskmise tööaja statistikad jm.
  • Failide ja ressursipeegeldused (juurdepääsuteave) — tavaliselt ei kuulu need kiire kontekstivahetuse ajal otsekoheselt protsessori registritesse, kuid protsessi seisundiks loetakse ka avatud failide tabel, failikirje viited jm kernel-ilmsed andmed.

Kontekstivahetus — mis juhtub ja miks see maksab?

Kontekstivahetusel salvestab operatsioonisüsteem lähteülesande olulisimaid registreid ja laadib seejärel sihtülesande jaoks vajalikud registrid. Sõltuvalt arhitektuurist ja OS-i disainist hõlmab see sageli programmiloendurit, stack pointerit, CPU-liput ja mõnikord ka lehitsemisteavet või page table baasi. Mõned sammud võivad põhjustada lisakulusid: näiteks lehe tabeli vahetamisel tuleb tihti puhastada TLB (translation lookaside buffer), mis põhjustab täiendavat aeglustust, kuni mälutingimusi uuesti laaditakse.

Mida suurem on salvestatavate andmete mahutavus (suur kontekst), seda kauem võtab kontekstivahetus aega — seega suureneb latentsus. Sellepärast püütakse operatsioonisüsteemides ja riistvaras vähendada vajalikku salvestatavat seisuteavet või teha seda optimaalselt (näiteks salvestada laiendatud FPU-seis alles siis, kui seda esimese korraga vajatakse).

Erinevad lähenemised ja optimeerimismeetodid

  • Kasutajatasoni niidid (user-level threads) — kasutajatarkvaraline planeerimine võimaldab väga kiireid vahetusi, kuna OS-i ei kaasata iga niidi vahetamisel, kuid see nõuab, et kõik niidid jagaksid sama protsessi aadressiruumi ja et opsüsteemi katkestused ei katkestaks kasutajatasoni plaanimist.
  • Tuumapõhised niidid (kernel threads) — OS-i poolt planeeritud ja hallatavad niidid, mille konteksti vahetus on üldjuhul kallim, kuid pakub paremat integratsiooni ressursi- ja seadmekontrolliga.
  • Lazy saving — FPU/SIMD-seisu salvestamise viivitus kuni selle tegeliku kasutamiseni, et vältida ebavajalikku andmete liigutamist.
  • XSAVE/FXSAVE ja arhitektuurispetsiifilised instruktsioonid — kaasaegsed CPU-d pakuvad kiireid instruktsioone laiendatud riistvaraseisu salvestamiseks ja taastamiseks.
  • Copy-on-write ja nõrgemad konteksti kopeerimisstrateegiad — mälu jagamine ja kopeerimise edasilükkamine vähendab andmete liigutamist konteksti loomisel (nt fork()+copy-on-write).

Püsiv salvestus (kontrollpunktid) ja failid

Tavaline kontekstivahetus ei hõlma salvestusmälusse ehk failidesse kirjutamist — see oleks liiga aeglane. Siiski kasutatakse kontrollpunktimist (checkpointing) teadus- või pikeste arvutusülesannete puhul: kogu protsessi olek (mälupildid, failide olek, registrid jms) salvestatakse kettale, et seda hiljem taastada teises masinas või pärast katkestust. Sellised checkpoint'id laiendavad konteksti mõistet, kuid ei ole osa tavalisest OS-i kiirest kontekstivahetusest.

Turvalisus ja erandid

Konteksti taastamisel tuleb olla tähelepanelik: vale või rikutud kontekst võib põhjustada turvaauke (nt tagurpidi suunamine, valede privileegidega koodi käivitamine) või süsteemi ebastabiilsust. Operatsioonisüsteemid seavad piiranguid ja kontrollimehhanisme, et vältida kernel-ruumi andmete lekkimist ning tagada, et kasutaja- ja tuumarežiimi kontekstid ei seguneks.

Kokkuvõttes: kontekst arvutiteaduses tähendab kõike seda seisuteavet, mida on vaja ülesande täpseks taastamiseks. Konteksti suurus ja salvestamise keerukus mõjutavad otseselt kontekstivahetuse latentsust ja süsteemi reageerimisvõimet, mistõttu nii riist- kui tarkvaradisain püüavad seda mahtu ja sagedust optimeerida.

Küsimused ja vastused

K: Mis on ülesande kontekst informaatikas?


V: Ülesande kontekst on ülesande poolt kasutatavate andmete minimaalne kogum, mida tuleb salvestada, et võimaldada ülesande katkestamist teatud kuupäeval ja ülesande jätkamist katkestamise kohas ja suvalisel tulevasel kuupäeval.

K: Millistes olukordades omandab konteksti mõiste tähtsust?


V: Konteksti mõiste muutub oluliseks katkestatavate ülesannete puhul, mille katkestamisel salvestab protsessor konteksti ja jätkab katkestuse teenindamise rutiini täitmist.

K: Miks on oluline väiksem kontekst?


V: Mida väiksem on kontekst, seda väiksem on latentsus.

K: Kus asuvad ülesande kontekstiandmed?


V: Ülesande konteksti andmed asuvad järgmistes kohtades: Protsessori registrites, ülesande poolt kasutatavas mälus ja mõnes operatsioonisüsteemis kontrollregistrites, mida süsteem kasutab ülesande haldamiseks.

K: Kas salvestusmälu (failid) on kontekstivahetuse ajal seotud ülesandekontekstiga?


V: Ei, salvestusmälu (failid) ei ole kontekstivahetuse korral ülesande kontekstiga seotud, isegi kui seda saab salvestada mõneks otstarbeks (kontrollpunktide tegemine).

K: Mis juhtub protsessoriga, kui katkestatav ülesanne katkestatakse?


V: Kui katkestatav ülesanne katkestatakse, salvestab protsessor konteksti ja jätkab katkestuse teenindamise rutiini täitmist.

K: Milline on ülesande konteksti tähtsus süsteemi jõudluses?


V: Ülesande kontekst on süsteemi jõudluse seisukohalt oluline, sest katkestatavad ülesanded võivad põhjustada kontekstivahetusi ja mida väiksem on kontekst, seda väiksem on latentsus, mis tähendab suuremat jõudlust.

AlegsaOnline.com - 2020 / 2025 - License CC3