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.
Typisk er en proces i et computersystem repræsenteret af (også siges at "eje") følgende ressourcer:
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.
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.
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 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 .
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:
En proces, ud over den primære køretilstand, kan være i andre tilstande, såsom at vente.
En Linux- proces kan være i en af følgende tilstande:
Minimum 2 færdiggørelsestrin:
Årsager til at afslutte processen:
af operativsystemer | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Nucleus |
| ||||
Procesledelse _ |
| ||||
Hukommelseshåndtering og adressering | |||||
Indlæsnings- og initialiseringsværktøjer | |||||
skal | |||||
Andet | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |