Procesų kontekstas kompiuterijoje: apibrėžimas ir konteksto perjungimas

Sužinokite, kas yra procesų kontekstas ir kaip vyksta konteksto perjungimas — aiškus apibrėžimas, procesoriaus registrai, atmintis ir našumo įtaka.

Autorius: Leandro Alegsa

Kompiuterių moksle užduoties (proceso, gijos...) kontekstas yra minimalus šios užduoties naudojamų duomenų rinkinys, kuris turi būti išsaugotas, kad užduotį būtų galima nutraukti tam tikru metu ir tęsti užduotį toje vietoje, kurioje ji buvo nutraukta, ir bet kuriuo metu ateityje. Konteksto sąvoka įgyja reikšmę pertraukiamų užduočių atveju, kai nutraukus užduotį procesorius išsaugo kontekstą ir toliau aptarnauja pertraukimo aptarnavimo procedūrą. Taigi, kuo mažesnis kontekstas, tuo mažesnė uždelsimo trukmė. Šie duomenys yra:

  • Procesoriaus registrai
  • Užduoties naudojama atmintis
  • Kai kuriose operacinėse sistemose valdymo registrai, kuriuos sistema naudoja užduočiai valdyti

"Užduoties kontekstas" konteksto perjungimo atveju nėra susijęs su saugojimo atmintimi (failais); net jei jis gali būti saugomas kai kuriais atvejais (kontrolinis taškas).

Ką konkrečiai sudaro užduoties kontekstas?

Platesne prasme užduoties kontekstas paprastai apima:

  • CPU registrai: bendrieji registrai, programos skaitiklis (PC / instrukcijos rėmimo rodmuo), stekas (stack pointer), statuso registrai (procesoriaus būsenos žymos).
  • Atminties valdymo informacija: žemėlapių ar puslapių lentelės, segmentų registrai, adresų erdvės nuostatos — tai leidžia užduočiai pasiekti savo atmintį.
  • Branduolio būsena: procesui priskirtas branduolio (kernel) stekas, prioritetai, būsenos žymos (vykdoma, pasirengusi, blokuota) ir planavimo informacija.
  • I/O ir posistemės būsena: atidaryti failų deskriptoriai, įėjimo/išėjimo užklausų būklė, tinklo jungtys, signalų tvarkymo nustatymai.
  • Saugumo ir apsaugos atributai: vartotojo ir grupės ID, prieigos teisės, procesų grupės/kontekstai (pvz., namespaces Linux).
  • Atskiri architektūriniai elementai: kai kurios architektūros turi specialius valdymo blokus (pvz., x86 Task State Segment), banked registrus ar kitą aparatinę paramą konteksto saugojimui.

Konteksto perjungimo eiga (bendrieji žingsniai)

  • Išsaugomas esamo proceso kontekstas: CPU registrai įrašomi į procesų valdymo struktūrą (PCB — process control block) arba į ekvivalentą.
  • Atnaujinama planavimo būsenos informacija: pažymima, kad procesas tapo pasirengęs arba laukia.
  • Parenkamas kitas vykdymui skirtas procesas pagal planavimo algoritmą.
  • Nustatoma naujo proceso adresų erdvė (pavyzdžiui, pakeičiami puslapių lentelės rodytojai) — dažnai reikalingas TLB (translation lookaside buffer) invalidas.
  • Užkraunamas naujo proceso registrų rinkinys, steko rodyklė ir programos skaitiklis.
  • Kontrolė grąžinama procesoriui — vykdomas naujas procesas nuo paskutinės saugotų instrukcijų vietos.

Pilnas vs dalinis (lengvas) konteksto perjungimas

Ne visuomet reikia išsaugoti visą kontekstą. Skirtingos situacijos leidžia naudoti skirtingo „dydžio“ perjungimus:

  • Pilnas perjungimas: naudojamas keičiant procesus, kurie neturi bendros atminties; reikia saugoti ir atkurti adresų erdvę, failų būseną ir pan.
  • Dalis perjungimas (thread switch arba darinių lengvas perjungimas): gijos (thread) perjungimo atveju, kai gijos priklauso tam pačiam procesui ir dalijasi adresų erdve, nebūtina keisti puslapių lentelių — pakanka registrų ir steko.
  • Pertraukimų aptarnavimas: dažnai sistema tik saugo kritinius registrus ir aptarnauja pertrauką; vėliau atstatoma tik tai, kas pakeista.

Kainos ir našumo aspektai

Konteksto perjungimas turi išlaidų — tai yra papildomas delsimas (latency) ir papildomas darbo kiekis procesoriui bei atminties posistemėms (TLB invalidas, keletas atminties operacijų). Tipiškai konteksto perjungimo kaštai matuojami mikrosekunėmis arba daugiau, priklausomai nuo procesoriaus architektūros ir ar vyksta adresų erdvės keitimas.

Svarbūs faktoriai, didinantys kaštus: TLB valymas, puslapių lentelių pakeitimai, cache efekto praradimas, ir papildomas branduolio darbo kiekis.

Kaip sumažinama konteksto perjungimo kaina

  • Minimalus būtinas saugomas rinkinys — saugoti tik tuos registrus ir būsenas, kurie tikrai reikalingi.
  • Naudoti gijas (threads) vietoje pilnų procesų, kai įmanoma, kad sumažintumėte adresų erdvės perjungimus.
  • Lazy context switching — atidėlioti kai kurių išteklių (pvz., atminties puslapių) keitimą iki tol, kol jie iš tiesų reikalingi.
  • Aparatinės pagalbos naudojimas — pvz., x86 TSS arba specialūs registrai, skirti spartesniam perjungimui.
  • Optimizuoti planuotoją, kad būtų mažiau dažnų perjungimų tarp trumpų užduočių (kur perjungimo kaštai būtų procentaliai dideli).

Pastabos apie saugojimą ir kontrolinius taškus

Nors tradiciniu konteksto perjungimo atveju "užduoties kontekstas" nesusijęs su nuolatinio saugojimo objektais (failais), egzistuoja atvejai, kai pilnas užduoties arba sistemos būsena įrašoma išeities (checkpoint) tikslais — tokiu būdu procesą galima perkelti tarp sistemų arba atkurti po gedimo. Tokiu atveju papildoma saugoma informacija apima failų būsenas, atminties turinį, tinklo sesijų būsenas ir kitą pernešimui reikalingą meta-informaciją.

Architektūriniai pavyzdžiai ir skirtumai

Skirtingos procesorių architektūros ir OS sprendimai daro įtaką konteksto perjungimo detalių realizacijai. Pvz., x86 turi TSS mechanizmus, kai kurios ARM versijos turi banked registrus privilegijų režimams, o kai kurios mikroarchitektūros suteikia specialius palaikymus greitam kontekstų saugojimui/atkūrimui.

Apibendrinant: užduoties kontekstas — tai visa ta informacija, leidžianti nutraukti ir vėl atnaujinti vykdymą be būsenos praradimo. Konteksto perjungimas yra būtinas multitaskingo ir pertraukų valdymui, tačiau turi kaštų, kuriuos operacinės sistemos ir architektūros stengiasi sumažinti įvairiais optimizavimo būdais.

Klausimai ir atsakymai

K: Kas yra užduoties kontekstas informatikoje?


A: Užduoties kontekstas - tai minimalus užduotyje naudojamų duomenų rinkinys, kuris turi būti išsaugotas, kad užduotį būtų galima nutraukti tam tikrą dieną ir tęsti užduotį toje vietoje, kurioje ji buvo nutraukta, ir bet kurią kitą dieną ateityje.

K: Kokiose situacijose konteksto sąvoka yra svarbi?


A: Konteksto sąvoka tampa svarbi pertraukiamųjų užduočių atveju, kai po pertraukimo procesorius išsaugo kontekstą ir toliau vykdo pertraukimo aptarnavimo procedūrą.

K: Kodėl svarbu turėti mažesnį kontekstą?


A.: Kuo mažesnis kontekstas, tuo mažesnė uždelsimo trukmė.

K: Kur yra užduoties konteksto duomenys?


A: Užduoties konteksto duomenys yra: Kai kuriose operacinėse sistemose - valdymo registruose, kuriuos sistema naudoja užduočiai valdyti.

K.: Ar užduoties kontekstas yra susijęs su atmintimi (failais) perjungiant kontekstą?


A: Ne, perjungiant kontekstą užduoties kontekstas nesusijęs su saugojimo atmintimi (failais), net jei ji gali būti saugoma tam tikrais tikslais (kontrolinis taškas).

K: Kas nutinka procesoriui, kai nutraukiama pertraukiama užduotis?


A: Kai pertraukiama užduotis nutraukiama, procesorius išsaugo kontekstą ir toliau aptarnauja pertraukimo aptarnavimo procedūrą.

K: Kokią reikšmę užduoties kontekstas turi sistemos veikimui?


A: Užduoties kontekstas yra svarbus sistemos našumui, nes pertraukiamos užduotys gali sukelti konteksto perjungimus, o kuo mažesnis kontekstas, tuo mažesnė uždelsimo trukmė, o tai reiškia didesnį našumą.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3