Vai al contenuto

Sistemi operativi: manuale pratico/Processi/Introduzione

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

Sistemi operativi: manuale pratico/Processi/Introduzione

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

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

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 | modifica sorgente]

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

Processi concorrenti

[modifica | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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

PID riservati

[modifica | modifica sorgente]

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 | modifica sorgente]

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)

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 | modifica sorgente]

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)

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

Grafo di precedenza

[modifica | modifica sorgente]

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 | modifica sorgente]

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):