Kontekst og prosesshåndtak. Prosess konsept. Prosessstyring operativsystem undersystem. Prosess stater. Prosesskontekst og deskriptor Prosessstyringsdelsystem

Oppgavestyringssystemet sikrer deres passasje gjennom datamaskinen. Avhengig av tilstanden til prosessen, må den tildele en eller annen ressurs. For eksempel må en ny prosess plasseres i minnet ved å tildele adresseplass til den; inkludere i listen over oppgaver som konkurrerer om prosessortid.

Et av hovedundersystemene til et multiprogram OS som direkte påvirker funksjonen til en datamaskin er undersystem for prosess og trådstyring. Den tar for seg deres opprettelse og ødeleggelse, og fordeler også prosessortid mellom samtidig eksisterende prosesser og tråder i systemet.

Når flere oppgaver kjører samtidig på et system, selv om tråder opprettes og kjøres asynkront, kan de trenge å samhandle, for eksempel ved utveksling av data. Derfor er trådsynkronisering en av de viktige funksjonene til undersystemet for prosess og trådstyring.

Kommunikasjon mellom prosesser utføres ved hjelp av delte variabler og spesielle grunnleggende operasjoner kalt primitiver.

Prosess- og trådstyringsundersystemet har evnen til å utføre følgende operasjoner på prosesser:

– opprettelse (gyting)/ødeleggelse av en prosess;

– pause/gjenoppta prosessen;

– blokkere/vekke prosessen;

– start prosessen;

– endring av prosessprioritet;

Prosess- og trådstyringsundersystemet er ansvarlig for å gi prosessene nødvendige ressurser. OS opprettholder spesielle informasjonsstrukturer i minnet, der det registrerer hvilke ressurser som er allokert til hver prosess. En ressurs kan tilordnes en prosess for eget bruk eller for delt bruk med andre prosesser. Noen av ressursene allokeres til en prosess når den opprettes, og noen tildeles dynamisk basert på forespørsler under kjøring. Ressurser kan tildeles en prosess for hele livet eller bare for en viss periode. Når du utfører disse funksjonene, samhandler promed andre OS-undersystemer som er ansvarlige for ressursstyring, slik som minnestyringsundersystemet, input/output-undersystemet og filsystemet.

1. Opprette og slette prosesser og tråder

Å skape en prosess betyr først og fremst å skape prosesshåndtak, som er en eller flere informasjonsstrukturer som inneholder all informasjon om prosessen som er nødvendig for at operativsystemet skal kunne administrere den. Dette problemet ble diskutert i detalj tidligere, nå husker vi bare at slik informasjon kan inkludere for eksempel en prosessidentifikator, data om plasseringen av den kjørbare modulen i minnet, graden av privilegium til prosessen (prioritet og tilgangsrettigheter), etc.

Å lage en prosess innebærer å laste inn kodene og dataene til prosessens kjørbare program fra disk til RAM. I dette tilfellet samhandler prosessstyringsundersystemet med minnestyringsundersystemet og filsystemet. I et flertrådet system, når en prosess opprettes, oppretter operativsystemet minst én utførelsestråd for hver prosess. Når du oppretter en tråd, akkurat som når du oppretter en prosess, genererer operativsystemet en spesiell informasjonsstruktur - en trådbeskrivelse, som inneholder trådidentifikatoren, data om tilgangsrettigheter og prioritet, trådtilstand, etc. Når den er opprettet, er en tråd (eller prosess) i en tilstand av klargjøring for utførelse (eller i en inaktiv tilstand i tilfellet med et OS med spesielle formål).

Oppgaver opprettes og slettes basert på passende forespørsler fra brukere eller andre oppgaver. En oppgave kan skape en ny oppgave - i mange systemer kan en tråd kontakte OS med en forespørsel om å opprette en såkalt. barnestrømmer. Genereringsoppgaven kalles "forfedre" eller "foreldre", og underordnet oppgave kalles "etterkommer" eller "barneoppgave". En "forfader" kan suspendere eller slette sin underordnede oppgave, mens et "barn" ikke kan administrere "forfedre".

Ulike operativsystemer strukturerer forholdet mellom barnetråder og deres foreldre forskjellig. I noen operativsystemer er kjøringen deres synkronisert (etter at den overordnede tråden avsluttes, fjernes alle dens underordnede fra kjøringen), i andre kjøres barn asynkront i forhold til den overordnede tråden.

Etter at prosessen er fullført, "renser operativsystemet spor" av sin tilstedeværelse i systemet - lukker alle filer som prosessen fungerte med, frigjør områder med RAM som er tildelt for koder, data og systeminformasjonsstrukturer for prosessen. OS-køer og ressurslister som inneholdt referanser til prosessen som avsluttes, blir korrigert.

2. Planlegging og utsendelse av prosesser og tråder

Planleggingsstrategien bestemmer hvilke prosesser som velges for å utføres for å nå målet. Strategier kan være forskjellige, for eksempel:

– om mulig, fullfør beregningene i samme rekkefølge som de ble startet;

– gi preferanse til kortere prosesser;

– gi alle brukere (brukeroppgaver) de samme tjenestene, inkludert samme ventetid.

I løpet av en prosess levetid kan utførelsen av dens tråder avbrytes og fortsettes mange ganger.

Overgangen fra utførelsen av en tråd til en annen utføres som et resultat av planlegger Og utsendelse.

Planlegger tråder implementeres basert på informasjon lagret i prosess- og trådbeskrivelser. Ved planlegging kan prioriteten til tråder, tiden de venter i køen, akkumulert utførelsestid, intensiteten av I/O-tilgang og andre faktorer tas i betraktning. OS planlegger at tråder skal kjøres uavhengig av om de tilhører samme eller forskjellige prosesser. Planlegging forstås som oppgaven med å velge et slikt sett med prosesser slik at de kommer minst mulig i konflikt under utførelse og bruker datasystemet så effektivt som mulig.

I ulike informasjonskilder er det ulike tolkninger av begrepene «planlegging» og «utsendelse». Dermed deler noen forfattere planlegging inn i langsiktig (global) og kortsiktig (dynamisk, dvs. den nåværende mest effektive distribusjonen), og sistnevnte kalles utsendelse. I følge andre kilder forstås utsendelse som gjennomføring av et vedtak tatt på planleggingsstadiet. Vi vil holde oss til dette alternativet.

Planlegger inkluderer å løse to problemer:

bestemme tidspunktet for endring av den aktive tråden;

velge en tråd som skal kjøres fra en kø med klare tråder.

Det er mange planleggingsalgoritmer som løser disse problemene på forskjellige måter. Det er planleggingsfunksjonene som bestemmer spesifikasjonene til operativsystemet. La oss se på dem litt senere.

I de fleste operativsystemer utføres planlegging dynamisk, dvs. beslutninger tas under arbeid basert på en analyse av dagens situasjon. Tråder og prosesser vises på tilfeldige tidspunkter og avsluttes uforutsigbart.

Statisk planleggingstypen kan brukes i spesialiserte systemer der hele settet med samtidig utførende oppgaver er definert på forhånd (sanntidssystemer). Planleggeren lager en tidsplan basert på kunnskap om egenskapene til et sett med oppgaver. Denne tidsplanen brukes deretter av operativsystemet for planlegging.

Utsending består i å implementere løsningen som er funnet som følge av planlegging, d.v.s. ved å bytte en prosess til en annen. Utsendelse kommer ned på følgende:

lagre konteksten til den gjeldende tråden som må endres;

lanserer en ny tråd for utførelse.

Konteksten til tråden gjenspeiler for det første tilstanden til datamaskinmaskinvaren på tidspunktet for avbruddet (verdien av programtelleren, innholdet i generelle registre, prosessorens driftsmodus, flagg, avbruddsmasker og andre parametere ), og for det andre parametrene til driftsmiljøet (lenker til åpne filer, data om uferdige I/O-operasjoner, feilkoder utført av en gitt tråd med systemanrop, etc.).

I sammenheng med en tråd kan vi skille mellom en del som er felles for alle tråder i en gitt prosess (lenker til åpne filer), og en del som kun relaterer seg til en gitt tråd (innholdet i registre, programtelleren, prosessormodus). For eksempel, i NetWare-miljøet er det tre typer kontekster - global kontekst (prosesskontekst), trådgruppekontekst og individuell trådkontekst. Forholdet mellom dataene i disse kontekstene ligner på forholdet mellom globale og lokale variabler i et program. Den hierarkiske organiseringen av kontekster fremskynder trådbytte: når du bytter fra en tråd i en gruppe til en tråd i en annen gruppe innenfor samme prosess, endres ikke den globale konteksten, men bare gruppekonteksten endres. Global kontekstbytte skjer bare når du flytter fra tråden til en prosess til tråden til en annen prosess.

3. Planleggingsalgoritmer

Fra synspunktet om å løse det første planleggingsproblemet (velge tidspunktet for å endre den aktive tråden), er planleggingsalgoritmer delt inn i to store klasser - forebyggende og ikke-forebyggende algoritmer:

ikke-repressive– den aktive tråden kan kjøres til den selv overfører kontroll til systemet slik at den velger en annen klar tråd fra køen;

fortrengende– operativsystemet bestemmer seg for å endre oppgaven som utføres og bytter prosessoren til en annen tråd.

Hovedforskjellen mellom disse planleggingsalgoritmene er graden av sentralisering av trådplanleggingsmekanismen. La oss vurdere de viktigste egenskapene, fordelene og ulempene ved hver klasse av algoritmer.

Ikke-forebyggende algoritmer. Søknadsprogram, etter å ha mottatt kontroll fra OS, bestemmer den selv tidspunktet for fullføring av neste syklus av utførelse og overfører først deretter kontrollen til OS ved hjelp av et systemanrop. Følgelig går brukerkontrollen over applikasjonen tapt i en vilkårlig tidsperiode. Utviklere må ta hensyn til dette og lage applikasjoner slik at de fungerer "i deler", med jevne mellomrom avbryter og overfører kontroll til systemet, dvs. Under utviklingen utføres også funksjonene til en planlegger.

Fordeler denne tilnærmingen:

– avbrudd av strømmen på et ubeleilig tidspunkt er utelukket;

– problemet med samtidig bruk av data er løst, fordi under hver utførelsessyklus bruker oppgaven dem eksklusivt og er sikker på at ingen andre kan endre dem;

– høyere hastighet for å bytte fra strøm til strøm.

Ulemper er vanskelig programutvikling og økte krav til programmererens kvalifikasjoner, samt muligheten for at én tråd tar over prosessoren dersom den ved et uhell eller med vilje går i løkker.

Forebyggende algoritmer– en syklisk eller sirkulær type planlegging, der operativsystemet selv bestemmer om det skal avbrytes den aktive applikasjonen og bytter prosessoren fra en oppgave til en annen i henhold til et eller annet kriterium. I et system med slike algoritmer trenger ikke programmereren å bekymre seg for det faktum at applikasjonen hans vil bli utført samtidig med andre oppgaver. Eksempler inkluderer operativsystemene UNIX, Windows NT/2000, OS/2. Algoritmer i denne klassen er fokusert på applikasjoner med høy ytelse.

Forebyggende algoritmer kan være basert på konseptet kvantisering eller på en prioritetsmekanisme.

Algoritmer basert på kvantisering. Hver tråd får et begrenset kontinuerlig stykke prosessortid (verdien bør ikke være mindre enn 1 ms - vanligvis flere titalls ms). En tråd flyttes fra en løpende tilstand til en klar tilstand hvis kvantumet er oppbrukt. Kvanta kan være den samme for alle flyter eller forskjellige.

Når du tildeler kvanter til en tråd, kan forskjellige prinsipper brukes: disse kvantene kan ha en fast verdi eller endre seg i forskjellige perioder av trådens levetid. For eksempel, for en spesifikk strømning, kan det første kvantumet være ganske stort, og hvert påfølgende kvantum som er allokert til det kan ha en kortere varighet (reduksjon til spesifiserte grenser). Dette skaper en fordel for kortere tråder, og langvarige oppgaver flytter seg i bakgrunnen. Et annet prinsipp er basert på det faktum at prosesser som ofte utfører I/O-operasjoner ikke fullt ut utnytter tidsskivene som er tildelt dem. For å kompensere for denne urettferdigheten kan det dannes en egen kø fra slike prosesser, som har privilegier over andre tråder. Når du velger neste tråd for kjøring, skannes først denne køen, og bare hvis den er tom, velges en tråd fra den generelle køen klar for kjøring.

Disse algoritmene bruker ingen tidligere informasjon om oppgavene. Tjenestedifferensiering i i dette tilfellet er basert på "eksistenshistorien" til strømmen i systemet.

Fra synspunktet til det andre planleggingsproblemet (prinsippet om å velge å kjøre neste tråd), kan algoritmer også betinget deles inn i klasser: ikke-prioriterte og prioriterte algoritmer. Med ikke-prioritert vedlikehold velges neste oppgave i en viss forhåndsbestemt rekkefølge uten å ta hensyn til deres relative betydning og vedlikeholdstid. Ved implementering av prioriterte disipliner blir enkelte oppgaver prioritert for å gå inn i utførelsestilstand.

La oss nå se på noen av de vanligste planleggingsdisiplinene.


Førstemann til mølla-tjenesten. Prosessoren tildeles etter FIFO-prinsippet (First In First Out), dvs. i den rekkefølgen forespørsler om tjeneste mottas i. Denne tilnærmingen lar deg implementere strategien med å "fullføre beregninger i den rekkefølgen de vises når det er mulig." De oppgavene som ble blokkert under utførelse, etter å ha gått inn i klartilstanden, står i kø foran de oppgavene som ennå ikke er utført. Dermed opprettes to køer: en av oppgaver som ennå ikke er utført, og den andre med oppgaver som har gått over fra ventende tilstand.

Denne disiplinen implementeres som ikke-forebyggende når oppgaver frigir prosessoren frivillig.

Verdighet Denne algoritmen er enkel å implementere. Ulempe– under stor belastning tvinges korte oppgaver til å vente lenge i systemet. Følgende tilnærming eliminerer denne ulempen.

Den korteste prosessen serveres først. I henhold til denne algoritmen tilordnes tråden med minimum estimert tid som kreves for å fullføre arbeidet ved siden av utførelse. Her foretrekkes tråder som har kort tid igjen før de fullføres. Dette reduserer antallet ventende oppgaver i systemet. Ulempe er behovet for å vite estimerte tider på forhånd, noe som ikke alltid er mulig. Som en grov tilnærming kan du i noen tilfeller bruke tiden tråden brukte sist på å motta kontroll.

Algoritmen tilhører kategorien ikke-forebyggende, prioritetsfri.

De navngitte algoritmene kan brukes for batch-driftsmoduser, når brukeren ikke forventer at systemet svarer. For interaktiv databehandling er det først og fremst nødvendig å sikre akseptabel responstid og lik service for multiterminalsystemer. For enkeltbrukersystemer er det ønskelig at de programmene det jobbes direkte med har bedre responstider enn bakgrunnsjobber. I tillegg må enkelte applikasjoner, mens de kjøres uten direkte brukerinteraksjon, fortsatt være garantert å motta sin del av prosessortiden (for eksempel et e-postprogram). For å løse slike problemer brukes prioriterte tjenestemetoder og begrepet kvantisering.


Karusell disiplin, eller sirkulærR.R.(Round Robin). Denne disiplinen refererer til forebyggende algoritmer og er basert på kvantisering. Hver oppgave mottar prosessortid i porsjoner - kvantum. Etter slutten av tidskvantumet fjernes oppgaven fra prosessoren og plasseres på slutten av køen av prosesser klare for utførelse, og neste oppgave godtas for service av prosessoren. For optimal drift av systemet er det nødvendig å velge loven riktig i henhold til hvilke tidsskiver som tildeles oppgaver.

Kvanteverdien er valgt som et kompromiss mellom den akseptable systemets responstid på brukerforespørsler (slik at deres enkleste forespørsler ikke forårsaker lange ventetider) og overheadkostnadene ved oppgaver som ofte endres. Når det avbrytes, må operativsystemet lagre en tilstrekkelig stor mengde informasjon om den gjeldende prosessen, sette håndtaket på den kansellerte oppgaven i en kø og laste inn konteksten til den nye oppgaven. Med en liten tidsdel og hyppige brytere vil den relative andelen av slike overhead bli stor, og dette vil forringe ytelsen til systemet som helhet. Hvis tidsstykket er stort og køen av klare oppgaver øker, vil systemresponsen bli dårlig.

I noen operativsystemer er det mulig å eksplisitt spesifisere verdien til en tidsdel eller det tillatte området for verdiene. For eksempel, i OS/2, bruker CONFIG.SYS-filen TIMESLICE-operatoren til å spesifisere minimums- og maksimumsverdiene for en tidsdel: TIMESLICE=32.256 indikerer at tidsdelen kan endres fra 32 til 256 millisekunder.

Denne tjenestedisiplinen er en av de vanligste. I noen tilfeller, når operativsystemet ikke eksplisitt støtter round-robin planleggingsdisiplinen, kan slikt vedlikehold organiseres kunstig. For eksempel bruker noen RTOS planlegging med absolutte prioriteter, og når prioriteringene er like, gjelder køprinsippet. Det vil si at bare en oppgave med høyere prioritet kan fjerne en oppgave fra utførelse. Om nødvendig, organiser tjenesten jevnt og likt, d.v.s. For å sikre at alle jobber får samme tidssnitt, kan systemansvarlig selv gjennomføre slik service. For å gjøre dette er det nok å tilordne de samme prioriteringene til alle brukeroppgaver og opprette en høyprioritert oppgave, som ikke skal gjøre noe annet enn å planlegges for utførelse på en tidtaker med angitte tidsintervaller. Denne oppgaven vil bare fjerne gjeldende applikasjon fra kjøring, den vil flytte til slutten av køen, og selve oppgaven vil umiddelbart forlate prosessoren og gi den til neste prosess i køen.

I sin enkleste implementering forutsetter karusellservicedisiplin at alle jobber har samme prioritet. Hvis det er nødvendig å innføre en prioritert servicemekanisme, organiseres vanligvis flere køer, avhengig av prioriteter, og service av en lavere prioritet kø utføres kun når den høyere prioritetskøen er tom. Denne algoritmen brukes til å planlegge i OS/2 og Windows NT-systemer.

Planlegging etter prioriteringer.

Et viktig konsept som ligger til grunn for mange forebyggende algoritmer er preemptive service. Slike algoritmer bruker informasjon som finnes i flytdeskriptoren - dens prioritet. Ulike systemer definerer prioritet forskjellig. I noen systemer kan den høyeste prioritetsverdien vurderes numerisk høyeste verdi, i andre, tvert imot, anses høyeste prioritet som null.

Vanligvis er prioriteten til en tråd direkte relatert til prioriteten til prosessen der tråden kjøres. Prosessprioritet tilordnet av operativsystemet når det opprettes, tar hensyn til om prosessen er et system eller en applikasjon, hva er statusen til brukeren som startet prosessen, og om det var en eksplisitt brukerinstruksjon om å tildele en viss prioritet til prosessen. Prioritetsverdien er inkludert i prosesshåndtaket og brukes når du tildeler prioritet til trådene. Hvis en tråd ikke initieres av en brukerkommando, men som et resultat av at en annen tråd utfører et systemkall, må operativsystemet ta hensyn til parametrene til systemkallet for å gi den prioritet.

Ved planlegging av programvedlikehold i henhold til de tidligere beskrevne algoritmene kan det oppstå en situasjon der noen kontroll- eller styringsoppgaver ikke kan implementeres over lengre tid på grunn av økende belastning i systemet (spesielt i RTOS). Dessuten kan konsekvensene på grunn av utidig fullføring av slike oppgaver være mer alvorlige enn på grunn av manglende fullføring av enkelte programmer med høyere prioritet. I dette tilfellet vil det være tilrådelig å midlertidig endre prioriteten til "nødoppgaver" (de hvis behandlingstid er utløpt), og etter utførelse gjenopprette den forrige verdien. Innføringen av mekanismer for dynamisk endring av prioriteringer gjør det mulig å implementere en raskere systemrespons på korte brukerforespørsler (noe som er viktig under interaktivt arbeid), men samtidig garantere oppfyllelse av eventuelle forespørsler.

Så prioriteringen kan være statisk(fast) eller dynamisk(endrer system avhengig av situasjonen i det). Såkalt basistrådprioritet avhenger direkte av den grunnleggende prioriteringen til prosessen som genererte den. I noen tilfeller kan systemet øke prioriteten til en tråd (og i varierende grad), for eksempel hvis prosessortidsdelen som er tildelt den ikke er fullt ut brukt, eller senke prioriteten på annen måte. For eksempel prioriterer operativsystemet mer til tråder som venter på tastaturinndata og mindre til tråder som utfører diskoperasjoner. I noen systemer som bruker en dynamisk prioritetsmekanisme, brukes ganske komplekse formler for å endre prioriteten, som involverer verdiene til de grunnleggende prioriteringene, belastningsgraden til datasystemet, den opprinnelige prioritetsverdien spesifisert av brukeren, etc. .

Det er to typer prioritert planlegging: vedlikehold med relative prioriteringer og service med absolutte prioriteringer. I begge tilfeller utføres valget av en tråd for utførelse på samme måte - tråden med høyest prioritet velges, og tidspunktet for endring av den aktive tråden bestemmes annerledes. I et relativ prioritetssystem kjører den aktive tråden til den forlater prosessoren (enten venter, en feil oppstår eller tråden avsluttes). I et system med absolutte prioriteter, oppstår avbrudd av den aktive tråden, i tillegg til de angitte årsakene, også hvis en tråd med høyere prioritet enn den aktive dukker opp i køen av klare tråder. Deretter avbrytes den løpende tråden og settes i klar tilstand.

Et system med relativ prioritetsplanlegging minimerer byttekostnadene, men en enkelt oppgave kan oppta prosessoren i lang tid. Denne tjenestemodusen er ikke egnet for tidsdeling og sanntidssystemer, men i batchbehandlingssystemer (for eksempel OS/360) er den mye brukt. Absolutt prioritet planlegging er egnet for anleggsstyringssystemer hvor rask respons på hendelser er viktig.

Blandet planleggingstype brukt i mange operativsystemer: prioritetsbaserte planleggingsalgoritmer kombineres med konseptet kvantisering.

UTVIKLING AV EN MODUL FOR OPPLÆRINGSoperativsystem

Retningslinjer

for kursdesign i faget

"OS"

for heltidsstudenter

veibeskrivelse

INTRODUKSJON. 4

1. Teoretisk del. 4

1.1. Undersystem for prosesskontroll. 4

1.1.1. Kontekst og prosesshåndtak. 5

1.1.2. Prosessplanleggingsalgoritmer. 6

1.1.3. Forebyggende og ikke-forebyggende planleggingsalgoritmer. 9

1.1.4. Prosessmodell og funksjoner til prosessstyringsundersystemet til det pedagogiske operativsystemet 12

1.2. Undersystem for minneadministrasjon.. 17

1.2.1. Sidedistribusjon. 18

1.2.2. Segmentfordeling. 22

1.2.3. Sidesegmentdistribusjon. 23

1.2.4. Algoritmer for sideerstatning. 24

1.3. Filbehandling. tretti

1.3.1. Filnavn. tretti

1.3.2. Filtyper. 32

1.3.3. Fysisk organisasjon og filadresse. 33

2. Prosedyre for gjennomføring av kursprosjektet. 38

3. Alternativer for oppgaver. 39

Bibliografi 42

APPENDIKS A... 43

INTRODUKSJON

Formålet med emneprosjektet: å studere teoretisk grunnlag bygge operativsystemmoduler. Få praktiske ferdigheter i å utvikle et program som er en del av operativsystemet.

Teoretisk del

Funksjonene til en frittstående datamaskins operativsystem er vanligvis gruppert enten i henhold til typene lokale ressurser som operativsystemet administrerer eller i henhold til spesifikke oppgaver som gjelder for alle ressurser. Noen ganger kalles slike grupper av funksjoner undersystemer. De viktigste undersystemene er undersystemene for prosess, minne, fil og ekstern enhetsadministrasjon, og delsystemene som er felles for alle ressursene er brukergrensesnitt, databeskyttelse og administrasjonsundersystemer.

Undersystem for prosesskontroll

Den viktigste delen av operativsystemet, som direkte påvirker datamaskinens funksjon, er undersystemet for prosesskontroll. For hver nyopprettede prosess genererer operativsystemet systeminformasjonsstrukturer som inneholder data om prosessens behov for datasystemressurser, samt om ressursene som faktisk er allokert til den. Dermed kan en prosess også defineres som en applikasjon for forbruk av systemressurser.

For at en prosess skal utføres, må operativsystemet tildele den et område med RAM for å huse prosessens kode og data, og gi den den nødvendige mengden prosessortid. I tillegg kan prosessen trenge tilgang til ressurser som filer og I/O-enheter.

I et multitasking-system kan en prosess være i en av tre hovedtilstander:

RUNNING - den aktive tilstanden til en prosess, hvor prosessen har alle nødvendige ressurser og utføres direkte av prosessoren;

WAITING er den passive tilstanden til en prosess, prosessen er blokkert, den kan ikke utføres av sine egne interne årsaker, den venter på at en hendelse skal inntreffe, for eksempel fullføring av en I/O-operasjon, mottak av en melding fra en annen prosess , eller frigjøring av en ressurs den trenger;

KLAR er også en passiv tilstand av en prosess, men i dette tilfellet er prosessen blokkert på grunn av omstendigheter utenfor den: prosessen har alle ressursene som kreves for den, den er klar til å utføre, men prosessoren er opptatt med å utføre en annen prosess.

I løpet av livssyklusen beveger hver prosess seg fra en tilstand til en annen i samsvar med prosessplanleggingsalgoritmen implementert i et gitt operativsystem. En typisk graf for prosesstilstand er vist i figur 1.1.

Figur 1.1 — Prosesstilstandsgraf i et multitasking-miljø

I et enkeltprosessorsystem kan det bare være én prosess i RUNNING-tilstanden, og i hver av WAITING- og READY-tilstandene kan det være flere prosesser; disse prosessene danner køer av henholdsvis ventende og klare prosesser.

Livssyklus prosessen begynner med READY-tilstanden, når prosessen er klar til å utføres og venter på sin tur. Når den er aktivert, går prosessen inn i KJØR-tilstanden og forblir i den til enten den frigjør selve prosessoren, går inn i VENTER-tilstanden for en eller annen hendelse, eller den blir tvangskastet ut av prosessoren, for eksempel på grunn av utmattelse av de tildelte denne prosessen CPU-tid kvantum. I sistnevnte tilfelle går prosessen tilbake til KLAR-tilstanden. Prosessen går over til denne tilstanden fra WAITING-tilstanden etter at den forventede hendelsen inntreffer.

Artikler å lese:

Grunnleggende om programmering. Prosessledelse

prosessisolasjon;
  • planlegge utførelse av prosesser og tråder (generelt bør vi også snakke om planlegging av oppgaver);
  • utsendelse av tråder;
  • organisering av interprosess interaksjon;
  • synkronisering av prosesser og tråder;
  • avslutning og ødeleggelse av prosesser og tråder.
  • Fem hovedhendelser fører til opprettelsen av en prosess:

  • oppfylle en løpende prosess forespørsel om å opprette en prosess;
  • en brukerforespørsel om å opprette en prosess, for eksempel når du logger på interaktivt;
  • starte en batchjobb;
  • opprettelse av operativsystemet av en prosess som er nødvendig for driften av alle tjenester.
  • Vanligvis, når OS starter, opprettes flere prosesser. Noen av dem er høyt prioriterte prosesser som samhandler med brukere og utfører tildelt arbeid. De resterende prosessene er bakgrunnsprosesser, de er ikke knyttet til bestemte brukere, men utfører spesielle funksjoner - for eksempel relatert til e-post, websider, utskrift, overføring av filer over nettverket, periodisk lansering av programmer (for eksempel, diskdefragmentering) etc. Bakgrunnsprosesser kalles demoner.

    En ny prosess kan opprettes på forespørsel fra den gjeldende prosessen. Å lage nye prosesser er nyttig i tilfeller der oppgaven som utføres lettest kan formes som et sett av relaterte, men likevel uavhengige, samvirkende prosesser. I interaktive systemer kan brukeren starte et program ved å skrive en kommando på tastaturet eller ved å dobbeltklikke på programikonet. I begge tilfeller opprettes en ny prosess og programmet lanseres i den. I batchbehandlingssystemer på stormaskiner sender brukere inn en jobb (eventuelt ved hjelp av ekstern tilgang), og operativsystemet oppretter en ny prosess og starter neste jobb fra køen når de nødvendige ressursene er frigjort.

    Fra et teknisk synspunkt, i alle disse tilfellene, dannes en ny prosess på samme måte: den nåværende prosessen oppfyller en systemforespørsel om å opprette en ny prosess. Prosess- og trådstyringsundersystemet er ansvarlig for å gi prosessene nødvendige ressurser. OS opprettholder spesielle informasjonsstrukturer i minnet, der det registrerer hvilke ressurser som er allokert til hver prosess. Den kan tildele ressurser til en prosess for enebruk eller delt bruk med andre prosesser. Noen av ressursene allokeres til prosessen når den opprettes, og noen tildeles dynamisk basert på forespørsler i løpet av ledetid. Ressurser kan allokeres til en prosess for hele livet eller bare for en viss periode. Når du utfører disse funksjonene, samhandler prosesskontrollundersystemet med andre OS-undersystemer som er ansvarlige for ressursforvaltning, for eksempelt, input/output undersystem, filsystem.

    For å hindre at prosesser forstyrrer ressurstildeling, og heller ikke kunne skade hverandres koder og data, er den viktigste oppgaven til operativsystemet å isolere en prosess fra en annen. For dette operativsystem gir hver prosess et eget virtuelt adresseområde slik at ingen prosess kan få direkte tilgang til kommandoene og dataene til en annen prosess.

    I et operativsystem der prosesser og tråder eksisterer, anses en prosess som en forespørsel om å forbruke alle typer ressurser bortsett fra én - prosessortid. Denne kritiske ressursen distribueres av operativsystemet blant andre arbeidsenheter - tråder, som fikk navnet sitt på grunn av det faktum at de representerer sekvenser (utførelsestråder) av kommandoer. Overgangen fra utførelsen av en tråd til en annen utføres som et resultat av planlegger Og utsendelse. Arbeidet med å bestemme når gjeldende tråd skal avbrytes og tråden som skal få kjøre kalles planlegging. Trådplanlegging gjøres basert på informasjon som er lagret i prosess- og trådbeskrivelser. Ved planlegging tas det hensyn til det trådprioritet, deres ventetid i kø, akkumulert ledetid, intensiteten av I/O-tilgang og andre faktorer.

    Ekspedisjon består i å implementere løsningen funnet som følge av planlegging, d.v.s. ved å bytte prosessor fra en tråd til en annen. Utsendelsen skjer i tre trinn:

    • lagre konteksten til den gjeldende tråden;
    • laste inn konteksten til tråden valgt som et resultat av planlegging;
    • lanserer en ny tråd for utførelse.

    Når et system kjører flere uavhengige oppgaver samtidig, oppstår det ytterligere problemer. Selv om tråder oppstår og kjøres synkront, kan de trenge å samhandle, for eksempel ved utveksling av data. For å kommunisere med hverandre kan prosesser og tråder bruke et bredt spekter av muligheter: rør (i UNIX), postbokser (Windows), eksterne prosedyrekall, sockets (i Windows kobler de sammen prosesser på forskjellige maskiner). Matching av trådhastigheter er også svært viktig for å forhindre raseforhold (der flere tråder prøver å endre den samme filen), vranglåser og andre kollisjoner som oppstår når ressurser deles.

    Synkronisering tråder er en av de viktigste funksjonene til undersystemet for prosess og trådhåndtering. Moderne operativsystemer gir en rekke synkroniseringsmekanismer, inkludert semaforer, mutexes, kritiske områder og hendelser. Alle disse mekanismene fungerer med tråder, ikke prosesser. Så når en tråd blokkerer på en semafor, kan andre tråder i den prosessen fortsette å kjøre.

    Hver gang en prosess avsluttes – på grunn av en av følgende hendelser: normal exit, error exit, fatal error exit, dreping av en annen prosess – tar operativsystemet skritt for å rydde opp i sporene på systemet. Prosessstyringsundersystemet lukker alle filer som prosessen fungerte med, og frigjør områder med RAM som er tildelt for koder, data og systeminformasjonsstrukturer i prosessen. Alle mulige OS-køer og en liste over ressurser som hadde koblinger til prosessen som avsluttes, blir korrigert.

    Som allerede nevnt, for å støtte multiprogrammering, OS må designe for seg selv de interne arbeidsenhetene som prosessoren og andre datamaskinressurser skal deles mellom. Spørsmålet oppstår: hva er den grunnleggende forskjellen mellom disse arbeidsenhetene, hvilken multiprogrammeringseffekt kan oppnås fra bruken av dem, og i hvilke tilfeller bør disse operativsystemenhetene opprettes?

    Åpenbart består enhver operasjon av et datasystem av å kjøre et eller annet program. Derfor er en viss programkode knyttet til både prosessen og tråden, som utstedes i form av en kjørbar modul. I det enkleste tilfellet består en prosess av en enkelt tråd, og noen moderne operativsystemer har fortsatt denne situasjonen. Multiprogrammering i slike OS utføres det på prosessnivå. Når interaksjon er nødvendig, henvender prosessene seg til operativsystemet, som, som en mellommann, gir dem midler til kommunikasjon mellom prosesser - kanaler, e-postdelinger, delte minneseksjoner, etc.

    Men i systemer som ikke har konseptet med en tråd, oppstår det problemer når man organiserer parallelle beregninger i en prosess. Og et slikt behov kan oppstå. Poenget er at en enkelt prosess aldri kan utføres raskere enn i enkeltprogrammodus. Imidlertid kan en applikasjon som kjører innenfor en enkelt prosess ha intern parallellisme, som i prinsippet kan fremskynde løsningen. Hvis programmet for eksempel gir tilgang til en ekstern enhet, er det under denne operasjonen mulig å ikke blokkere gjennomføringen av hele prosessen, men å fortsette beregninger i en annen gren av programmet.

    Å kjøre flere jobber parallelt i en enkelt interaktiv applikasjon forbedrer brukereffektiviteten. Så når du arbeider med en tekstredigerer, er det ønskelig å kunne kombinere å skrive ny tekst med så lange operasjoner som å formatere en betydelig del av teksten, lagre den på en lokal eller ekstern disk.

    Det er ikke vanskelig å forestille seg en fremtidig versjon av kompilatoren som automatisk kan kompilere kildekodefiler under pauser mens du skriver et program. Da ville advarsler og feilmeldinger dukke opp i sanntid, og brukeren ville umiddelbart se hvor han tok feil. Moderne regneark beregne data på nytt i bakgrunnen så snart brukeren endrer noe. Tekstbehandlere bryter tekst i sider, kontrollerer den for stavemåte og grammatiske feil, skrive i bakgrunnen, lagre tekst med noen få minutters mellomrom osv. I alle disse tilfellene brukes tråder som et middel til å parallellisere beregninger.

    Disse oppgavene kan tildeles en programmerer, som vil skrive et dispatcher-program som implementerer parallellitet i en enkelt prosess. Dette er imidlertid veldig vanskelig, og selve programmet ville være veldig forvirrende og vanskelig å feilsøke.

    En annen løsning er å lage flere prosesser for én applikasjon for hver av parallellene

    Et av hovedundersystemene til ethvert moderne multiprogram-OS som direkte påvirker datamaskinens funksjon er prosess- og trådstyringsundersystemet. Hovedfunksjonene til dette delsystemet:

      lage prosesser og tråder;

      gi prosesser og tråder de nødvendige ressursene;

      prosessisolasjon;

      planlegge utførelse av prosesser og tråder (generelt bør vi også snakke om planlegging av oppgaver);

      utsendelse av tråder;

      organisering av interprosess interaksjon;

      synkronisering av prosesser og tråder;

      avslutning og ødeleggelse av prosesser og tråder.

    1. Fem hovedhendelser fører til opprettelsen av en prosess:

      oppfylle en løpende prosess forespørsel om å opprette en prosess;

      en brukerforespørsel om å opprette en prosess, for eksempel når du logger på interaktivt;

      starte en batchjobb;

      opprettelse av operativsystemet av en prosess som er nødvendig for driften av alle tjenester.

    Vanligvis, når OS starter, opprettes flere prosesser. Noen av dem er høyt prioriterte prosesser som samhandler med brukere og utfører tildelt arbeid. De resterende prosessene er bakgrunnsprosesser, de er ikke knyttet til spesifikke brukere, men utfører spesielle funksjoner - for eksempel relatert til e-post, websider, utdata til Tetning, filoverføring Av nettverk, periodisk lansering av programmer (f.eks. diskdefragmentering) etc. Bakgrunnsprosesser kalles demoner.

    En ny prosess kan opprettes Av forespørsel fra den nåværende prosessen. Å lage nye prosesser er nyttig i tilfeller der oppgaven som utføres lettest kan formes som et sett av relaterte, men likevel uavhengige, samvirkende prosesser. I interaktive systemer bruker kan starte et program ved å skrive en kommando på tastaturet eller ved å dobbeltklikke på programikonet. I begge tilfeller opprettes en ny prosess og lansering det er programmer i den. I batchbehandlingssystemer på stormaskiner sender brukere inn en jobb (eventuelt ved hjelp av ekstern tilgang), og operativsystemet oppretter en ny prosess og starter neste jobb fra køen når de nødvendige ressursene er frigjort.

    2. Fra et teknisk synspunkt, i alle disse tilfellene, dannes en ny prosess på samme måte: den nåværende prosessen utfører systemet be omå lage en ny prosess. Prosess- og trådstyringsundersystemet er ansvarlig for å gi prosessene nødvendige ressurser. OS opprettholder spesielle informasjonsstrukturer i minnet, der det registrerer hvilke ressurser som er allokert til hver prosess. Den kan tildele ressurser til en prosess for enebruk eller delt bruk med andre prosesser. Noen av ressursene allokeres til prosessen når den opprettes, og noen tildeles dynamisk Av henvendelser i ledetid. Ressurser kan allokeres til en prosess for hele livet eller bare for en viss periode. Når du utfører disse funksjonene, samhandler prosesskontrollundersystemet med andre OS-undersystemer som er ansvarlige for ressursforvaltning, for eksempelt, input/output undersystem, filsystem.

    3. For å hindre at prosesser forstyrrer ressurstildeling, og heller ikke kunne skade hverandres koder og data, Den viktigste oppgaven til operativsystemet er å isolere en prosess fra en annen. For dette operativsystem gir hver prosess et eget virtuelt adresseområde slik at ingen prosess kan få direkte tilgang til kommandoene og dataene til en annen prosess.

    4. I et operativsystem der prosesser og tråder eksisterer, anses en prosess som en forespørsel om å forbruke alle typer ressurser bortsett fra én - prosessortid. Dette viktigste ressurs distribuert av operativsystemet mellom andre arbeidsenheter - tråder, som fikk navnet sitt på grunn av at de representerer sekvenser (utførelsestråder) av kommandoer. Overgangen fra utførelsen av en tråd til en annen utføres som et resultat avplanlegger Ogutsendelse . Jobb AvÅ bestemme øyeblikket når den gjeldende tråden skal avbrytes og tråden som skal tillates å kjøre kalles planlegging. Trådplanlegging gjøres basert på informasjon som er lagret i prosess- og trådbeskrivelser. Ved planlegging tas det hensyn til det trådprioritet, deres ventetid i kø, akkumulert ledetid, intensiteten av I/O-tilgang og andre faktorer.

    5. Ekspedisjon består i å implementere løsningen funnet som følge av planlegging, d.v.s. ved å bytte prosessor fra en tråd til en annen. Utsendelsen skjer i tre trinn:

      lagre konteksten til den gjeldende tråden;

      lanserer en ny tråd for utførelse.

    6. Når et system kjører flere uavhengige oppgaver samtidig, oppstår det ytterligere problemer. Selv om tråder oppstår og kjøres synkront, kan det hende de må samhandle, for eksempel ved utveksling av data. For å kommunisere med hverandre kan prosesser og tråder bruke et bredt spekter av muligheter: kanaler (i UNIX), postkasser ( Windows), ekstern prosedyrekall, sockets (in Windows koble prosesser på forskjellige maskiner). Matching av trådhastigheter er også veldig viktig for å forhindre løpsforhold (der flere tråder prøver å endre det samme fil), vranglås og andre kollisjoner som oppstår når ressurser deles.

    7. Synkronisering tråder er en av de viktigste funksjonene til undersystemet for prosess og trådhåndtering. Moderne operativsystemer gir en rekke synkroniseringsmekanismer, inkludert semaforer, mutexes, kritiske områder og hendelser. Alle disse mekanismer arbeid med tråder, ikke prosesser. Det er derfor når strømme blokkerer på en semafor, kan andre tråder i denne prosessen fortsette å kjøre.

    8. Hver gang prosessen avsluttes, – og dette skjer på grunn av en av følgende hendelser: normal exit, exit Av feil, exit Av fatal feil, ødeleggelse av en annen prosess - OS tar skritt for å "rydde opp i spor" av dets tilstedeværelse i systemet. Prosessstyringsundersystemet lukker alle filer som prosessen fungerte med, og frigjør områder med RAM som er tildelt for koder, data og systeminformasjonsstrukturer i prosessen. Utført korreksjon alle slags OS-køer og liste ressurser som inneholdt koblinger til prosessen som avsluttes.

    Funksjonene til en frittstående datamaskins operativsystem er vanligvis gruppert enten i henhold til typene lokale ressurser som operativsystemet administrerer eller i henhold til spesifikke oppgaver som gjelder for alle ressurser. Noen ganger kalles slike grupper av funksjoner undersystemer. De viktigste ressursstyringsundersystemene er prosess-, minne-, fil- og ekstern, og delsystemene som er felles for alle ressursene er brukergrensesnitt, datasikkerhet og administrasjonsundersystemer. Den viktigste delen av operativsystemet, som direkte påvirker datamaskinens funksjon, er undersystemet for prosesskontroll. For hver nyopprettede prosess genererer operativsystemet systeminformasjonsstrukturer som inneholder data om prosessens behov for datasystemressurser, samt om ressursene som faktisk er allokert til den. Dermed kan en prosess også defineres som en applikasjon for forbruk av systemressurser. I et multiprogramoperativsystem kan flere prosesser eksistere samtidig. Noen prosesser genereres på initiativ av brukere og deres applikasjoner; slike prosesser kalles vanligvis brukerprosesser. Andre prosesser, kalt systemprosesser, initialiseres av operativsystemet selv for å utføre sine funksjoner. En viktig oppgave for operativsystemet er å beskytte ressursene som er allokert til en gitt prosess fra andre prosesser. En av de mest nøye beskyttede prosessressursene er områdene av RAM der prosesskode og data lagres. Settet med alle områder av RAM som er allokert av operativsystemet til en prosess, kalles dets adresserom. Hver prosess sies å operere i sitt eget adresserom, og refererer til beskyttelsen av adresserom levert av OS. Andre typer ressurser er også beskyttet, for eksempel filer, eksterne enheter osv. Operativsystemet kan ikke bare beskytte ressurser som er allokert til én prosess, men også organisere deling av dem, for eksempel ved å gi tilgang til et bestemt område av \u200b \u200bminne ved flere prosesser. I løpet av prosessens levetid kan utførelsen av den avbrytes og fortsettes mange ganger. For å gjenoppta utførelse av en prosess, er det nødvendig å gjenopprette tilstanden til driftsmiljøet. Tilstanden til driftsmiljøet identifiseres av tilstanden til registrene og programtelleren, driftsmodusen til prosessoren, pekere til åpne filer, informasjon om ufullførte I/O-operasjoner, feilkoder for systemanrop utført av en gitt prosess, etc. . d. Denne informasjonen kalles fremdriftskontekst. De sier at når en prosess endres, skjer en kontekstbytte. Dermed planlegger undersystemet prosessstyring utførelsen av prosesser, det vil si at det fordeler prosessortid mellom flere samtidig eksisterende prosesser i systemet, oppretter og ødelegger prosesser, gir prosesser de nødvendige systemressurser, opprettholder synkronisering av prosesser, og sikrer også interaksjon mellom prosessene.

    Del med venner eller spar selv:

    Laster inn...