I processi e i thread nei sistemi operativi (OS) sono sempre stati alcuni dei miei argomenti preferiti in Informatica. Ti permettono di capire, in modo molto più profondo, come il sistema operativo gestisce i programmi durante i loro diversi stadi di esecuzione, affrontare i problemi relativi alla memoria e garantire la sicurezza isolata fino al kernel. È dannatamente interessante!
L’idea di base
Un processo è semplicemente un programma in esecuzione. Un programma ha strettamente un processo associato ad esso. In casi molto rari questo può non essere sempre vero (Google Chrome come esempio), ma questo è vero la maggior parte delle volte.
Ogni processo ha diversi componenti che gli permettono di eseguire i compiti previsti. In particolare, lo stack e l’heap sono usati rispettivamente per l’allocazione delle variabili locali e della memoria dinamica.
Ci sono altri componenti, ma è sufficiente dire che ogni processo ha bisogno di questi componenti per funzionare come programma.
Monitoraggio dei processi nel sistema
In qualsiasi momento ci possono essere un paio di centinaia o meno di processi in esecuzione. A volte è utile vedere informazioni dettagliate su di essi, soprattutto se il computer è lento: certi processi possono monopolizzare la memoria del computer o la CPU. Essere in grado di individuarli e successivamente distruggerli è davvero molto utile e può essere ottenuto abbastanza facilmente.
Se stai usando Windows, puoi aprire il Task Manager e fare clic sulla scheda Processi per vedere queste informazioni. Se stai usando Linux o una macchina basata su Unix puoi eseguire diversi comandi:
ps aux // this will display a list of processestop // detailed information about all processes, threads, memory hoggers and network packets
Come il sistema operativo gestisce i processi
Un processo può essere in un particolare stato in qualsiasi momento. Può essere stato appena creato, in attesa di essere eseguito, in attesa di accedere a qualche dispositivo I/O, interrotto da qualche altro processo, ecc. Per garantire la massima produttività, il sistema operativo deve capire lo stato di tutti questi processi ed essere in grado di crearne di nuovi in modo intelligente, passare da uno all’altro, metterli in pausa, sospenderli, ecc. al momento giusto.
Per fare questo efficacemente, il sistema operativo mantiene quello che è conosciuto come un blocco di controllo del processo per ogni processo. Contiene informazioni utili come lo stato attuale del processo, la prossima istruzione da eseguire e i dispositivi attualmente assegnati al processo.
Questo permette al sistema operativo di gestire efficacemente diversi processi, salvando lo stato attuale nel PCB, passando da uno all’altro e ricaricando alcuni processi in seguito.
Come fa il sistema operativo a passare da un processo all’altro
La commutazione di contesto si riferisce alla specifica attività in cui un sistema operativo salva lo stato di un processo in esecuzione e lo mette in pausa per eseguirne un altro. Deve farlo in un modo che assicuri che questi processi non siano in conflitto e che il processo salvato possa essere ripreso in seguito senza problemi. Questo assicura una caratteristica chiave nei sistemi operativi: il multitasking. Il diagramma mostra come il PCB viene utilizzato per salvare lo stato del processo, eseguirne un altro, e poi ricaricare e continuare quello iniziale in un secondo momento.