Un processo è un insieme coerente di istruzioni che un sistema operativo è attualmente in esecuzione. Tutto il resto praticamente segue da quello.
Ad esempio, un processo risiede in memoria e ognuno ha il suo stato. Se il tuo computer esegue contemporaneamente quattro istanze di Bash (non una situazione insolita), sono tutti gli stessi programmi , ma quattro diversi processi . Ognuno ha il proprio contatore di programma, la propria voce nella tabella dei processi del sistema operativo e può essere programmato o non pianificato indipendentemente l'uno dall'altro. Possono o non possono condividere gli stessi segmenti di memoria per contenere parti dei loro opcode, che dipendono da cose come il collegamento statico / dinamico.
Cos'altro fa parte di un processo? Ad esempio, memoria allocata dinamicamente. I programmi che allocano la memoria ottengono quella memoria assegnata loro in modo specifico, in un segmento di dati dedicato. Di nuovo, i tuoi quattro processi Bash non condivideranno quella memoria, a meno che non eseguano un protocollo coordinato per condividerne esplicitamente alcuni. Poi ci sono le informazioni contabili che il sistema operativo mantiene su un processo: il suo numero, la sua priorità, il suo id utente proprietario, la quantità di cicli che ha già usato, ecc.
Gestire i processi in modo ragionevolmente efficiente è in effetti piuttosto complicato, e un grosso motivo per cui scrivere un O.S. non è un compito banale. Ma alla fine, i processi sono solo esempi di programmi, cioè flussi opcode, e tutto il resto è solo contabilità per mantenere quegli stream che fluiscono in modo efficiente. (Chiedi di nuovo se hai domande più specifiche o ostacoli alla comprensione.)