From 525464ecdd7e6cbdccc733e73b5f1cc9dbe6022a Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 28 May 2002 17:47:50 +0000 Subject: [PATCH] Iniziata la robba seria ... si fa per dire --- fileadv.tex | 7 +++---- fileunix.tex | 1 + ipc.tex | 52 ++++++++++++++++++++++++++++++++++++++++------------ macro.tex | 5 +++++ 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index b27f34e..6737554 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -13,8 +13,8 @@ file mappati in memoria. Uno dei problemi che ci si trova ad affrontare con le funzioni ordinarie trattate in \capref{cha:file_unix_interface} è quello in cui si devono eseguire su più di un file descriptor delle operazioni che possono bloccarsi: -il problema è che mentre si è bloccati su un file un'altro potrebbe essere -libero. +il problema è che mentre si è bloccati su un file su di un'altro potrebbero +essere presenti dati da leggere. In questa sezione vedremo come si possono affrontare queste problematiche, quali sono le soluzioni possibili e quali i meccanismi il kernel e le librerie @@ -40,8 +40,7 @@ specificando il flag \macro{O\_NONBLOCK}. In questo caso le funzioni che si sarebbero bloccate ritornano immediatamente restituendo l'errore \macro{EAGAIN}. -Esistono molti casi però in cui non si vuole che questo avvenga - +L'utilizzo di questa modalità di I/O permette allora di risolvere il problema %\section{I/O asincrono} diff --git a/fileunix.tex b/fileunix.tex index 5cef3d2..7f970c7 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1,6 +1,7 @@ \chapter{I file: l'interfaccia standard Unix} \label{cha:file_unix_interface} + Esamineremo in questo capitolo la prima delle due interfacce di programmazione per i file, quella dei \textit{file descriptor}, nativa di Unix. Questa è l'interfaccia di basso livello provvista direttamente dalle system call, che diff --git a/ipc.tex b/ipc.tex index f86a851..6c1041e 100644 --- a/ipc.tex +++ b/ipc.tex @@ -2,18 +2,18 @@ \label{cha:IPC} -\section{Introduzione} -\label{sec:ipc_intro} - -Uno degli aspetti fondamentali della programmazione in unix è la comunicazione -fra processi. In questo capitolo affronteremo solo alcuni dei meccanismi più -elementari che permettono di mettere in comunicazione processi diversi, come -quelli tradizionali che coinvolgono \textit{pipe} e \textit{fifo} e i -meccanismi di intercomunicazione di System V. +Uno degli aspetti fondamentali della programmazione in un sistema unix-like è +la comunicazione fra processi. In questo capitolo affronteremo solo alcuni dei +meccanismi più elementari che permettono di mettere in comunicazione processi +diversi, come quelli tradizionali che coinvolgono \textit{pipe} e +\textit{fifo} e i meccanismi di intercomunicazione di System V. Esistono pure sistemi più complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e CORBA (\textit{Common Object Request Brocker - Architecture}) che non saranno affrontati qui. + Architecture}) che non saranno affrontati qui. Inoltre tratteremo nei +capitoli successivi tutta la problematica relativa alla comunicazione +attraverso la rete. + \section{La comunicazione fra processi tradizionale} @@ -27,32 +27,60 @@ funzioni che ne gestiscono l'uso e le varie forme in cui si \subsection{Le \textit{pipe} standard} \label{sec:ipc_pipes} +Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, e più +comunemente usato, meccanismo di comunicazione fra processi. Esse sono un file +speciale in cui un processo scrive ed un altro legge. Si viene così a +costituire un canale di comunicazione fra i due processi, nella forma di un +\textsl{tubo} (da cui il nome) in cui uno immette dati che arriveranno +all'altro. + +Perché questo accada però, e questo è il principale limite nell'uso delle +\textit{pipe}, è necessario che questi processi possano condividere il file +descriptor della \textit{pipe}; per questo essi devono comunque derivare da +uno stesso processo padre, o, più comunemente, essere nella relazione +padre/figlio. + \subsection{Le \textit{pipe} con nome, o \textit{fifo}} \label{sec:ipc_named_pipe} +Per poter superare il problema delle \textit{pipe} originali, che consentono +la comunicazione solo fra processi correlati, passando attraverso strutture +interne del kernel, sono stati introdotti dei nuovi oggetti, le \textit{fifo}, +che invece possono risiedere sul filesystem, e che i processi possono usare +per le comunicazioni senza dovere per forza essere in relazione diretta. + \section{La comunicazione fra processi di System V} \label{sec:ipc_sysv} -Per ovviare ad i vari limiti dei meccanismo tradizionale di comunicazione fra +Per ovviare ai vari limiti dei meccanismo tradizionale di comunicazione fra processi basato sulle \textit{pipe}, nello sviluppo di System V vennero introdotti una serie di nuovi oggetti che garantissero una maggiore flessibilità; in questa sezione esamineremo quello che viene ormai chiamato il -sistema \textit{SystemV IPC}. - +\textit{System V Inter Process Comunication system}, più comunemente noto come +\textit{SystemV IPC}. + \subsection{Code di messaggi} \label{sec:ipc_messque} +Il primo oggetto introdotto dal \textit{SystemV IPC} è quello delle code di +messaggi. + \subsection{Semafori} \label{sec:ipc_semaph} +Il secondo oggetto introdotto dal \textit{SystemV IPC} è quello dei semafori. + + \subsection{Memoria condivisa} \label{sec:ipc_shar_mem} +Il terzo oggetto introdotto dal \textit{SystemV IPC} è quello della memoria +condivisa. %%% Local Variables: %%% mode: latex diff --git a/macro.tex b/macro.tex index a3aa82a..d854dbe 100644 --- a/macro.tex +++ b/macro.tex @@ -139,3 +139,8 @@ tab.~\thechapter.\theusercount} %\newenvironment{description*}{\begin{description}}{\end{description}} %\newenvironment{itemize*}{\begin{itemize}}{\end{itemize}} %\newenvironment{enumerate*}{\begin{enumerate}}{\end{enumerate}} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: -- 2.30.2