Sistemi operativi: manuale pratico/Processi/Introduzione

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Sistemi operativi: manuale pratico/Processi/Introduzione

Algoritmo[modifica]

Un algoritmo e' un procedimento logico che permette la risoluzione di un problema in un numero finito di passi

Programma[modifica]

Un programma e' un'entita' passiva (file in memoria) che formalizza un algoritmo attraverso un linguaggio di programmazione

Processo[modifica]

Un processo e' un'entita' attiva (operazioni compiute dal processore) che corrisponde ad un'astrazione di un programma in esecuzione; un processo e' composto da:

  • codice sorgente
  • area dati (variabili statiche globali)
  • stack (variabili statiche locali)
  • heap (variabili dinamiche)

Processi sequenziali[modifica]

I processi sequenziali sono processi in cui ogni operazione viene eseguita dopo il termine di quella precedente (comportamento deterministico)

Processi concorrenti[modifica]

I processi concorrenti sono processi in cui le operazioni possono essere eseguite contemporaneamente (comportamento non deterministico) La concorrenza puo' essere: reale (sistemi multiprocessore e multi-core) o fittizia

Processi automatici[modifica]

I processi automatici sono processi che vengono eseguiti al bootstrap e terminati allo shut-down (attesa messaggi posta elettronica, controllo virus)

Processi su richiesta dell'utente[modifica]

I processi su richiesta dell'utente sono processi la cui esecuzione viene avviata in modo esplicito da parte dell'utente (stampante, browser)

Stati di un processo[modifica]

Gli stati di un processo durante la sua esecuzione sono:

  • new: il processo viene creato e sottomesso al SO
  • running: il processo e' in esecuzione
  • ready: il processo e' pronto per l'esecuzione e in attesa di risorse dal processore
  • waiting: il processo e' in attesa di risorse da parte del sistema
  • terminated: il processo termina e rilascia le risorse utilizzate

Context switch[modifica]

Un context switch (cambiamento di contesto) e' uno stato del SO in cui avviene un cambio del processo correntemente in esecuzione sulla CPU; il context switch genera un ritardo temporale tra l'esecuzione di un processo e l'altro

Process Control Block (PCB)[modifica]

Il PCB e' un blocco di dati associato ad ogni processo; tali dati riguardano:

  • stato del processo
  • program counter (indirizzo dell'istruzione successiva)
  • registri della CPU
  • informazioni per lo scheduling della CPU
  • informazioni per la gestione della memoria
  • informazioni sulle operazioni di I/O

Process Identifier (PID)[modifica]

Il PID e' un intero non negativo (UNIX/linux), generato automaticamente dal SO, che identifica in modo univoco ciascun processo

PID riservati[modifica]

I PID riservati dal SO UNIX/linux sono:

  • PID : per lo scheduler dei processi
  • PID : per il processo (invocato al termine del bootstrap) che e' l'antenato di tutti i processi

Terminazione[modifica]

Un processo puo' essere terminato in modi:

  • standard
    • return dal main
    • exit o _exit o _Exit da un suo thread
    • un suo thread riceve un segnale di terminazione
  • non standard
    • abort
    • ricevere un segnale di terminazione
    • cancellare l'ultimo thread del processo

Al termine di ogni processo il kernel invia al padre un segnale SIGCHLD (Signal Child)

Scheduler[modifica]

Lo scheduler e' un programma che stabilisce un ordinamento temporale per l'esecuzione dei processi attraverso algoritmi di scheduling; lo scheduler si occupa di:

  • inserisce i PCB dei processi che richiedono una risorsa in una coda (ogni coda si riferisce ad un possibile stato dei processi: coda di ready, coda di running,...)
  • preleva dalle code i processi che andranno eseguiti

Architetture parallele[modifica]

Esistono diverse architetture parallele:

  • Single Instruction Single Data (SISD): in un certo istante una singola istruzione viene eseguita da un singolo processo su un singolo dato (no parallelismo; bit)
  • Single Instruction Multpile Data (SIMD): in un certo istante una singola istruzione viene eseguita da piu' processi su piu' dati (dati parallelizzati; numeri)
  • Multiple Instruction Single Data (MISD): in un certo istante piu' istruzioni vengono eseguite da piu' processi su un singolo dato
  • Multiple Instruction Multiple Data (MIMD): in un certo istante piu' istruzioni vengono eseguite da piu' processi su piu' dati (parallelismo su dati e su istruzioni)

Speed-up[modifica]

I vantaggi in termini di tempo ottenibili da architetture concorrenti sono lineari (solo per un numero ridotto di processori)

Grafo di precedenza[modifica]

Un grafo di precedenza e' un grafo aciclico diretto in cui:

  • i nodi corrispondono a istruzioni o a processi
  • gli archi corrispondono a condizioni di precedenza: ogni nodo puo' essere eseguito solo dopo che il padre e' terminato

Condizioni di Bernstein[modifica]

Le condizioni di Bernstein sono le condizioni necessarie affinché un algoritmo possa essere scritto in modo concorrente; dati due processi Pi e Pj, essi sono parallelizzabili se valgono le seguenti condizioni (R(P): input del processo P; W(P): output del processo P):