From 88fefd4ca97449596a2b8689e89de5e66d9d6758 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 6 Nov 2001 23:14:38 +0000 Subject: [PATCH] Correzioni varie piu una nuova figura e il nuovo capitolo che credevo di aver messi ieri ... --- elemtcp.tex | 5 +---- fileadv.tex | 31 +++++++++++++++++++++++++++++++ filedir.tex | 3 --- fileintro.tex | 4 ++++ fileunix.tex | 36 +++++++++++++++--------------------- gapil.tex | 2 +- img/proc_beginend.dia | Bin 0 -> 2430 bytes process.tex | 3 ++- prochand.tex | 15 --------------- socket.tex | 2 +- 10 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 fileadv.tex create mode 100644 img/proc_beginend.dia diff --git a/elemtcp.tex b/elemtcp.tex index cce7fc6..9dce854 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -718,7 +718,6 @@ assegnazione del tipo: La funzione \func{connect} è usata da un client TCP per stabilire la connessione con un server TCP, il prototipo della funzione è il seguente: - \begin{prototype}{sys/socket.h} {int connect(int sockfd, const struct sockaddr *servaddr, socklen\_t addrlen)} @@ -824,7 +823,6 @@ sostanza l'effetto della funzione un server dopo le chiamate a \func{socket} e \func{bind} e prima della chiamata ad \func{accept}. Il prototipo della funzione come definito dalla man page è: - \begin{prototype}{sys/socket.h}{int listen(int sockfd, int backlog)} La funzione pone il socket specificato da \var{sockfd} in modalità passiva e predispone una coda per le connessioni in arrivo di lunghezza pari @@ -936,7 +934,6 @@ connessione una volta che sia stato completato il three way handshake, la funzione restituisce un nuovo socket descriptor su cui si potrà operare per effettuare la comunicazione. Se non ci sono connessioni completate il processo viene messo in attesa. Il prototipo della funzione è il seguente: - \begin{prototype}{sys/socket.h} {int listen(int sockfd, struct sockaddr *addr, socklen\_t *addrlen)} La funzione estrae la prima connessione relativa al socket \var{sockfd} @@ -1053,6 +1050,7 @@ Per attivare immediatamente l'emissione del FIN e la sequenza di chiusura si può usare la funzione \func{shutdown} su cui torneremo in seguito. + \section{I server concorrenti su TCP} \label{sec:TCPel_cunc_serv} @@ -1218,7 +1216,6 @@ chiamata dopo il completamento di una connessione sul socket restituito da \func{accept}, restituisce l'indirizzo locale che il kernel ha assegnato a quella connessione. - \begin{prototype}{sys/socket.h} {int getpeername(int sockfd, struct sockaddr * name, socklen\_t * namelen)} diff --git a/fileadv.tex b/fileadv.tex new file mode 100644 index 0000000..043228f --- /dev/null +++ b/fileadv.tex @@ -0,0 +1,31 @@ +\chapter{I/O avanzato} +\label{sec:file_advanced} + + +\section{I/O non bloccante} +\label{sec:file_noblocking} + + +\section{File locking} +\label{sec:file_locking} + + + +\section{I/O multiplexato} +\label{sec:file_multiplexing} + + +%\section{I/O asincrono} +%\label{sec:file_asynchronous} + +%Non supportato in Linux, in BSD e SRv4 c'è, ma usando il segnale \macro{SIGIO} +%per indicare che i dati sono disponibili, può essere usato in maniera semplice +%con un solo file per processo (altrimenti non sarebbe più possibile +%distinguere da quale file proviene l'attività che ha causato l'emissione del +%segnale). + + +\section{File mappati in memoria} +\label{sec:file_memory_map} + + diff --git a/filedir.tex b/filedir.tex index b985da1..7627aaf 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1440,7 +1440,6 @@ accedere ad un certo file. Per cambiare i permessi di un file il sistema mette ad disposizione due funzioni, che operano rispettivamente su un filename e su un file descriptor, i loro prototipi sono: - \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} @@ -1539,7 +1538,6 @@ privilegio. Oltre che dai valori indicati in sede di creazione, i permessi assegnati ai nuovi file sono controllati anche da una maschera di bit settata con la funzione \func{umask}, il cui prototipo è: - \begin{prototype}{stat.h} {mode\_t umask(mode\_t mask)} @@ -1576,7 +1574,6 @@ allora occorrer Come per i permessi, il sistema fornisce anche delle funzioni che permettano di cambiare utente e gruppo cui il file appartiene; le funzioni in questione sono tre e i loro prototipi sono i seguenti: - \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} diff --git a/fileintro.tex b/fileintro.tex index 3125a73..78c63b5 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -19,6 +19,8 @@ nelle particolarit contempo tratteremo l'organizzazione dei file in un sistema unix-like, e le varie caratteristiche distintive. + + \section{L'organizzazione di file e directory} \label{sec:file_organization} @@ -316,6 +318,7 @@ l'\acr{ext2}, come esempio di un filesystem unix-like. % abbiamo brevemente accennato le caratteristiche (dal lato dell'implementazione % nel kernel) in \secref{sec:file_vfs}. + \subsection{Il \textit{virtual filesystem} di Linux} \label{sec:file_vfs} @@ -584,6 +587,7 @@ che non contenga a sua volta altre directory. Al contempo la directory da cui si era partiti avrà un numero di riferiementi di almeno tre, in quanto adesso sarà referenziata anche dalla voce \file{..} di \file{img}. + \subsection{Il filesystem \textsl{ext2}} \label{sec:file_ext2} diff --git a/fileunix.tex b/fileunix.tex index 5734c43..e1ca3ab 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -166,7 +166,6 @@ system call del kernel. La funzione \func{open} è la funzione fondamentale per accedere ai file, ed è quella che crea l'associazione fra un pathname ed un file descriptor; il suo prototipo è: - \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} @@ -265,9 +264,9 @@ comportamento. \textbf{Flag} & \textbf{Descrizione} \\ \hline \hline % modailtà di accesso al file - \macro{O\_RDONLY} & apre il file in sola lettura\\ - \macro{O\_WRONLY} & apre il file in sola scrittura\\ - \macro{O\_RDWR} & apre il file lettura/scrittura\\ + \macro{O\_RDONLY} & apre il file in sola lettura. \\ + \macro{O\_WRONLY} & apre il file in sola scrittura. \\ + \macro{O\_RDWR} & apre il file lettura/scrittura. \\ \hline % modalita di apertura del file \hline \macro{O\_CREAT} & se il file non esiste verrà creato, con le regole di @@ -279,26 +278,26 @@ comportamento. usano per stabilire un file di lock possono incorrere in una race condition. Si consiglia come alternativa di usare un file con un nome univoco e la funzione \func{link} per verificarne l'esistenza.} che fa - fallire \func{open} con \macro{EEXIST}.\\ + fallire \func{open} con \macro{EEXIST}. \\ \macro{O\_NONBLOCK} & apre il file in modalità non bloccante. Questo valore specifica anche una modalità di operazione (vedi sotto), e comporta che \func{open} ritorni immediatamente (torneremo su - questo in \secref{sec:file_noblocking}). \\ + questo in \secref{sec:file_noblocking}). \\ \macro{O\_NOCTTY} & se \var{pathname} si riferisce ad un device di terminale, questo non diventerà il terminale di controllo, anche se il - processo non ne ha ancora uno (si veda \secref{sec:sess_xxx}).\\ + processo non ne ha ancora uno (si veda \secref{sec:sess_xxx}). \\ \macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi - \secref{sec:file_locking}) sul file. Non è disponibile in Linux.\\ + \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\ \macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi - \secref{sec:file_locking}) sul file. Non è disponibile in Linux.\\ + \secref{sec:file_locking}) sul file. Non è disponibile in Linux. \\ \macro{O\_TRUNC} & se il file esiste ed è un file di dati e la modalità di apertura consente la scrittura, allora la sua lunghezza verrà troncata a zero. Se il file è un terminale o una fifo il flag verrà ignorato, negli - altri casi il comportamento non è specificato.\\ + altri casi il comportamento non è specificato. \\ \macro{O\_NOFOLLOW} & se \var{pathname} è un link simbolico la chiamata fallisce. Questa è una estensione BSD aggiunta in Linux dal kernel 2.1.126. Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa - opzione è ignorata.\\ + opzione è ignorata. \\ \macro{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata fallisce. Questo flag è specifico di Linux ed è stato introdotto con il kernel 2.1.126 per evitare dei DoS\footnote{Denial of Service, si chiamano @@ -309,7 +308,7 @@ comportamento. dell'implementazione di \func{opendir}. \\ \macro{O\_LARGEFILE} & nel caso di sistemi a 32 bit che supportano file di grandi dimensioni consente di aprire file le cui dimensioni non possono - essere rappresentate da numeri a 31 bit.\\ + essere rappresentate da numeri a 31 bit. \\ \hline \hline % modalità di operazione col file \macro{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna @@ -327,13 +326,13 @@ comportamento. causava il ritorno da una \func{read} con un valore nullo e non con un errore, questo introduce una ambiguità, dato che come vedremo in \secref{sec:file_read} il ritorno di zero da parte di \func{read} ha il - significato di una end-of-file} è sinonimo di \macro{O\_NONBLOCK}\\ + significato di una end-of-file} è sinonimo di \macro{O\_NONBLOCK}.\\ \macro{O\_ASYNC} & apre il file per l'input/output in modalità asincrona. Non è supportato in Linux. \\ - \macro{O\_FSYNC} & \\ \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni \func{write} bloccherà fino al completamento della scrittura di tutti dati - sul sull'hardware sottostante\\ + sul sull'hardware sottostante.\\ + \macro{O\_FSYNC} & sinonimo di \macro{O\_SYNC}. \\ \macro{O\_NOATIME} & blocca l'aggiornamento dei tempi dei di accesso dei file (vedi \secref{sec:file_file_times}). In Linux questa opzione non è disponibile per il singolo file ma come opzione per il filesystem in fase @@ -349,7 +348,6 @@ Nelle prime versioni di unix i flag specificabili per \func{open} erano solo quelli relativi alle modalità di accesso del file. Per questo motivo per creare un nuovo file c'era una system call apposita, \func{creat}, il cui prototipo è: - \begin{prototype}{fcntl.h} {int creat(const char *pathname, mode\_t mode)} Crea un nuovo file vuoto, con i permessi specificati da \var{mode}. É del @@ -378,10 +376,10 @@ adesso questa funzione resta solo per compatibilit \section{Funzioni avanzate} \label{sec:file_adv_func} + \subsection{La condivisione dei files} \label{sec:file_sharing} - Si noti che i flag di stato del file, quelli settati dal parametro \var{flag} di \func{open}, essendo tenuti nella vode sulla file table, vengono condivisi, ai file sono però associati anche altri flag, (tenuti invece nella struttura @@ -403,7 +401,3 @@ usato al momento \subsection{La funzione \func{ioctl}} \label{sec:file_ioctl} - - - - diff --git a/gapil.tex b/gapil.tex index b7e32c3..9292659 100644 --- a/gapil.tex +++ b/gapil.tex @@ -93,7 +93,7 @@ stringstyle=\color{green}\ttfamily, % texcsststyle=\ttfamily, directivestyle=\color{magenta}\ttfamily -} +} \include{intro} \include{process} \include{prochand} diff --git a/img/proc_beginend.dia b/img/proc_beginend.dia new file mode 100644 index 0000000000000000000000000000000000000000..75a5da13b00cd8a0ce80fd62d39801af4fa522a9 GIT binary patch literal 2430 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