Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix.

Slides:



Advertisements
Presentazioni simili
Meccanismi di IPC Problemi classici di IPC
Advertisements

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
Università degli Studi di Napoli "Federico II" - a.a. 2002/2003 Le TD nei processi di apprendimento: strategie di apprendimento collaborativo supportate.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
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.
SC che operano su processi
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
1 System Call per Comunicazione tra Processi Pipe.
Programmazione Concorrente
Sincronizzazione fra processi
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Tecniche di automazione Corso: Tecniche di automazione – prof.ssa Laura ZUCCHI DDE Data Dynamic Exchange Appunti lezioni Classi 1C e 1H – gruppo A.
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Laurea.
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Laurea.
Sincronizzazione fra thread
Sistemi Operativi GESTIONE DEI PROCESSI.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
DBMS ( Database Management System)
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Inserire il CDROM CygWin nel lettore, aprite la directory cyg e lanciare in esecuzione (con un doppio click del pulsante sinistro del mouse sulla relativa.
Posta elettronica Usare la posta elettronica con il browser web 2 a parte La rubrica.
BIOINFO3 - Lezione 24 ARRAY
66. Rubrica La Rubrica vi consente di raccogliere gli indirizzi di posta elettronica. Potete accedere dalla rubrica dallinterno del programma di posta.
DDE Data Dynamic Exchange Appunti lezioni Classi 1C e 1H – gruppo A
Creare pagine web Xhtlm. Struttura di una pagina.
BIOINFO3 - Lezione 221 Listruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
BIOINFO3 - Lezione 271 PATH DEL FILE Bisogna fare molta attenzione al path del file da aprire. Per non sbagliare converrebbe passare sempre il path assoluto.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Sincronizzazione dei processi
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
1 I segnali. 2 Prima un po’ di teoria…... 3 Stati dei processi in UNIX Idle Sleeping Zombified Runnable Running Fork iniziata waitpid Fork terminata.
POSTA ELETTRONICA La posta elettronica è un’innovazione utilissima offerta da Internet. E’ possibile infatti al costo di una telefonata urbana (cioè del.
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
Riferimento rapido per l’app © 2013 Microsoft Corporation. Tutti i diritti riservati. Schermata iniziale di Lync I riquadri dell'hub a sinistra nella schermata.
I processi.
© 2012 Microsoft Corporation. Tutti i diritti sono riservati. Pianificare una riunione Lync È possibile pianificare una riunione Lync tramite il componente.
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
1 Esercitazione finale per il corso di Sistemi Operativi (A.A. 2001/2002)
Politecnico di Milano © Domenico Barretta Processi concorrenti in Unix Docente Domenico Barretta Politecnico di Milano
Architettura dei Sistemi Operativi
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 PROGRAMMAZIONE IN SHELL The Unix Programming Environment Kernigham - Pike.
1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Operatori di incremento e decremento
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1.1 Corso di Sistemi Operativi: Programmazione di Sistema Corso di Laurea in Informatica, Università di Firenze Anno accademico 2010/2011 Prof. Luca Ferrari.
INTRODUZIONE A MATLAB LEZIONE 2 Sara Poltronieri.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
CORSO INTERNET la Posta elettronica
Conio.h contiene la dichiarazione di funzioni usate per richiamare alcune routine DOS di gestione del video e della tastiera. NECESSARIA PER system(‘’cls’’)
Modulo 5 – Database ACCESS LICEO SCIENTIFICO “ B. RESCIGNO COMPUTER SCUOLA PIANO INTEGRATO 2008/09 ESPERTO prof.ssa Rita Montella.
Albero genealogico. Si abbia un albero genealogico come nella figura sotto. Si supponga che i nomi propri delle persone siano tutti diversi, e quindi.
Transcript della presentazione:

Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix

Agenda telefonica 1.L'agenda e' costituita da un semplice file di testo. Ogni riga e' formata da: Cognome nome numero-telefonico ad esempio: Bollati Mario Corelli Simona Magni Giorgio

Comandi per gestire l'agenda cerca cognome –stampa sul terminale la riga del file agenda che contiene cognome inserisci cognome nome numero-telefonico –inserisce nel file agenda la riga formata da cognome, nome e numero di telefono rimuovi cognome –rimuove dall'agenda la riga contenente cognome

implementazione mediante demone e code di messaggi bassi mario Carli Bruno Massi Rino demone coda delle richieste di accesso all'agenda file "agenda" P2P3P1P4

Implementazione mediante demone e code di messaggi Il processo demone viene lanciato in back ground e resta in attesa sulla coda delle richieste di accesso all'agenda. L'accesso al file "agenda" e' gestito unicamente dal demone: le varie operazioni sono così automaticamente serializzate.

Implementazione mediante demone e code di messaggi le tre operazioni possono essere richieste al demone usando messaggi di tipo diverso (basta usare un numero diverso per ogni tipo di messaggio) il processo richiedente attende sulla coda la risposta del demone che restituisce il numero di telefono (per cerca) o semplicemente segnala il completamento dell'operazione (per inserisci e rimuovi)

Implementazione mediante demone e code di messaggi Come fare in modo che il demone comunichi direttamente ed esclusivamente con il processo che attende la sua risposta? Basta inserire nella stringa del messaggio il numero del processo richiedente: pid. Il demone risponde con un messaggio di tipo pid, che solo il processo stesso puo' ricevere.

Implementazione mediante semafori e accesso diretto al file "agenda" in modo mutuamente esclusivo bassi mario Carli Bruno Massi Rino file "agenda" P: V: P1P2P3P4 area ad accesso mutuamente esclusivo

Implementazione mediante semafori e accesso diretto al file "agenda" Le operazioni su "agenda" devono avvenire in mutua esclusione, attraverso l'uso di un semaforo binario inizializzato a 1 ognuno dei tre programmi, per accedere al file agenda deve prima eseguire una P sul semaforo, e poi puo' aprire il file e leggerlo o modificarne il contenuto. Alla fine delle operazioni sul file il processo deve eseguire una V sul semaforo prima di terminare.

Alcuni consigli Tenete tutti i programmi e il file agenda in un'unica directory. Come fanno i programmi a sapere l'identificatore della coda o semaforo da usare? Un modo semplice e' usare un file id_file per contere l'identificativo della coda o del semaforo: –nel caso della coda, e' il demone che preleva la coda e scrive il suo identificatore dentro id_file –Nel caso del semaforo, un programma ad hoc preleva il semaforo, scrive il suo identificatore dentro id_file e termina. I programmi leggono dentro id_file per conoscere l'identificatore da usare.

Alcuni consigli C'e' pero' un modo piu' elegante per far usare ad un insieme di programmi la coda (o il semaforo): msgid = msgget(KEY, IPC_CREAT | 666) KEY e' un numero intero concordato da tutti i programmi che vogliono usare la coda Alla prima chiamata della msgget con KEY, viene creata una nuova coda e il suo identificatore msgid associato biunivocamente a KEY. successivamente, qualsiasi altro programma che chiama msgget con lo stesso valore di KEY riceve il msgid associato a KEY.

Alcuni consigli ad esempio, in un file mydef.h possiamo mettere: #define LA_NOSTRA_CODA e in ogni programma che deve usare LA_NOSTRA_CODA: #include mydef.h..... msgid = msgget(LA_NOSTRA_CODA,IPC_CREAT|666); Notate: se 2 o piu' processi condividono lo stesso padre, allora si puo' fare anche in un altro modo: msgid = msgget(getppid(), IPC_CREAT|666);

Alcuni consigli quando avete finito di provare i programmi, ricordatevi di rimuovere le risorse prelevate (il semaforo o la coda) e, se presente, di uccidere il processo demone. Per compilare un programma C: gcc prog.c -o prog

Alcuni consigli potete usare solo "istruzioni C", se preferite, ma non scordatevi che puo' essere comodo usare anche i comandi shell. Ad esempio, per rimuovere la riga contentente cognome: $> grep –v cognome > agenda.tmp $> mv agenda.tmp agenda la system call system puo' essere usata per eseguire comandi shell da un programma C

per provare il funzionamento dei programmi : ovviamente lanciando direttamente i 3 comandi. potete pero' anche scrivere un programma che ciclicamente sceglie uno tra i comandi cerca inserisci e rimuovi e lo esegue. per produrre l'effetto di piu' richieste di accesso concorrente all'agenda, potete costruire un programma che si forka 2 o 3 volte, e ogni figlio esegue i comandi di uso dell'agenda.

consigli sul funzionamento del progr. di generazione delle richieste all'agenda: ogni figlio esegue un ciclo un numero finito di volte (ad esempio 100) oppure indefinitamente. ad ogni ciclo: –sleep un tempo random di 1 o 2 secondi –scegli in modo random uno dei tre comandi –esegui comando comando puo' essere eseguito con una exec o piu' semplicemente con una system

consigli sul funzionamento del progr. di generazione delle richieste all'agenda: il padre dei due figli che inviano ciclicamente le richieste puo' mettersi in attesa (wait) della loro terminazione, e poi rimuovere le risorse (se necessario uccidere il demone) e terminare. soprattutto nel caso in cui i figli ciclano all'infinito, potete inoltre prevedere un meccanismo di gestione della terminazione mediante signal e kill

terminazione dell'intero sistema mediante signal e kill il programma di generazione delle richieste all'agenda definisce una procedura di terminazione da eseguire alla ricezione di un segnale inviato da terminale mediante kill: $> kill –SIGUSR1 pid la procedura di terminazione rimuove le risorse (coda o semaforo) e termina il programma. ATTENZIONE: e' possibile far terminare anche i figli (e se necessario il demone)?

struttura generale del programma { termina(...) {...} signal(termina,SIGUSR1); fork() if figlio for (;;) { sleep(1,2); system(estrai,rimuovi,inserisci) } else fork() if figlio for (;;) {sleep(1,2); system(estrai,rimuovi,inserisci) } else {wait() }