Proces (datalogi)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 17. juni 2020; checks kræver 11 redigeringer .

En proces er en identificerbar abstraktion af en samling af indbyrdes forbundne systemressourcer baseret på et separat og uafhængigt virtuelt adresserum, i hvilken udførelse af tråde er organiseret. ISO 9000:2000-definitionerne definerer en proces som et sæt af indbyrdes forbundne og interagerende aktiviteter, der omdanner input til output.

Selve computerprogrammet er blot en passiv sekvens af instruktioner. Mens processen er den direkte udførelse af disse instruktioner.

En proces er også et kørende program og alle dets elementer: adresserum , globale variabler , registre , stak , åbne filer og så videre.

Procesvisning

Typisk er en proces i et computersystem repræsenteret af (også siges at "eje") følgende ressourcer:

Konteksten for den aktuelle proces ombyttes til hukommelsen, når et skifte til en anden proces udføres [1] .

Operativsystemet gemmer de fleste informationer om processer i procestabellen.

På operativsystemer, der understøtter tråde (tråde), ejer tråde også deres egne ressourcer. Dette er normalt kun processorens tilstand, selvom tråde også kan bruge andre ressourcer.

For at reducere sandsynligheden for, at processer interfererer med hinanden, og sandsynligheden for systemfejl (f.eks. dødvande eller thrashing ), sørger operativsystemet for procesisolering og allokerer de ressourcer, de har brug for. Operativsystemet giver også mekanismer til , at processer kan kommunikere på sikre og forudsigelige måder.

Repræsentation af en proces i hukommelsen

Dette afsnit diskuterer hukommelsesrepræsentationen af ​​en proces i Linux-operativsystemet og x86 -arkitekturen . En sådan repræsentation adskiller sig lidt fra mange andre multitasking-operativsystemer og -arkitekturer. For eksempel, i amd64 , efterfølgeren til x86, vokser opkaldsstakken fra top til bund på samme måde, men størrelsen af ​​adresserummet øges til 2 48 bytes. [2]

Linux bruger en flad hukommelsesmodel , og derfor er 232 bytes hukommelse tilgængelig for hver proces i denne arkitektur. Al virtuel hukommelse er opdelt i brugerrum og kernerum . Kernelplads optager en gigabyte hukommelse, startende ved den højeste adresse. Resten af ​​pladsen, det vil sige tre gigabyte, er reserveret til brugerplads.

Diagrammet til højre viser brugerrummets repræsentation af enhver proces. Kernel plads er den samme for alle processer, da kun én forekomst af kernen kan eksistere i operativsystemet. Efter start af programmet importeres processorinstruktioner (maskinkode) og initialiserede data til RAM. Samtidig importeres opstartsargumenter og miljøvariabler til højere adresser.

Det initialiserede dataområde gemmer skrivebeskyttede data. Det kan for eksempel være strenge bogstaver.

Det uinitialiserede dataområde gemmer normalt globale variabler.

Heapen bruges til at allokere hukommelse, mens programmet kører. På Linux er der et systemkald til dette mmap.

Stakområdet bruges til at kalde procedurer .

En vigtig detalje er også tilstedeværelsen af ​​et tilfældigt indrykning mellem stakken og det øverste område, såvel som mellem det initialiserede dataområde og heapen. Dette gøres af sikkerhedsmæssige årsager, såsom at forhindre andre funktioner i at blive stablet.

Dynamiske linkbiblioteker og filtilknytninger sidder mellem stakken og heapen.

Proceshierarki

I multitasking-operativsystemer blev det muligt at arbejde samtidigt med flere processer. Forebyggende multitasking -operativsystemer gjorde det muligt at opnå følelsen af ​​at køre flere processer på samme tid. Dette krævede midler til at styre flere processer.

Unix

Unix  er et af de første multitasking-operativsystemer. Hver proces har et unikt numerisk PID. Processerne i den har et træhierarki , hvor roden er init -processen med PID 1. En ny proces kan oprettes med et systemkald fork, det vil være en nøjagtig kopi af den overordnede proces . Enhver proces undtagen init har altid en overordnet proces (PPID-attributten ( Prent  PID )); processer, hvis forælder er afsluttet, bliver underordnede processer af init.

Processer kombineres også i grupper . setpgidSystemet kalder og er ansvarligt for at administrere gruppeidentifikationen (PGID) getpgid. PGID er lig med gruppelederens PID. Barneprocessen arver gruppen fra forælderen. Grupper bruges til at administrere jobs .

Procesgrupper kombineres til sessioner . Systemkaldet er ansvarlig for at oprette en ny session setsid. Processer fra samme gruppe kan ikke tilhøre forskellige sessioner. Derfor kan gruppelederen ikke blive sessionsleder: Når en session oprettes, bliver den underordnede proces automatisk sessionsleder og leder af den nye gruppe. Sessioner bruges til at holde styr på alle processer, der kører efter en bruger er logget ind.

Hver session kan højst have én kontrolterminal . Terminalemulatoren har en kommandoskal (oftest bash eller sh) som en underordnet proces , som før start bliver lederen af ​​den nye session og sætter sig selv til den kontrollerende terminal .

Oprettelse af en proces

Det enkleste operativsystem behøver ikke at oprette nye processer, da de har et enkelt program, der kører inde i dem, når enheden er tændt. I mere komplekse systemer skal der skabes nye processer. De er normalt oprettet:

Procestilstande

En proces, ud over den primære køretilstand, kan være i andre tilstande, såsom at vente.

Linux

En Linux- proces kan være i en af ​​følgende tilstande:

Afslutning af en proces

Minimum 2 færdiggørelsestrin:

  1. Processen fjernes fra alle planlægningskøer , dvs. OS planlægger ikke længere nogen ressourcer, der skal allokeres til processen,
  2. Indsamling af statistik om de ressourcer, der forbruges af processen med dens efterfølgende fjernelse fra hukommelsen .

Årsager til at afslutte processen:

Se også

Noter

  1. E. Tannenbaum. Moderne operativsystemer = Moderne operativsystemer. - 2. udg. - Sankt Petersborg. : Peter, 2002. - S. 59, 97. - 1040 s. - ISBN 5-318-00299-4 .
  2. AMD Corporation. Bind 2: Systemprogrammering (PDF). AMD64 Architecture Programmer's Manual . AMD Corporation (december 2016). Hentet 25. marts 2017. Arkiveret fra originalen 13. juli 2018.

Litteratur