Lettvektsprosess - Light-weight process

I data operativsystemer , en lett-vekt prosess ( lwp ) er et middel for å oppnå fleroppgavekjøring . I den tradisjonelle betydningen av begrepet, som brukt i Unix System V og Solaris , kjører en LWP i brukerområdet på toppen av en enkelt kjernetråd og deler adresserommet og systemressursene med andre LWPer i samme prosess . Flere tråder på brukernivå , administrert av et trådbibliotek, kan plasseres på toppen av en eller flere LWPer - slik at multitasking kan gjøres på brukernivå, noe som kan ha noen ytelsesfordeler.

I noen operativsystemer er det ikke noe eget LWP-lag mellom kjernetråder og brukertråder. Dette betyr at brukertråder implementeres direkte på toppen av kjernetråder. I disse sammenhengene refererer begrepet "lettvektsprosess" vanligvis til kjernetråder, og begrepet "tråder" kan referere til brukertråder. På Linux implementeres brukertråder ved å la visse prosesser dele ressurser, noe som noen ganger fører til at disse prosessene blir kalt "lette vektprosesser". I SunOS versjon 4 og utover (før Solaris ) refererte "lettvektsprosess" til brukertråder.

Kjernetråder

Kjernetråder håndteres helt av kjernen . De trenger ikke være assosiert med en prosess; en kjerne kan opprette dem når den trenger å utføre en bestemt oppgave. Kjernetråder kan ikke kjøres i brukermodus. LWPer (i systemer hvor de er et eget lag) binder seg til kjernetråder og gir en brukernivå-kontekst. Dette inkluderer en lenke til de delte ressursene i prosessen som LWP tilhører. Når en LWP er suspendert, må den lagre brukernivåregistrene til den gjenopptas, og den underliggende kjernetråden må også lagre sine egne kjerne-nivåregistre.

Opptreden

LWP er tregere og dyrere å lage enn brukertråder. Hver gang en LWP opprettes, må det først foretas et systemanrop for å opprette en tilsvarende kjernetråd, noe som forårsaker en bytte til kjernemodus. Disse modusbryterne vil vanligvis innebære kopiering av parametere mellom kjernen og brukerområdet, og det kan også hende at kjernen må ha ekstra trinn for å verifisere parametrene for å sjekke om ugyldig oppførsel. En kontekstveksling mellom LWP-er betyr at LWP-en som blir forutgående må lagre sine registre, og deretter gå inn i kjernemodus for at kjernetråden skal lagre sine registre, og LWP-en som er planlagt må gjenopprette kjerne- og brukerregistrene separat også.

Av denne grunn tillater noen trådbiblioteker på brukernivå at flere brukertråder kan implementeres på toppen av LWP-er. Brukertråder kan opprettes, ødelegges, synkroniseres og byttes helt i brukerområdet uten systemanrop og bytter til kjernemodus. Dette gir en betydelig ytelsesforbedring i trådopprettelsestid og kontekstbrytere. Imidlertid er det vanskeligheter med å implementere en trådplanlegger på brukernivå som fungerer godt sammen med kjernen.

Aktivering av planlegger

Mens brukertrådebiblioteket vil planlegge brukertråder, vil kjernen planlegge de underliggende LWP-ene. Uten koordinering mellom kjernen og trådbiblioteket kan kjernen ta suboptimale planleggingsbeslutninger. Videre er det mulig for tilfeller av fastlåst tilstand når brukertråder distribuert over flere LWP-er prøver å skaffe seg de samme ressursene som brukes av en annen brukertråd som ikke kjører for øyeblikket.

En løsning på dette problemet er planleggeraktivering. Dette er en metode for kjernen og trådbiblioteket for å samarbeide. Kjernen varsler trådbibliotekets planlegger om visse hendelser (for eksempel når en tråd er i ferd med å blokkere), og trådbiblioteket kan ta en beslutning om hvilken handling du skal gjøre. Varslingsanropet fra kjernen kalles en "upcall".

Et brukernivåbibliotek har ingen kontroll over den underliggende mekanismen, det mottar bare varsler fra kjernen og planlegger brukertråder til tilgjengelige LWPer, ikke prosessorer. Kjernens planlegger bestemmer deretter hvordan du skal planlegge LWP-ene på prosessorene. Dette betyr at LWP-er kan sees på av trådbiblioteket som "virtuelle prosessorer".

Støtter operativsystemer

Solaris har implementert et eget LWP-lag siden versjon 2.2. Før versjon 9 tillot Solaris en mange-til-mange-kartlegging mellom LWP-er og brukertråder. Dette ble imidlertid pensjonert på grunn av kompleksiteten det introduserte og ytelsesforbedringer til kjerneplanleggeren.

UNIX System V og dets moderne derivater IRIX , SCO OpenServer , HP-UX og IBM AIX tillater mange-til-mange-kartlegging mellom brukertråder og LWP-er.

Implementeringer

Se også

Referanser

Eksterne linker