Processen en threads in besturingssystemen (OS) zijn altijd een van mijn favoriete onderwerpen in de informatica geweest. Ze stellen je in staat om op een veel diepere manier te begrijpen hoe het OS programma’s beheert tijdens hun verschillende stadia van uitvoering, hoe het problemen met het geheugen aanpakt en hoe het zorgt voor geïsoleerde beveiliging tot in de kernel. Het is gewoon verdomd interessant!
Het basisidee
Een proces is eenvoudigweg een programma in uitvoering. Aan een programma is slechts één proces gekoppeld. In zeer zeldzame gevallen is dit niet altijd het geval (Google Chrome als voorbeeld), maar in de meeste gevallen is dit wel het geval.
Elk proces heeft verschillende onderdelen die het in staat stellen de beoogde taken uit te voeren. Met name de stack en heap worden gebruikt voor respectievelijk lokale variabelen en dynamische geheugentoewijzing.
Er zijn meer componenten, maar het volstaat te zeggen dat elk proces deze componenten nodig heeft om als programma te kunnen draaien.
Processen in het systeem in de gaten houden
Op elk willekeurig moment kunnen er een paar honderd of minder processen actief zijn. Soms is het handig om gedetailleerde informatie over hen te zien, vooral als uw computer traag werkt: omdat bepaalde processen het geheugen of de CPU van de computer in beslag kunnen nemen. In staat zijn om ze te lokaliseren en vervolgens te vernietigen is inderdaad erg handig en kan vrij gemakkelijk worden bereikt.
Als u Windows draait, kunt u het Taakbeheer openen en op het tabblad Processen klikken om deze informatie te zien. Als u Linux of een op Unix gebaseerde machine draait, kunt u een aantal verschillende opdrachten uitvoeren:
ps aux // this will display a list of processestop // detailed information about all processes, threads, memory hoggers and network packets
Hoe beheert het besturingssysteem processen
Een proces kan zich op elk moment in een bepaalde toestand bevinden. Het kan net zijn aangemaakt, wachten op uitvoering, wachten op toegang tot een I/O-apparaat, onderbroken zijn door een ander proces, enz. Om maximale productiviteit te garanderen, moet het besturingssysteem de toestand van al deze processen begrijpen en in staat zijn om op de juiste momenten op intelligente wijze nieuwe processen aan te maken, tussen processen te schakelen, ze te pauzeren, op te schorten, enzovoort.
Om dit effectief te kunnen doen, onderhoudt het besturingssysteem voor elk proces een zogeheten procescontroleblok. Het bevat nuttige informatie, zoals de huidige processtatus, de volgende uit te voeren instructie en de momenteel aan het proces toegewezen apparaten.
Hiermee kan het besturingssysteem verschillende processen effectief beheren, door de huidige status in het blok op te slaan, tussen de processen te schakelen en bepaalde processen later opnieuw te laden.
Hoe schakelt het besturingssysteem tussen verschillende processen
Contextschakelen heeft betrekking op de specifieke activiteit waarbij een besturingssysteem de toestand van een lopend proces opslaat en dit onderbreekt om een ander proces uit te voeren. Dit moet zodanig gebeuren dat deze processen niet conflicteren en dat het opgeslagen proces later zonder problemen kan worden hervat. Dit garandeert een essentieel kenmerk van besturingssystemen: multitasking. Het diagram laat zien hoe de PCB wordt gebruikt om de toestand van het proces op te slaan, een ander proces te starten, en dan later het oorspronkelijke proces opnieuw te laden en voort te zetten.