cerca
Sistemi Operativi
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Sistemi Operativi

Torna alla pagina di Sistemi Operativi


 :: Appunti caotici ::

Lezione 1 Processi

Pag 1

Sommario

...

Pag 2

Multi-tasking (1)

Il multi-tasking ha come obiettivo quello di cercare di sfruttare il più possibile il processore, tentando di evitare per quanto possibile i tempi morti di attesa.

Multi-tasking (2)

Il multi-tasking ha come condizione necessaria la multiprogrammazione. In particolare, tra tutti i programmi caricati in memoria bisognerebbe che ce ne sia sempre almeno uno che abbia qualcosa da far fare al processore (se stesserò tutti là ad aspettare chissà cosa dalle periferiche allora il multi processo non servirebbe un po' a una fava). Ovviamente ciò non avviene sempre, ma bisognerebbe fare in modo che accada il più spesso possibile.

Pag 3

Processo

L'evoluzione della computazione è la successione degli stati del processo che vanno da quello iniziale a quello finale. Gli stati fotografano istante per istante il codice ed il contenuto delle variabili utilizzate, ovvero quell'insieme di valori che ci permette di sapere come evolverà il programma conoscendo l'istruzione successiva cui sta puntando il program counter.

Programma <> Processo

E' importante non confondere il concetto di programma con quello di processo, o altrimenti all'esame prendi 0. Quindi non seguire l'esempio del professore in classe (quando non minaccia di dare 0 se confondi i termini, li confonde lui).

Il programma è un'entità passiva, non è legato a un insieme di dati specifico. E' sostanzialmente la sequenza di istruzioni generate dal sorgente tradotto dal codice scritto in un certo linguaggio di programmazione.

Il processo è invece un'entità attiva, e rappresenta il programma mandato in esecuzione su un'istanza specifica del problema (quindi variabili e dati inclusi).

Pag 4

Evoluzione della computazione di un processo

Durante l'evoluzione i processi possono operare sui dati di un programma e di conseguenza producono dei risultati (amessi attraverso le periferiche).

Stato di evoluzione della computazione di un processo

Lo stato di evoluzione della computazione di un processo è l'insieme dei valori di tutte le informazioni da cui dipende l'evoluzione della computazione del processo.

Importante: non deve essere alterato dall'esecuzione di un altro processo, o otterrei una soluzione (evoluzione) diversa da quella corretta. Applicando stesse operazioni su dati diversi non è scritto da nessuna parte che il risultato debba essere lo stesso, anzi. Unica eccezione è il caso in cui l'ultima operazione compiuta su una certa variabile sia l'assegnamento di una costante (ma in quel caso saresti stato scemo tu ad aver compiuto operazioni precedenti per poi perdere tutto con l'assegnamento).

Pag 5

Cambiamento del processo in esecuzione

Nella fase di cambiamento del processo in esecuzione bisogna garantire al 100% che il processo si evolva come se fosse l'unico eseguito dal processore, quindi che nessun altro processo si permetta di toccare le informazioni che definiscono lo stato di evoluzione della computazione.

Ciò si ottiene salvando lo stato di evoluzione della computazione. In particolare:

  • codice del programma, dati del programma, heap e stack non vengono toccati perché tanto nessuno potrà modificare nulla, dato che è già garantita da come è stato strutturato l'accesso in memoria
  • il contenuto di tutti i registri viene invece salvato a bomba nello stack. Li salvo tutti, anche quelli che in teoria non sarebbero stati toccati dagli altri processi per i seguenti motivi:
    • per sapere quali registri saranno utilizzati dal secondo processo bisognerebbe eseguirlo, quindi non risolvo nulla
    • anche se fosse possibile sapere quali registri saranno toccati, ci vorrebbe troppo tempo per copiare uno alla volta quelli necessari (calcola che ad ogni copia corrisponde un ciclo fetch-decode-execute). Il tempo perso per il salvataggio dei registri utili va poi moltiplicato per tutte le volte che effettuo una turnazione dei processi in esecuzione
    • per salvare tutti i registri nello stack è sufficiente dare il comando PUSH ALL
  • lo stack pointer dello stack non può essere ovviamente salvato nello stack (sarebbe un salvataggio ricorsivo, ogni volta cambierebbe la sua posizione), ma viene memorizzato nella struttura dati del sistema operativo associata al processo

Per alcuni processi questo sistema può essere critico, a causa dei tempi di gestione delle turnazioni. I processi in questione sono proprio quelli che non sono performanti per il multi-tasking, ovvero quelli che gestiscono i sistemi in tempo reale o che comunque non gradiscono il time sharing.

Uso del processore da parte di un processo

...

Pag 6

Stato del processo

Lo stato Ready-to-run è quello in cui il processo ha tutte le risorse pronte tranne il processore.

Diagramma degli stati del processo (1)

...

Pag 7

Diagramma degli stati del processo (2)

...

Supporti per la gestione dei processi (1)

Il Process Control Block (PCB) è il blocco di controllo del processo, in cui raccolgo tutte le informazioni sul processo a supporto della gestione del processore, tra cui:

  • identificatore del processo (numero)
  • stato del processo (stato di uso del processore relativo a quel processo)
  • program counter
  • registri della CPU
  • informazioni per la schedulazione della CPU (come andare a trattare il processore quando saranno ordinati i processi in base alla priorità di esecuzione)

Altre informazioni non strettamente legate alla gestione del processore, ma comunque inglobate per mantenerle tutte in un'unica tabella omogenea a livello di contenuto sono:

  • informazioni per la gestione della memoria centrale (limiti di memoria)
  • informazioni sullo stato dell'I/O (ad esempio: file aperti)
  • informazioni per l'accounting

Pag 8

Supporti per la gestione dei processi (2)

...

Supporto per la gestione dei processi (3)

...


Torna alla pagina di Sistemi Operativi