LABORATORIO DI SISTEMI OPERATIVI

Documenti analoghi
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Sistemi Operativi Teledidattico

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

La gestione dell'errore

Esercitazione 4. Gestione dei file in Unix

LABORATORIO DI SISTEMI OPERATIVI

Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

Igino Corona

LABORATORIO DI SISTEMI OPERATIVI

Modulo 13: System call relative al File System

La Comunicazione tra Processi in Unix

Capitolo 3 -- Stevens

La Comunicazione tra Processi in Unix

File System ext2. Struttura del filesystem ext2.

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4

Laboratorio di Sistemi Operativi

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

LABORATORIO DI SISTEMI OPERATIVI

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Laboratorio di Sistemi Operativi primavera 2009

Operazioni su file di caratteri

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Esercitazione di Lab. di Sistemi Operativi. - I/0 di basso livello

Architettura dei calcolatori e sistemi operativi. Input Output. IO 2 Il File System

Linguaggio C: i file

System call per l accesso a file

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

Laboratorio di Sistemi Operativi primavera 2009 open

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3

Simulazione esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Sistemi Operativi. II Semestre - Marzo/Giugno 2012 Matricole congr. 0 mod 3. File & Directory

Laboratorio di Sistemi Operativi primavera 2009

La creazione di un nuovo processo in UNIX

Chiamate di sistema. Pipe Flussi di I/O

LINUX: struttura generale

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;

Laboratorio di Sistemi Operativi

Comandi. Sistema Operativo

&& (nessun altro processo ha il file aperto) && (il fd e chiuso) Cancella il file;

Chiamate di sistema. Pipe Flus s i di I/O

Sistemi Operativi FILE SYSTEM : INTERFACCIA. D. Talia - UNICAL. Sistemi Operativi 8.1

File I/O. M. R. Guarracino: File I/O 1

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche

Sistemi Operativi 1. Mattia Monga. a.a. 2018/19. Dip. di Informatica Università degli Studi di Milano, Italia

Gestione dei file in C

Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132

Sistemi Operativi (M. Cesati)

SHELL: File e Filesystem

Gestione dei file in C

Sistemi Operativi. II Semestre - Marzo/Giugno 2011 Matricole congr. 0 mod 3. File & Directory. Leggere Directory

File binari e file di testo

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Programmazione di sistema in UNIX. Immagine di un processo in UNIX. Area dati. File comandi utente

Il file system di Unix. Caratteristiche generali dei FS comunemente usati da Unix/Linux

Esercizio FAT 1. Soluzione:

Per operare su un file abbiamo bisogno di aprirlo, scriverlo, leggerlo, chiuderlo:

I SISTEMI OPERATIVI (1)

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

1. Standard input 2. Standard output 3. Standard error

Corso di Sistemi Operativi A.A CHIAMATE DI SISTEMA PER FILE E SEMAFORI. Fabio Buttussi

Laboratorio di Programmazione

Laboratorio di Sistemi Operativi a.a FUSE. Filesystem on USEr space

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 6 Marzo 2016

(9) pid1 = waitpid (pid1, &status, 0); (10) exit (0); } / end if / } / main.c / File system_

Digressione: man 2...

Inter-process communication

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 21 Maggio 2014

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File

Gestione dei File C. Generalità

Sistemi Operativi. Esercitazione 12. Corso di Laurea Triennale in Ingegneria Informatica.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

CAP9. Device drivers

Directory. Le directory unix sono file.

syscall n Utilizzate come interfaccia col sistema operativo, funzioni diverse (n = 0..5) Assunzioni importanti:

Esercizi di Verifica Aprile 2005 Università disalerno

Corso di Laboratorio di Sistemi Operativi A.A

Interfaccia del file system

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Sistemi Operativi (M. Cesati)

Esercizio FAT 1. Soluzione: 1. Capacità del disco: 2 24 blocchi (3 byte=24 bit) 2

Il linguaggio C. Breve panoramica su stdio.h

Architettura degli elaboratori Docente:

Implementazione del File System nel Sistema Operativo Unix

FILE SYSTEM 2. I-nodes (o Inodes)

Sistemi Operativi (M. Cesati)

Processi. Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 16 Input/Output

Esempio di domande sul file system

Transcript:

LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola

Organizzazione del filesystem Meccanismo delle pipe Virtual filesystem Filesystem Unix/Linux Collegamenti (link) Strutture e primitive di accesso ai file ordinari Comunicazione fra processi mediante pipe Esercitazione 11

Virtual filesystem Tutti i dischi e le relative partizioni vengono rese accessibili (montati) mediante un unico filesystem virtuale (virtual filesystem) / sbin dev media etc home grep john passwd alice

Virtual filesystem / è la radice (root) del filesystem /home contiene le home directory degli utenti del sistema /sbin contiene i programmi di sistema /etc /dev o /dev/dvdrw o /media contiene i file di configurazione rende accessibili le periferiche: o /media/sandisk32gb o /media/matrox_1tb o... rende accessibili i supporti removibili:

Virtual filesystem Il comando per rendere accessibile un filesystem in una determinata posizione del filesystem virtuale è: mount Il file di configurazione con le informazioni relative al montaggio di filesystem è: /etc/fstab

Il filesystem in Unix/Linux I sistemi Unix sono caratterizzati dall'omogeneità o Ogni risorsa del sistema è rappresentata come un file o Esistono tre tipi di file File ordinario Insieme di informazioni allocate in memoria di massa File speciale Dispositivo fisico (periferica, porta di comunicazione ) Directory Insieme di file

Il filesystem in Unix/Linux Una parte del disco è dedicata alla i-list, la lista di tutti i descrittori di file (i-node) o Ciascun i-node viene riferito e identificato mediante un i-number L'i-node descrive le caratteristiche del file: o Tipo o Info sui permessi o Dimensione, data o Link o Vettori di indirizzamento o ordinario, speciale, directory owner, group owner, permessi numero di nomi che riferiscono al file (hard links) permettono di accedere al contenuto del file

Il filesystem in Unix/Linux Il contenuto di un "file direttorio" (directory) è costituito da una serie di record che descrivono il contenuto della directory: <nome_file1, i-number1> <nome_file2, i-number2>

Il filesystem in Unix/Linux Quando viene creato un file di nome "filename" o Viene creato il descrittore (i-node) e aggiunto alla i-list Il nuovo i-node è identificato da un i-number IN o Al contenuto della cartella viene aggiunto un nuovo record: <filename, IN> Dopo la creazione, il file ha un solo nome ("filename") o filename è un hard link al descrittore del file

Collegamenti (link) Il filesystem permette di definire più hard link associati ad un i-node: o Sono nomi alternativi per lo stesso file E' possibile definire anche collegamenti simbolici (soft link) o E' un nome alternativo per fare riferimento ad un hard link

Collegamenti (link) i-node hard link 1 file_name1.txt hard link file_name2.txt soft link file_name3.txt

Hard e soft link differenze Gli hard link puntano allo stesso i-node o Se elimino o sposto un hard link, questo non ha alcun effetto sugli altri hard link o Il descrittore del file (i-node) viene eliminato solo se il numero di hard link che vi fanno riferimento è zero Il soft link è un riferimento ad un hard link o Se elimino o sposto l'hard link, il soft link non è più in grado di accedere al file o L'eliminazione o lo spostamento di un soft link non ha alcun effetto sull'hard link

Comando ln Creazione hard link ln target link_name Creazione link simbolico (soft link) ln s target link_name

Esercizio 1 Da terminale: o o o o Creare un file "file1.txt" Creare un hard link a file1.txt e chiamarlo hl.txt Scrivere "Hello world" in file1.txt Qual è il contenuto di hl.txt? Abilitare i permessi in scrittura per "others" a hl.txt. Cosa succede ai permessi di file1.txt (verificare con ls l) o o o o Creare due link simbolici a hl.txt e chiamarli sym1.txt e sym2.txt Eseguire ls l e osservare l'ouput diverso in base al tipo di link Eliminare file1.txt Cosa succede a hl.txt? Eliminare sym1.txt Cosa succede a hl.txt? Spostare o eliminare hl.txt Cosa succede se si prova a vedere il contenuto di sym2.txt con il comando cat?

Strutture dati per l'accesso ai file Il meccanismo adottato per l'accesso ai file è di tipo sequenziale: o Ad ogni file aperto è associato un I/O pointer riferimento per la lettura/scrittura sequenziale sul file o Le operazioni di lettura/scrittura provocano l'avanzamento del riferimento

Strutture dati per l'accesso ai file Le strutture dati per l'accesso ai file sono gestite dal kernel: Tabella dei File Aperti di Processo o E' nella User Structure del processo o Ogni elemento (file descriptor) è un riferimento all'elemento corrispondente nella Tabella di File Aperti di Sistema Tabella dei File Aperti di Sistema o Contiene un elemento per ciascun file aperto dal sistema Se due processi aprono lo stesso file due entry separate Ogni elemento contiene un I/O pointer al file e un riferimento all'i-node del file (che viene tenuto in memoria principale, nella Tabella dei File Attivi) I/O pointer e i-node permettono di trovare l'indirizzo fisico in cui effettuare la prossima lettura/scrittura sequenziale

Strutture dati per l'accesso ai file User structure (descrittore del processo) Strutture dati globali Tabella dei file attivi i-node I/O pointer File descriptor Tabella dei file aperti di processo Tabella dei file aperti di sistema

Strutture dati per l'accesso ai file Il processo figlio eredita dal padre una copia della User Structure, quindi anche una copia dei file descriptor o In questo caso, i due processi hanno descrittori che puntano allo stesso elemento della Tabella di File di Sistema, e quindi condividono l'i/o pointer nell'accesso sequenziale al file

Strutture dati per l'accesso ai file User structure padre Strutture dati globali File descriptor Tabella dei file attivi i-node fork I/O pointer File descriptor Tabella dei file aperti di sistema User structure figlio

Primitive per l'accesso ai file Apertura di un file descriptor int open(const char* path, int flags) o const char* path Path del file da "aprire". o int flags Modalità di accesso. Ci sono varie macro definite <fcntl.h> per descrivere le possibili modalità. Se compatibili fra loro, più macro possono essere messe in OR. Esempi di macro: O_RDONLY, O_WRONLY, O_RDWR. Per la lista completa leggere "man 2 open". o Ritorna il file descriptor Dopo l'apertura, l'i/o pointer viene posizionato all'inizio del file se non è utilizzata la modalità O_APPEND (in tal caso, I/O parte dalla fine del file).

Primitive per l'accesso ai file Lettura da file ssize_t read(int fd, void* buf, size_t count) o int fd Descrittore del file da cui leggere o void* buf Puntatore al buffer in cui scrivere i dati letti o size_t count Numero di byte da leggere (intero positivo) o Ritorna il numero di byte letti (valore negativo in caso di errore)

Primitive per l'accesso ai file Scrittura su file ssize_t write(int fd, const void* buf, size_t count) o int fd Descrittore del file in cui scrivere o void* buf Puntatore al buffer da cui leggere i dati da scrivere nel file o size_t count Numero di byte da scrivere (intero positivo) o Ritorna il numero di byte scritti (valore negativo in caso di errore). Potrebbero essere meno di count, ad esempio, se è terminato lo spazio disponibile.

Esempio (1/2) Esempio di lettura testo da file e stampa a video con buffer di dimensioni fisse: #include<fcntl.h> #include<stdlib.h> #include<stdio.h> #define BUF_SIZE 64 int main(int argc, char** argv) { if (argc < 2) { printf("usage: %s FILENAME\n", argv[0]); exit(-1); } int fd = open(argv[1], O_RDONLY); if (fd < 0) { perror("errore nella open\n"); exit(-1); }

Esempio (2/2) Esempio di lettura testo da file e stampa a video con buffer di dimensioni fisse: } char buffer[buf_size]; ssize_t nread; while((nread=read(fd, buffer,buf_size-1)) > 0){ buffer[nread] = '\0'; printf("%s", buffer); } close(fd); if (nread < 0) { perror("errore nella read\n"); exit(1); } exit(0);

Funzioni della libreria standard C open, read, write, close sono chiamate di sistema non bufferizzate La libreria standard del C mette a disposizione funzioni bufferizzate o fopen, fread, fwrite, flcose o Alcune funzioni permettono la lettura/scrittura formattata (es. fscanf, fprintf )

Comunicazione mediante scambio di messaggi pipe I processi possono comunicare sfruttando il meccanismo delle pipe o Comunicazione indiretta, senza naming esplicito o Realizza il concetto di mailbox nella quale si possono accodare messaggi in modo FIFO o La pipe è un canale monodirezionale Ci sono due estremi, uno per la lettura e uno per la scrittura

Comunicazione mediante scambio di messaggi pipe Astrazione realizzata in modo omogeneo rispetto alla gestione dei file: o A ciascun estremo è associato un file descriptor o I problemi di sincronizzazione sono risolti dalle primitive read/write Un lettore si blocca se la pipe è vuota Uno scrittore si blocca se la pipe è piena I figli ereditano gli stessi file descriptor e possono utilizzarli per comunicare con il padre e gli altri figli o Per la comunicazione di processi che non si trovano nella stessa gerarchia si utilizzano fifo o socket. Pagina del manuale: man pipe

Comunicazione mediante scambio di messaggi pipe Creazione dei descrittori della pipe int pipe(int fd[2]) o int fd[2] Vettore di due interi: conterrà i descrittori della pipe. Infatti, la funzione pipe salva in fd[0] l'estremo (il descrittore) della pipe per la lettura, in fd[1] l'estremo da usare per la scrittura o Ritorna zero se ha successo.

Esercizio 2 file descriptor Da terminale, creare un file leggi.txt e scriverci "Hello world!" Scrivere un programma C in cui il main o Apre in lettura "leggi.txt" e salva il relativo descrittore in fd o Crea un processo figlio con la fork o Si sospende con la sleep per 3 secondi Il processo figlio: o Legge due caratteri dal file usando il descrittore fd e li stampa a video Il padre, dopo la sleep, legge da fd fino alla fine del file e stampa a video quello che ha letto o Notare gli effetti della condivisione dello stesso descrittore Adesso provare a chiudere il descrittore fd nel processo figlio, e ad aprirlo nuovamente. Come cambiano le cose?

Esercizio 3 pipe Scrivere un programma C in cui il main o Crea una pipe o Crea un processo figlio o Si sospende per 3 secondi con la sleep o Scrive "Hello world\n" nella pipe (suggerimento: usare la funzione strlen definita in string.h per trovare la lunghezza della stringa al momento della write) Il processo figlio legge dalla pipe e stampa il messaggio che ha letto o Verificare il comportamento bloccante della read sulla pipe