Processer och trådar i operativsystem (OS) har alltid varit några av mina favoritämnen inom datavetenskap. De gör det möjligt att på ett mycket djupare sätt förstå hur operativsystemet hanterar program under deras olika stadier av utförande, hanterar frågor om minne och säkerställer isolerad säkerhet ända ner till kärnan. Det är helt enkelt jävligt intressant!
Den grundläggande idén
En process är helt enkelt ett program under utförande. Ett program har endast en process associerad med det. I mycket sällsynta fall är detta kanske inte alltid sant (Google Chrome som exempel), men det är sant en majoritet av tiden.
Varje process har olika komponenter som gör det möjligt för den att utföra de uppgifter som den är avsedd för. Framför allt används stacken och heap för lokal variabler respektive dynamisk minnesallokering.
Det finns fler komponenter men det räcker med att säga att varje process behöver dessa komponenter för att kunna köras som ett program.
Övervakning av processer i systemet
Vid varje tidpunkt kan det finnas ett par hundra eller färre processer som körs. Ibland är det användbart att se detaljerad information om dem, särskilt om datorn går långsamt: eftersom vissa processer kan ta upp datorns minne eller CPU. Att kunna peka ut dem och därefter förstöra dem är mycket praktiskt och kan åstadkommas ganska enkelt.
Om du kör Windows kan du öppna Aktivitetshanteraren och klicka på fliken Processer för att se denna information. Om du kör Linux eller en Unix-baserad maskin kan du köra ett antal olika kommandon:
ps aux // this will display a list of processestop // detailed information about all processes, threads, memory hoggers and network packets
Hur hanterar operativsystemet processer
En process kan vara i ett visst tillstånd när som helst. Den kan precis ha skapats, vänta på att köras, vänta på tillgång till en I/O-enhet, avbrytas av en annan process osv. För att säkerställa maximal produktivitet måste operativsystemet förstå tillståndet för alla dessa processer och på ett intelligent sätt kunna skapa nya processer, växla mellan dem, pausa dem, avbryta dem osv. vid rätt tidpunkt.
För att göra detta på ett effektivt sätt upprätthåller operativsystemet ett så kallat processkontrollblock för varje process. Det innehåller användbar information som det aktuella processtillståndet, nästa instruktion som ska utföras och för närvarande tilldelade enheter till processen.
Detta gör det möjligt för operativsystemet att hantera olika processer på ett effektivt sätt, genom att spara det aktuella tillståndet i PCB:n, växla mellan dem och ladda om vissa processer senare.
Hur växlar operativsystemet mellan olika processer
Kontextväxling avser den specifika aktivitet där ett operativsystem sparar tillståndet för en pågående process och pausar den för att köra en annan. Det måste göra detta på ett sätt som säkerställer att dessa processer inte kommer i konflikt med varandra och att den sparade processen kan återupptas senare utan problem. Detta säkerställer en viktig funktion i operativsystem: multitasking. Diagrammet visar hur PCB används för att spara processens tillstånd, köra en annan och sedan ladda om och fortsätta den ursprungliga processen senare.