En process är en identifierbar abstraktion av en samling av inbördes relaterade systemresurser baserad på ett separat och oberoende virtuellt adressutrymme i vilket sammanhang exekveringen av trådar är organiserad. ISO 9000:2000-definitionerna definierar en process som en uppsättning sammanhängande och interagerande aktiviteter som omvandlar indata till utdata.
Datorprogrammet i sig är bara en passiv sekvens av instruktioner. Medan processen är direkt exekvering av dessa instruktioner.
En process är också ett program som körs och alla dess element: adressutrymme , globala variabler , register , stack , öppna filer och så vidare.
Vanligtvis representeras en process i ett datorsystem av (även sägs "äga") följande resurser:
Operativsystemet lagrar mest information om processer i processtabellen.
På operativsystem som stöder trådar (trådar) äger trådar också sina egna resurser. Detta är vanligtvis bara tillståndet för processorn, även om trådar kan använda andra resurser också.
För att minska sannolikheten för att processer interfererar med varandra och sannolikheten för systemfel (till exempel dödlägen eller trassling ) tillhandahåller operativsystemet processisolering och allokerar de resurser de behöver. Operativsystemet tillhandahåller också mekanismer för processer att kommunicera på säkra och förutsägbara sätt.
Det här avsnittet diskuterar minnesrepresentationen av en process i operativsystemet Linux och x86 -arkitekturen . En sådan representation skiljer sig lite från många andra multitasking-operativsystem och arkitekturer. Till exempel, i amd64 , efterföljaren till x86, växer anropsstacken från topp till botten på samma sätt, men storleken på adressutrymmet ökas till 2 48 byte. [2]
Linux använder en platt minnesmodell och därför är 232 byte minne tillgängligt för varje process i den här arkitekturen. Allt virtuellt minne är uppdelat i användarutrymme och kärnutrymme . Kärnutrymme upptar en gigabyte minne, med början på den högsta adressen. Resten av utrymmet, det vill säga tre gigabyte, är reserverat för användarutrymme.
Diagrammet till höger visar representationen av användarutrymmet för alla processer. Kärnutrymmet är detsamma för alla processer, eftersom endast en instans av kärnan kan existera i operativsystemet. Efter start av programmet importeras processorinstruktioner (maskinkod) och initialiserade data till RAM. Samtidigt importeras startargument och miljövariabler till högre adresser.
Det initierade dataområdet lagrar skrivskyddad data. Det kan till exempel vara strängliteraler.
Det oinitierade dataområdet lagrar vanligtvis globala variabler.
Högen används för att allokera minne medan programmet körs. På Linux finns det ett systemanrop för detta mmap.
Stackområdet används för att anropa procedurer .
En viktig detalj är också närvaron av ett slumpmässigt indrag mellan stacken och toppområdet, såväl som mellan det initierade dataområdet och högen. Detta görs av säkerhetsskäl, som att förhindra att andra funktioner staplas.
Dynamiska länkbibliotek och filmappningar sitter mellan stacken och högen.
I multitasking-operativsystem blev det möjligt att arbeta samtidigt med flera processer. Förebyggande multitasking- operativsystem gjorde det möjligt att uppnå känslan av att köra flera processer samtidigt. Detta krävde medel för att hantera flera processer.
Unix är ett av de första multitasking-operativsystemen. Varje process har ett unikt numeriskt PID. Processerna i den har en trädhierarki , där roten är initprocessen med PID 1. En ny process kan skapas med ett systemanrop fork, det kommer att vara en exakt kopia av den överordnade processen . Alla processer förutom init har alltid en överordnad process (PPID-attributet ( Parent PID )); processer vars förälder har avslutats blir underordnade processer av init.
Processer kombineras också i grupper . setpgidSystemet anropar och ansvarar för att hantera gruppidentifieraren (PGID) getpgid. PGID är lika med gruppledarens PID. Barnprocessen ärver gruppen från föräldern. Grupper används för att hantera jobb .
Processgrupper kombineras till sessioner . Systemanropet ansvarar för att skapa en ny session setsid. Processer från samma grupp kan inte tillhöra olika sessioner. Därför kan gruppledaren inte bli sessionsledare: när en session skapas blir den underordnade processen automatiskt sessionsledare och ledare för den nya gruppen. Sessioner används för att hålla reda på alla processer som körs efter att en användare har loggat in.
Varje session kan ha högst en kontrollterminal . Terminalemulatorn har ett kommandoskal (oftast bash eller sh) som en underordnad process , som innan den startar blir ledare för den nya sessionen och sätter sig själv som den styrande terminalen .
Det enklaste operativsystemet behöver inte skapa nya processer, eftersom de har ett enda program som körs inuti dem när enheten slås på. I mer komplexa system måste nya processer skapas. De skapas vanligtvis:
En process, utöver det huvudsakliga körtillståndet, kan vara i andra tillstånd, till exempel väntande.
En Linux- process kan vara i ett av följande tillstånd:
Minst 2 färdigställande steg:
Skäl för att avsluta processen:
av operativsystem | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Kärna |
| ||||
Processledning _ |
| ||||
Minneshantering och adressering | |||||
Ladda och initieringsverktyg | |||||
skal | |||||
Övrig | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |