Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
2019-2020
Ogni processo può trovarsi in 5 stati:
1- New (Nuovo Processo)
2- Ready (pronto)
3- Running (in esecuzione)
4- Terminated (Terminato)
5- Waiting (in attesa)
Un processo è rappresentato da un solo blocco denominato PCB (blocco di controllo). Il PCB al suo interno contiene tutte le informazioni del processo:
Tra i vari compiti che il sistema operativo deve svolgere, c’è anche la protezione dell’hardware, ovvero deve gestire delle risorse per evitare l’interferenza di programmi o operazioni esterne.
Le protezioni dell'hardware sono 4.
La doppia modalità di funzionamento consente la protezione del sistema operativo in base al comportamento dell’utente tramite.
Le due modalità utilizzate sono di sistema e utente.
Questo tipo di controllo si esegue attraverso delle istruzioni privilegiate, ovvero il controllo dell’I/O, la gestione de timer e la gestione delle interruzioni.
Questo tipo di protezione lavora in maniera molto semplice, infatti per verificare che l’utente non stia facendo niente di dannoso o di illegale, ogni volta che il sistema operativo riceve una chiamata di sistema per svolgere le operazioni richieste dall’utente, questo passa alla modalità di sistema e verifica la validità di questa operazione.
Per proteggere la memoria l’indirizzo che viene inviato dalla CPU, passa attraverso il controllo di 2 registri, uno contenente l’indirizzo minimo e uno contenente l’indirizzo massimo.
Se l’indirizzo passato è contenuto all’interno di questa soglia di valori, il dato verrà memorizzato in memoria, altrimenti no.
Questo tipo di protezione avviene tramite l’utilizzo di un timer che impedisce ad un processo di non mantenere il “controllo” della CPU troppo a lungo.
Il timer può essere fisso o variabile: fisso quando ogni lasso di tempo sposta il controllo della CPU da un processo all’altro, variabile quando viene generato un tempo variabile in cui i processi vengono eseguiti.
Le operazioni svolte sui processi sono molte:
Creazione processi: un processo chiamato padre, può creare numerosi processi, chiamati figli, che a loro volta, possono creare altri processi, formando un albero genealogico di processi.
Possibili condivisioni delle risorse:
• Il padre e il figlio condividono tutte le risorse. (Minor carico nel sistema)
• I figli condividono un sottoinsieme delle risorse del padre.
• Il padre e il figlio non condividono risorse. (Maggior carico nel sistema).
Terminazione processi: Un processo termina quando esegue l’ultima istruzione e chiede al sistema operativo di essere cancellato per mezzo di una specifica chiamata di sistema, e quindi viene “distrutto“.
Sospensione processi;
Ripresa processi;
Cambio priorità dei processi;
Blocco processi;
Sblocco processi;
I processi eseguiti all’interno del sistema operativo possono essere: indipendenti cioè non influenzano ne vengono influenzati da altri processi, o cooperanti quindi influenzano o vengo influenzati da altri processi.
I sistemi inoltre possono essere a memoria condivisa o a scambio di messaggi dove per comunicare si utilizzano diversi canali di comunicazione: Diretto o indiretto, sincrono o asincrono, automatico o esplicitato dal Buffer.
Diretto: Ogni processo che intende comunicare deve nominare sia il ricevente che il trasmettitore;
Indiretto: i processi vengono inviati a delle porte logiche che poi li smisteranno.
Sincrono: il processo che manda il messaggio si blocca in attesa che il ricevente lo riceva;
Asincrono: il trasmittente non si blocca ma continua ad inviare messaggi.
Esplicitata dal Buffer: la comunicazione di svolge a capacità 0, cioè il buffer non può avere al suo interno processi in attesa;
Automatico: la capacità può essere limitata o illimitata a seconda delle situazioni.
Il thread è l’unità base d’uso della CPU.
Ogni processo viene normalmente associato ad un Thread, tranne quando di parla di Multithread dove ad un processo vengono associati più thread.
Ogni thread contiene 4 elementi: un identificatore, un contatore di programma, un insieme di registri e una pila.
I vantaggi del Multithreading sono 4:
Un minor tempo di risposta, una maggior efficienza nella condivisione delle risorse, un’economia migliore (il thread viene utilizzato in più contesti) e l’utilizzo di più processori.
Ci sono 3 modelli di Multithreading:
Molti ad uno: il sistema operativo fa corrispondere più thread a livello utente ad un thread a livello Kernel;
Uno ad uno: il sistema operativo fa corrispondere un thread a livello utente ad un thread a livello Kernel;
Molti a molti: il sistema operativo fa corrispondere più thread a livello utente a moltithread a livello Kernel.
Un programma è una successione di istruzioni eseguibili con computer.
Il computer però comprende soltanto in codice binario, cioè una successione di 0 e di 1.
È quindi necessario usare un linguaggio di programmazione per scrivere in modo leggibile le istruzioni che il computer deve eseguire, con delle istruzioni comprensibili a noi persone. Così, questi programmi sono tradotti in linguaggio macchina (in binario) da un compilatore.
I programmi informatici sono scritti su comuni file di testo ( codice sorgente ). Possono essere interpretati direttamente dal computer o trasformati in linguaggio macchina tramite un compilatore.
La compilazione crea un altro file ( codice oggetto ) direttamente eseguibile dal computer. Ad esempio, un file .exe. Quindi, il file sorgente e il file eseguibile sono due file ben distinti tra loro.
Per eseguire una coda di processi, il sistema operativo utilizza lo scheduler, il quale stabilisce l'ordine di esecuzione dei processi.
Lo scheduler può essere:
Lo scheduling può essere:
FCFS (First Come, First Served) senza prelazione:
E’ facile da implementare, infatti i processi vengono eseguiti in ordine di arrivo. Con FCFS il tempo di attesa del completamento di un processo è spesso lungo Supponiamo tre processi che arrivano assieme e che entrano in CPU nell’ordine P1, P2, P3.
Il diagramma di Gantt per questa sequenza è:
Attesa: P1 = 0; P2 = 24; P3 = 27
Tempo medio di attesa: (0 + 24 + 27)/3 = 17
Con questo algoritmo, viene eseguito il processo che ha il burst time di durata minore. Nel caso della prelazione, se arriva un processo il cui burst time è inferiore a quanto rimane da eseguire al processo attualmente in corso, quest’ultimo viene interrotto e la CPU passa al nuovo processo.
Esempio di SJF senza prelazione:
-
Con prelazione
Esempio di SJF con prelazione:
-
Utilizzando l'algoritmo per priorità, un valore di priorità (di solito un numero intero) è associato ad ogni processo. La CPU è allocata al processo con la priorità migliore.
Esempio senza prelazione:
Ogni processo ha a disposizione una piccola quantità di tempo di CPU (quanto di tempo), prefissato e uguale per tutti. Quando questo tempo è trascorso, il processo viene interrotto e rimesso in coda.
Il multitasking è una funzionalità del sistema operativo che permette al computer di eseguire più programmi contemporaneamente.
Il multitasking cooperative è un sistema senza prelazione.
Ogni programma cede il controllo al sistema operativo dopo aver eseguito un'operazione.
Lo scheduling non riesce a riprendere il controllo di un processo ed era utilizzato dai vecchi sistemi operativi.
Il multitasking preemptive è un sistema con rilascio anticipato
(o prelazione).
Il sistema operativo può interrompere un programma in esecuzione se non restituisce il controllo.
Questo tipo di scheduling si è diffuso negli anni '90 a partire da Windows 95.
E' oggi adottato da gran parte dei sistemi operativi.
L'esecuzione è lo stato in cui si trova un processo quando una CPU sta eseguendo le istruzioni del codice sorgente che lo caratterizzano
Un programma in background viene eseguito dal computer senza alcuna interazione con l'utente.
Oggi è usata da tutti i sistemi operativi per eseguire più processi contemporaneamente tramite un sistema di scheduling.
Un programma in foreground viene eseguito usando l'interfaccia utente e le varie periferiche di i/o che coinvolgono l'utente finale
Nei primi sistemi operativi a linea comando era possibile avere soltanto un processo in foreground.
Nei sistemi operativi più recenti è invece possibile eseguire più processi in foreground tramite la divisione dello schermo in finestre o su più schermi.