Architettura dei Sistemi Operativi

Slides:



Advertisements
Presentazioni simili
Meccanismi di IPC Problemi classici di IPC
Advertisements

Requisiti precedenti Contenuti Verifiche Bibliografia Maura Zini.
Il Sistema Operativo.
Type Checking (1° parte)
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
Il problema dello stallo
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
1 System Call per Comunicazione tra Processi Pipe.
Programmazione Concorrente
Presentazione del corso di SISTEMI OPERATIVI
Sincronizzazione fra processi
Sincronizzazione di processi
2 luglio 2006URM2 – ING- OOP0304 OL G. Cantone e A. Lomartire 1 Programmazione Orientata agli Oggetti Processi, task e thread Java (ed esempi) Università
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Risorse condivise e sovraccarichi nei sistemi in tempo reale E.Mumolo
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
Il linguaggio Fortran 90: 2. Istruzioni di Controllo
Introduzione alla programmazione lll
Struttura dei sistemi operativi (panoramica)
I Thread.
Sincronizzazione dei Processi
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
Selezione (=scelta) con “if-else”
nome: sequenza di caratteri usata per denotare un oggetto
Sincronizzazione fra thread
Sistemi Operativi GESTIONE DEI PROCESSI.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Il sistema operativo Vito Perrone
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Shell 1 Elementi di programmazione concorrente Niccolo` Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Modulo 13: System call relative al File System
Requisiti precedenti Contenuti Verifiche Bibliografia Maura Zini.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Interazione e sincronizzazione
Seconda Università degli Studi di Napoli Facoltà di Economia Corso di Informatica Prof.ssa Zahora Pina.
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
Processi e Thread Job: Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle e.
Corso di “Programmazione a oggetti” Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Sincronizzazione dei processi
Processi.
Threads.
Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix.
Sistema Operativo (Software di base)
Capitolo 0 : Introduzione al corso CdL in Ingegneria Elettronica e delle Telecomunicazioni: Fondamenti dei S.O. (6CFU) Capitolo 0 : Introduzione al corso.
1 Il Buffer Cache Unix (Bach: the Design of the Unix Operating System (cap: 3)
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
CORSO DI PROGRAMMAZIONE II Lezione 22
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
Script di shell (bash).
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
Introduzione a Javascript
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
1 Esercitazione finale per il corso di Sistemi Operativi (A.A. 2001/2002)
Programmazione Concorrente e Distribuita
Politecnico di Milano © Domenico Barretta Processi concorrenti in Unix Docente Domenico Barretta Politecnico di Milano
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC.
Processi e Thread Processi Thread
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 Elementi di programmazione concorrente in Java: i threads.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Informatica Generale Marzia Buscemi
Informatica e Informatica di Base
NUCLEO DI UN SISTEMA A PROCESSI Il modello a processi prevede l’esistenza di tante unità di elaborazione (macchine virtuali) quanti sono i processi; ogni.
Transcript della presentazione:

Architettura dei Sistemi Operativi

Docente Ing. Andrea Sanna Politecnico di Torino Dip. di Automatica e Informatica - DAUIN Tel. 011- 564 7035 Fax. 011- 564 7099 Email: andrea.sanna@polito.it

Obiettivi Il modulo si propone di illustrare i principi ed i metodi della programmazione concorrente ed analizzare la struttura dei moduli componenti un sistema operativo. Obiettivo del corso è far acquisire allo studente la capacità di gestione efficiente delle risorse di un sistema di elaborazione mediante la programmazione di sistema.

Argomenti Classificazione dei Sistemi Operativi Architettura dei sistemi operativi Tipi di kernel Processi sequenziali e concorrenti Stato di un processo Dominio di un processo Context-Switching Unix system call per gestione processi Sincronizzazione e coordinazione dei processi Event flag, segnalazioni, semafori, IPC Unix system call per sincronizzazione processi Introduzione alla gestione della memoria virtuale Amministrazione di sistema: comandi e shell script – filtri

Prerequisiti Informatica I Informatica II Algoritmi e programmazione avanzata Calcolatori Elettronici

Videolezioni Introduzione ai Sistemi Operativi (Prima Parte) Introduzione ai Sistemi Operativi (Seconda Parte Componenti e Struttura dei Sistemi Operativi Organizzazione di un Sistema Operativo Processi Relazioni tra Processi (Prima Parte) Relazioni tra Processi. Blocco Critico Blocco critico e problemi di sincronizzazione (Prima parte) Problemi di sincronizzazione (Seconda parte) Modello a scambi di messaggi Modello a scambio di messaggi e assegnazione della CPU Assegnazione della CPU Nucleo di un sistema multiprogrammato (prima parte) Nucleo di un sistema multiprogrammato (seconda parte) Nucleo di un sistema multiprogrammato (terza parte) Creazione e terminazione di un programma in UNIX Comunicazione e sincronizzazione dei programmi in UNIX (prima parte) Comunicazione e sincronizzazione dei programmi in UNIX (seconda parte) Gestione della memoria (prima parte)

Videolezioni Gestione dei file (prima parte) Gestione della memoria (seconda parte) Gestione della memoria (terza parte) Gestione della memoria (quarta parte) Gestione della memoria (quinta parte) Gestione della memoria (sesta parte) Gestione della memoria (settima parte) Gestione delle periferiche (prima parte) Gestione delle periferiche (seconda parte) Gestione delle periferiche (terza parte) Gestione dei file (prima parte) Gestione dei file (seconda parte) Gestione dei file (terza parte) Gestione dei file (quarta parte) Gestione dei file (quinta parte) Gestione dei file (sesta parte); Interprete dei comandi in UNIX (prima parte) Interprete dei comandi in UNIX (seconda parte) Interprete dei comandi in UNIX (terza parte)

Testi di riferimento A. Silberschatz, P.B. Galvin, G. Gagne: Sistemi operativi concetti ed esempi, ottava edizione, Ed. Pearson, 2009, ISBN: 978-88-7192-569-1 P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari: Sistemi Operativi, McGraw-Hill, 2004, ISBN: 88-386-6069-7 Dispense del corso fornite a supporto in formato elettronico: http://sanna.polito.it/scano/

Esame L’esame consiste in una prova scritta che potrà vertere su tutti gli argomenti indicati nel programma del corso: domande esercizi Esempi di compiti possono essere scaricati da: http://sanna.polito.it/scano/

Videolezioni Ia videolezione: 31 marzo - ore 15.00 IIa videolezione: 4 aprile - ore 15.00 IIIa videolezione: 7 aprile - ore 15.00

Strumenti di sincronizzazione Sleep - wake up Semafori Scambio di messaggi Pipe/Fifo Monitor …

Monitor

Monitor Il costrutto monitor permette di definire un tipo di dato astratto e di sincronizzare processi che devono accedere in modo concorrente ad una stessa struttura dati di tipo monitor. Nel seguito è riportata la sintassi per definire un tipo di dato monitor e per dichiarare variabili di tipo monitor

Monitor type =monitor; procedure entry (...); begin...end; var :

Monitor Il costrutto monitor permette di definire un nuovo tipo di dato astratto, a cui saranno associate le operazioni (definite come procedure entry nella definizione) che costituiscono l'unica interfaccia attraverso cui si può agire sullo stato delle variabili di quel tipo. Per esempio si potrebbe definire un tipo buffer dotato di operazioni inserimento ed estrazione. L'implementazione del buffer (che potrà per esempio essere realizzato come vettore circolare o come lista linkata) non sarà visibile all'esterno.

Monitor In aggiunta il monitor permette di realizzare la sincronizzazione tra processi che condividono strutture dati di questo tipo in due modi: assicurando che ogni operazione eseguibile su una data struttura dati x di tipo monitor avverrà in mutua esclusione rispetto a qualsiasi altra operazione sulla stessa struttura permettendo ai processi che eseguono operazioni su una struttura dati di tipo monitor di sospendersi eseguendo una istruzione cond.wait (o wait(cond)) se non è verificata una data condizione cond.

Monitor Inoltre, tali processi possono essere risvegliati grazie all'esecuzione di una istruzione cond.signal (o signal(cond)) da parte di un altro processo che abbia richiesto l'esecuzione di una delle operazioni associate allo stesso monitor. Esistono varianti dell'operazione wait in cui è previsto che possa essere passato un parametro p il quale viene interpretato come priorità e viene usato per decidere in che ordine risvegliare i processi in attesa di una data condizione al momento dell'esecuzione di una cond.signal.

Monitor: esempio Consideriamo il seguente esempio: si tratta di un buffer utilizzabile per realizzare un sistema produttore-consumatore. È una variante rispetto all'esempio classico in quanto la procedura inserzione comprende un parametro aggiuntivo n tramite il quale è possibile richiedere di inserire nel buffer n copie di un messaggio

Monitor: esempio type buffer = monitor; var non_vuoto, non_pieno:condition; var count:integer; progedure entry inserzione(n, msg) begin for i:=1 to n    begin     if count = N then non_pieno.wait;     INSERIMENTO DI msg NEL BUFFER;     count := count+1;     if count=1 then non_vuoto.signal    end; progedure entry estrazione(var msg) begin   if count = 0 then non_vuoto.wait;   COPIA IN msg IL PRIMO ELEMENTO DEL BUFFER;   count := count-1;   if count= N-1 then non_pieno.signal begin; count:=0; var ProdCons:buffer;

Monitor: come classe Come la classe: È un tipo di dato astratto che incapsula sia i dati che le funzioni che li manipolano. Le funzioni non visibili dall'esterno della classe sono precedute dalla parola chiave private. Implicitamente fornisce la mutua esclusione nell’esecuzione delle sue procedure. Al suo interno possono essere dichiarate variabili di tipo condition utili per la sincronizzazione.

Condition wait e signal Operazioni su variabili di tipo condition: Condition wait è sempre bloccante. Condition signal sveglia il primo processo bloccato su una coda associata alla condition. Un segnale su una coda di condizione vuota non ha alcun effetto.

Produttore - Consumatore const int MAX = 100; monitor BoundedBuffer { private: Message buffer [MAX]; int p, c, count; condition nonempty, nonfull; public: void send(Message m); Message receive(void); void init(void); };

Produttore - Consumatore void send(Message m){ if (count == MAX) wait(nonfull); buffer[p] = m; p = (p + 1) % MAX; count++; signal(nonempty); } Message receive (void){ if (count == 0) wait(nonempty); m =buffer[c]; c = (c + 1) % MAX; count--; signal(nonfull); void init(void) { p=c=count=0 }

Monitor di Brinch-Hansen Nessun processo attivo CONTINUE ME ACTIVE ENTER EXIT EXIT WAIT CONTINUE WAIT CONTINUE Con questo tipo di arco  si indicano transizioni provocate da un altro processo WAIT

si indicano transizioni Monitor di Hoare Lo stato URGENT rappresenta uno stato in cui un processo finisce quando ne sblocca un altro in attesa su una variabile di tipo condition Con questo tipo di arco si indicano transizioni provocate da un altro processo

Monitor di Hoare p.wait sospende il processo che l’ha invocata su p rilasciando il controllo esclusivo del monitor p.signal: il processo che l’ha invocata continua l’esecuzione se non c’è alcun processo bloccato su p altrimenti il processo viene temporaneamente sospeso mentre uno dei processi bloccati su p viene riattivato. Il processo che si sospende in seguito all’operazione p.signal riprende l’esecuzione solamente quando non c’è nessun altro processo in esecuzione nel monitor. Inoltre, tale processo ha una priorità maggiore su ogni processo che tenta di iniziare l’esecuzione di procedura del monitor.

Monitor di Hoare con semafori enter : WAIT(me) exit : if (urgent.cnt < 0) SIGNAL(urg) else SIGNAL(me) cond_wait : if (urgent.cnt < 0) {WAIT (cond); SIGNAL (urg)} else {WAIT (cond); SIGNAL(me)} cond_signal : if (cond.cnt < 0) {WAIT (urg); SIGNAL (cond)}

Semaforo binario con monitor monitor SemaforoBinario { private: char busy; condition risorsa_libera; public: void wait(void); void signal(void); void init(void); }; void init(void){ busy = FALSE; }

Semaforo binario void wait(void){ if (busy) wait(risorsa_libera); busy = TRUE; } void signal(void){ busy = FALSE; signal(risorsa_libera);

Uso di un semaforo binario main(void){ SemaforoBinario me; me.init(); me.wait(); // Regione Critica; me.signal(); }

Semaforo generale monitor Semaforo { private: int ar, r, s; condition cond; public: void wait(void); void signal(void); void init(void); }; void init(int I){ ar = r = 0; s = I; }

Invariante semaforico Semaforo generale Invariante semaforico CNT = I + s - ar void wait(void){ ar++; if (s < ar) wait(cond); r++; } void signal(void){ s++; if (s <= ar)signal(cond); // ar > r

Uso di un semaforo generale main(void){ SemaforoGenerale me; me.init(1); me.wait(); // Regione Critica; me.signal(); }

R & W con precedenza ai Readers monitor RW_precedenza_ai_Readers { private: int nr; char busy; condition readers, writers; public: void start_read(void); void start_write(void); void end_read(void); void end_write(void); void init(void); };

R & W con precedenza ai Readers void start_read(void) { if (busy) wait(readers); nr++; signal(readers); } void init (void){ busy = FALSE; nr = 0; } void end_read(void) { nr--; if (nr == 0)signal(writers); }

R & W con precedenza ai Readers void start_write(void) { if (nr > 0 || busy) wait(writers); busy = TRUE; } void end_write(void) { busy = FALSE; if (queue(readers)signal(readers); else signal(writers); }

R & W con precedenza ai Writers void start_write(void) { if (nr > 0 || busy) wait(writers); busy = TRUE; } void end_write(void) { busy = FALSE; if (queue(writers)signal(writers); else signal(readers); }