close

Tråd (datavitenskap)

Gå til navigasjon Gå til søk


I operativsystemer er en tråd , lettvektsprosess eller tråd en veldig liten sekvens av kjedede oppgaver som kan utføres av et operativsystem .

Ødeleggelsen av gamle tråder av nye er en funksjon som ikke tillater et program å utføre flere oppgaver samtidig ( samtidig ). De forskjellige utførelsestrådene deler en rekke ressurser som minneplass, åpne filer, autentiseringssituasjon, etc. Denne teknikken gjør det mulig å forenkle utformingen av en applikasjon som må utføre forskjellige funksjoner samtidig.

En tråd er ganske enkelt en oppgave som kan utføres samtidig med en annen oppgave.

Tråder med utførelse som deler de samme ressursene, lagt til disse ressursene, er samlet kjent som en prosess . Det faktum at utførelsestrådene til samme prosess deler ressursene betyr at hvilken som helst av disse trådene kan endre disse ressursene. Når en tråd endrer data i minnet, får de andre trådene tilgang til de endrede dataene umiddelbart.

Det som er unikt for hver tråd er programtelleren , utførelsesstakken og CPU -tilstanden (inkludert verdien av registrene ).

Prosessen fortsetter å kjøre så lenge minst én av utførelsestrådene er aktiv. Når prosessen avsluttes, avsluttes også alle trådene. På samme måte, når alle tråder avsluttes, eksisterer ikke prosessen lenger, og alle ressursene er frigjort.

Noen programmeringsspråk har designfunksjoner som er uttrykkelig opprettet for å tillate programmerere å håndtere tråder (som Java eller Delphi ). Andre (de fleste) er uvitende om eksistensen av utførelsestråder, og disse må opprettes gjennom spesielle bibliotekanrop som avhenger av operativsystemet som disse språkene brukes i (som tilfellet er med C og C++ ).

Forskjeller mellom tråder og prosesser

Tråder skiller seg fra tradisjonelle prosesser ved at prosessene – generelt – er uavhengige, bærer mye statlig informasjon og samhandler kun gjennom kommunikasjonsmekanismer levert av systemet. På den annen side deler mange tråder generelt andre ressurser direkte. I mange av operativsystemene som tillater tråder, er det raskere å bytte fra en tråd til en annen innenfor samme prosess enn det er å bytte fra en prosess til en annen. Dette fenomenet skyldes det faktum at tråder deler data og adresserom, mens prosesser, som er uavhengige, ikke gjør det. Når du bytter fra en prosess til en annen, genererer operativsystemet (gjennom avsenderen ) det som er kjent som overhead , som er bortkastet tid av prosessoren for å utføre en kontekstswitch , i dette tilfellet flytte fra utførelsestilstanden ( kjører ) til ventetiden angi og sett den nye prosessen i gang. I trådene, siden de tilhører den samme prosessen, er tapet nesten ubetydelig når du gjør en trådendring.

Trådfunksjonalitet

I likhet med prosesser har tråder en kjørende tilstand og kan synkroniseres med hverandre for å unngå ressursdelingsproblemer. Vanligvis har hver tråd en spesifikk og bestemt oppgave, som en måte å øke effektiviteten av bruken av prosessoren.

Status for en tråd

Hovedtilstandene til trådene er: Utførelse, Klar og Blokkert. Det gir ikke mening å knytte trådopphengstilstander siden det er et prosesskonsept. I alle fall, hvis en prosess blir kastet ut av hovedminnet ( RAM ), må alle dens tråder kastes ut av hovedminnet (RAM), siden de alle deler prosessens adresserom.

Endring av tilstander

  • Oppretting: Når en prosess opprettes, opprettes en tråd for den prosessen. Denne tråden kan deretter opprette andre tråder innenfor samme prosess, og gir en instruksjonspeker og den nye trådens argumenter. Tråden vil ha sin egen kontekst og sin egen spalteplass, og vil gå til slutten av Ready.
  • Blokkering: Når en tråd må vente på en hendelse, blokkerer den (lagrer brukerregistrene, programtelleren og stabelpekere). Nå kan prosessoren bytte til å kjøre en annen tråd som er i begynnelsen av Ready mens den forrige forblir blokkert.
  • Opphev blokkering: Når hendelsen som tråden ble blokkert for inntreffer, går den til slutten av Ready.
  • Avslutning: Når en tråd avsluttes, frigjøres både konteksten og kolonnene.

Fordeler med tråder kontra prosesser

Selv om trådene er generert fra opprettelsen av en prosess, kan vi si at en prosess er en utførelsestråd, kjent som en Monothread. Men fordelene med tråder oppstår når vi snakker om multithreading, som er når en prosess har flere utførelsestråder som utfører forskjellige aktiviteter, som kanskje eller ikke kan samarbeide med hverandre. Fordelene med tråder stammer fra ytelsesimplikasjonene.

  1. Det tar mye mindre tid å lage en ny tråd i en eksisterende prosess enn det tar å lage en prosess. Noen undersøkelser fører til resultatet at dette er tilfelle med en faktor 10.
  2. Det tar mye mindre tid å drepe en tråd enn en prosess, siden når en prosess blir drept, må BCP [ 1 ] av den drepes, mens en tråds kontekst og stabel blir drept.
  3. Det tar mye mindre tid å bytte mellom to tråder i samme prosess.
  4. Tråder øker effektiviteten i kommunikasjonen mellom kjørende programmer. I de fleste systemer må kommunikasjon mellom prosesser involvere kjernen for å gi ressursbeskyttelse og utføre kommunikasjonen selv. I stedet kan de mellom trådene kommunisere med hverandre uten å påkalle kjernen. Derfor, hvis det er en applikasjon som må implementeres som et sett med relaterte utførelsesenheter, er det mer effektivt å gjøre det med en samling tråder enn med en samling separate prosesser.

Trådsynkronisering

Alle tråder deler samme adresseområde og andre ressurser som åpne filer. Enhver endring av en ressurs fra en tråd påvirker miljøet til resten av trådene i samme prosess. Derfor er det nødvendig å synkronisere aktiviteten til de forskjellige trådene slik at de ikke forstyrrer hverandre eller korrumperer datastrukturer.

En fordel med flertrådsprogrammering er at programmer kjører raskere på datasystemer med flere CPUer ( multiprosessorsystemer eller på tvers av grupper av maskiner ) siden trådene i programmet egner seg virkelig til samtidig kjøring. I et slikt tilfelle må programmereren være forsiktig med å unngå raseforhold (problem som oppstår når forskjellige tråder eller prosesser endrer data som andre også bruker), og annen uintuitiv oppførsel. Tråder krever vanligvis møte for å behandle data i riktig rekkefølge. Tråder kan kreve atomoperasjoner for å forhindre at vanlige data endres eller leses mens de blir modifisert, som semaforer vanligvis brukes til . Å neglisjere dette kan føre til fastlåsing .

Multithreading-skjemaer

Operativsystemer implementerer generelt tråder på to måter:

  • Forebyggende multithreading: Lar operativsystemet bestemme når det skal være en kontekstbryter . Ulempen med dette er at systemet kan gjøre en kontekstbytte på feil tidspunkt, noe som forårsaker et fenomen kjent som prioriteringsreversering og andre problemer.
  • Cooperativ multithreading: Det er avhengig av den samme tråden å gi opp kontrollen når den når et stopppunkt, noe som kan forårsake problemer når tråden venter på tilgjengeligheten av en ressurs.

Maskinvarestøtte for multithreading har vært tilgjengelig i lang tid, i 386 for eksempel http://en.wikipedia.org/wiki/Compaq_SystemPro . Relativt nylig er denne funksjonen brukt av allmennheten, naturlig støttet av Intel i Pentium Pro og Pentium II og III i den innenlandske versjonen. Den ble fjernet på Celerons da det ble oppdaget at den kunne låses opp og senere gjeninnføres på Pentium 4 , under navnet HyperThreading .

Mest vanlige bruksområder

De vanligste bruksområdene er i SMPP og SMS teknologier for telekommunikasjon, her er det mange prosesser som kjører samtidig og alle krever en tjeneste.

Interaktivt arbeid og bakgrunnsarbeid

For eksempel, i et regnearkprogram kan en tråd vise menyer og lese brukerinndata mens en annen tråd utfører kommandoer og oppdaterer regnearket. Dette tiltaket øker vanligvis hastigheten som oppfattes i applikasjonen, slik at programmet kan be om den neste kommandoen før den fullfører den forrige.

Asynkron behandling

Asynkrone elementer i et program kan implementeres som tråder. Et eksempel er hvordan tekstbehandlingsprogramvare lagrer midlertidige filer når du jobber i det programmet. Det opprettes en tråd hvis funksjon er å lagre en sikkerhetskopi mens brukerens skriveoperasjon fortsetter uten å forstyrre den. De er som 2 uavhengige programmer.

Utførelsesakselerasjon

For eksempel kan en batch kjøres mens en annen tråd leser neste batch fra en enhet.

Modulær strukturering av programmer

Det kan være en effektiv mekanisme for et program som utfører et stort utvalg av aktiviteter, og har dem godt atskilt ved hjelp av tråder som utfører hver enkelt av dem.

Implementeringer

Det er to brede kategorier i trådimplementering:

  • Tråder på brukernivå.
  • Tråder på kjernenivå .

Også kjent som ULT ( tråd på brukernivå ) og KLT ( tråd på kjernenivå ).

Tråder på brukernivå (ULT)

I en ren ULT-applikasjon gjøres alt trådbehandlingsarbeid av applikasjonen, og kjernen er ikke klar over eksistensen av tråder. Det er mulig å programmere en applikasjon som multithreaded ved hjelp av et bibliotek med tråder. Den inneholder koden for å opprette og ødelegge tråder, utveksle meldinger og data mellom tråder, planlegge trådkjøring og lagre og gjenopprette trådkontekst.

Alle de beskrevne operasjonene utføres i brukerområdet til samme prosess. Kjernen fortsetter å planlegge prosessen som en enhet og tilordne en enkelt tilstand (Klar, Blokkert, etc.) til den.

Fordeler med ULTer

  • Trådbytting krever ikke kjernemodusprivilegier, fordi alle datastrukturer er i brukeradresserommet til en enkelt prosess. Derfor bør ikke prosessen bytte til kjernemodus for å administrere tråder. Modusendringen overbelastning unngås og dermed kostnadene eller overheaden .
  • Spesifikk planlegging kan gjøres. Avhengig av applikasjonen kan du bestemme deg for en eller annen planlegging i henhold til fordelene.
  • ULT-er kan kjøres på alle operativsystemer. Trådbiblioteket er et felles basseng.

Ulemper med ULTer

  • I de fleste operativsystemer blokkerer systemanrop. Når en tråd foretar et systemanrop, blokkerer den seg selv og alle andre tråder i prosessen.
  • I en ren ULT-strategi kan ikke en flertrådsapplikasjon dra nytte av multiprosessorer. Kjernen tildeler en enkelt prosess til en enkelt prosessor, siden kjernen ikke er involvert, ser den på settet med tråder som en enkelt prosess.

En løsning for å blokkere gjennom systemanrop er å bruke jacketing -teknikken , som er å konvertere et blokkerende anrop til et ikke-blokkerende; dette oppnås ved først å sjekke om systemanropet vil blokkere prosessen eller ikke. I så fall blokkeres tråden og kontrollen overføres til en annen tråd. Senere reaktiveres den blokkerte tråden og kontrollen utføres på nytt, inntil systemanropet kan foretas uten at hele prosessen blokkeres. [ 2 ]

Tråding på kjernenivå (KLT)

I en ren KLT-applikasjon gjøres alt trådbehandlingsarbeid av kjernen. I applikasjonsområdet er det ingen trådbehandlingskode, kun et API (Application Program Interface) for trådhåndtering i kjernen. Windows 2000 , Linux og OS/2 bruker denne metoden. Linux bruker en veldig spesiell metode der den ikke skiller mellom prosesser og tråder. For Linux, hvis flere prosesser opprettet med "klone"-systemkallet deler det samme virtuelle adresserommet, behandles de som tråder av operativsystemet, og administreres logisk av kjernen.

Fordeler med KLT

  • Kjernen kan samtidig planlegge flere tråder av samme prosess på flere prosessorer.
  • Hvis en tråd er blokkert, kan du planlegge en annen tråd fra samme prosess.
  • Selve kjernefunksjonene kan være flertrådede.

Ulemper med KLT

  • Å overføre kontroll fra en tråd til en annen krever en modusbytte til kjernemodus.

ULT og KLT kombinasjoner

Noen Linux-distribusjoner og UNIX-derivater tilbyr kombinasjonen av ULT og KLT, for eksempel Solaris , Ubuntu og Fedora .

Trådoppretting, så vel som det meste av planlegging og synkronisering av en applikasjons tråder, gjøres utelukkende i brukerrommet. Flere ULT-er fra en enkelt applikasjon er assosiert med flere KLT-er. Programmereren kan justere antall KLT-er for hver applikasjon og maskin for å oppnå det beste totalresultatet.

I en kombinert metode kan flere tråder i en applikasjon kjøres parallelt på flere prosessorer, og blokkering av systemanrop trenger ikke blokkere hele prosessen.

Se også

Referanser

  1. BCP -verktøy
  2. William Stallings. Operativsystemer: Internaler og designprinsipper . PearsonEducation. ISBN  9780133806168 .