Architettura dei calcolatori/Sistemi multiprocessore

Sistemi multiprocessore modifica

\section{Tassonomia di Flynn} Le macchine parallele si classificano in base alla distribuzione del flusso di istruzioni e del flusso di dati: \begin{itemize} \item SI: \emph{single instruction stream}, un singolo flusso di istruzioni sequenziale; \item MI: \emph{multi instruction stream}, pi\`u flussi di istruzioni contemporaneamente; \item SD: \emph{single data stream}, un singolo flusso di dati, ovvero ogni istruzione viene eseguita su un solo dato; \item MD: \emph{multiple data stream}, flussi di dati multipli, ogni istruzione è eseguita su pi\`u dati contemporaneamente. \end{itemize} La combinazione di queste caratteristiche generano quattro grandi categorie di macchine che includono tutte le architetture possibili.

\subsection{Macchine SISD} Si tratta di un singolo flusso di istruzioni eseguito su un dato alla volta, si tratta dei comuni calcolatori monoprocessore

\subsection{Macchine SIMD} Eseguono le stesse istruzioni su pi\`u dati, come enormi coprocessori.

\subsection{Macchine MISD} Non esistono, anche se si possono considerare tali le macchine con una pipeline delle istruzioni, quando pi\`u istruzioni sono in fase di esecuzione contemporaneamente sullo stesso insieme di dati.

\subsection{Macchine MIMD} Sono tolleranti ai guasti e scalabli, ma molto costose e di difficile configurazione.

\subsubsection{Modello a memoria distribuita} Detto anche a scambio di messaggi, in pratica tante macchine SISD indipendenti e collegate tra di loro, in grado di scambiare dati; ad esempio un insieme di calcolatori in una rete.

Per messaggio si intende in questo caso la copia di informazioni da una DM ad un'altra.

\subsubsection{Modello a memoria comune} Si tratta dei sistemi multiprocessore strettamente accoppiati.

\section{Parametri per misurare le prestazioni}

\subsection{Speedup} Lo \emph{speedup} $S$ è il rapporto tra il tempo di esecuzione di una istruzione in una macchina monoprocessore ($t_1$) ed il tempo di esecuzione in una macchina con $n$ processori ($t_n$). \begin{equation}

 S = \frac{t_1}{t_n}

\end{equation} Lo speedup ottimo è $n$, ma esiste un limite teorico, dato dala \emph{legge di Amdar}: in ogni programma esiste una parte intrinsecamente sequenziale, per cui se $t_s$ è il tempo necessario per eseguire la parte sequenziale, allora \begin{equation}

 S < \frac{t_1}{t_s + \frac{t_1 - t_s}{n}} < n

\end{equation} è quindi necessario scrivere programmi le cui parti sequenziali siano pi\`u brevi possibile.

\subsection{Efficienza} L'\emph{efficienza} ($E$) è il rapporto tra lo speedup ed il numero di processori \begin{equation}

 E = \frac{S}{n}

\end{equation} Misura quanto è possibile sfruttare il parallelismo.

\section{Reti di connessione per macchine MIMD} Oltre al tempo necessario per l'elaborazione esiste un tempo necessario per la comunicazione che non è parallelizzabile e che è composto da una parte fissa e da una parte proporzionale alla lunghezza del messaggio; la comunicazione viene fatta fare ad hardware dedicato.

Un altro problema è quello di mappare la struttura logica del programma nella struttura fisica del calcolatore.

\subsection{Bus} \subsection{Connessioni punto-punto} \subsection{Ring} \subsection{Mesh} \subsection{Mesh toroidale} \subsection{Binary tree} \subsection{Fat tree}

\chapter{Simulazione}

\section{Livelli logici estesi} Si definiscono più livelli logici che definiscono tutte le varie combinazioni possibili: \begin{itemize} \item Z: alta impedenza, data da una porta 3-state o open collector aperta, la corrente è nulla; \item LH: pull up, 1 logico, livello di tensione alto con bassa corrente, dato da una resistenza collegata all'alimentazione; \item LL: pull down, 0 logico, livello di tensione basso con bassa corrente, dato da una resistenza collegata a massa; \item LX: non specificato, può essere corrispondente a LL o a LH; \item DH: driven high, 1 logico, livello di tensione alta con alta corrente pilotato da un transistor collegato all'alimentazione; \item DL: driven low, 0 logico, livello di tensione basso con alta corrente pilotato da un transistor collegato a massa; \item DX: non specificato, può essere corrispondente a DL o DH; \item LI: indeterminato con bassa corrente, dato da due resistenze collegate una a massa e una all'alimentazione, causa un eccessivo consumo di potenza; \item DI: indeterminato con corrente elevato, dato da due transistori attivi collegati uno a massa e uno all'alimentazione, è pericoloso per i componenti che sono attraversati da una forte corrente e rischiano la rottura. \end{itemize} Per non specificato si intende un livello logico valido ma sconosciuto, per indeterminato si intende un livello non valido.

\subsection{Combinazione}

\begin{tabular}{cccccccccc}

  & Z  & LH & LL & LX & LI & DH & DL & DX & DI \\

Z & Z & LH & LL & LX & LI & DH & DL & DX & DI \\ LH & & LH & LI & LI & LI & DH & DL & DX & DI \\ LL & & & LL & LI & LI & DH & DL & DX & DI \\ LX & & & & LI & LI & DH & DL & DX & DI \\ LI & & & & & LI & DH & DL & DX & DI \\ DH & & & & & & DH & DI & DI & DI \\ DL & & & & & & & DL & DI & DI \\ DX & & & & & & & & DI & DI \\ DI & & & & & & & & & DI \\ \end{tabular}

\section{Modello di sistema} Si modellizza un sistema di reti logiche con reti logiche ideali senza ritardi, elementi di ritardo e nodi.

I valori dei ritardi sono forniti nelle caratteristiche delle reti utilizzate, si sceglie sempre il caso peggiore.

\section{Simulazione a tempo discreto} Si scelgono i ritardi del circuito da simulare come multipli del ritardo base $\tau$, quindi si calcola lo stato del circuito (i livelli logici di tutti i nodi) per ogni $\tau$ fino a che lo stato diventa fisso o periodico.

\section{Simulazione ad eventi}

\chapter{Tecnologie web e sicurezza}

\section{Protocollo HTTP} L'HTTP (\emph{hyper text transfer protocol}) è un protocollo a livello applicazione basato su TCP, è di tipo request-response e stabilisce il formato della richiesta del client e della risposta del server.

Le fasi del protocollo sono l'apertura di una connessione al server da parte del client, l'invio della richiesta HTTP, la ricezione della risposta HTTP dal server, la chiusura della connessione. Il protocollo TCP garantisce l'affidabilità della trasmissione e la conferma della ricezione.

Quando si chiude la connessione le informazioni su di essa vengono perse, inoltre il protocollo TCP è definito in modo che la comunicazione è lenta all'inizio e la velocità cresce con il tempo, per cui il protocollo HTTP 1.1 non richiede la chiusura per poter servire più velocemente le richieste successive del client.

Non vengono tenute informazioni sul client.

La gestione delle richieste è incanalata, ogni risposta segue la richiesta e le richieste sono processate in sequenza.

\subsection{Richiesta HTTP} Una richiesta HTTP si compone di tre parti: \begin{itemize} \item la \emph{request line}, prima riga della richiesta, che specifica un metodo, un URL e la versione del protocollo; \item gli \emph{header}, una serie di linee del tipo chiave: valore, sono opzionali; \item il contenuto, che può non essere presente; \end{itemize}

I metodi possono essere: \begin{itemize} \item PUT: inserire la pagina presente nel contenuto all URL specificato; \item GET: ricevere la pagina specificata dell'URL; \item HEAD; \item POST; aggiungere il contenuto alla fine della pagina specificata; \item DELETE: cancellare la pagina specificata nell'URL. \end{itemize} L'URL è un percorso che indica un file o una cartella, la versione del protocollo può essere HTTP/1.0 o HTTP/1.1.

Gli header possono essere: \begin{itemize} \item User\_agent: \emph{nome}, specifica il nome del programma browser usato dal client; \item If\_modified\_since: \emph{data}, indica che l'azione deve essere eseguita se il file è stato modificato dopo la data specificata; \item Accept: \emph{emph}, specifica il tipo MIME dei file da ricevere; \item Authorization: \emph{username} \emph{password}; \item Cookie: \emph{numero}, indica che il browser ha memorizzato un cookie relativo al server ed il suo contenuto. \end{itemize}

\subsection{Risposta HTTP} Una risposta HTTP si compone di tre parti: \begin{itemize} \item la \emph{status line}, prima riga della risposta, che specifica un codice di errore ed una stringa associata al codice; \item gli \emph{header}, una serie di linee del tipo chiave: valore, sono opzionali; \item il contenuto, che può non essere presente; \end{itemize}

I codici di errore possono essere: \begin{itemize} \item 200 Ok: indica che la richiesta è stata soddisfatta; \item 301 Moved permanently: indica che la pagina è stata spostata; \item 302 Moved temporanely: indica che la pagina è stata spostata in via provvisoria; \item 304 Not modified: è in risposta alla richiesta con header If\_modified\_since: \ldots; \item 401 Unauthorized: indica che non si ha il permesso di accedere alla pagina; \item 402 Payment: indica la richiesta di pagamento per accedere; \item 403 Forbidden: indica che l'accesso non è consentito; \item 404 Not found: indica che la pagina non è stata trovata. \end{itemize}

Tra gli header specifici del server ci sono: \begin{itemize} \item Set\_cookie: \emph{numero}: indica la richiesta di memorizzare un \emph{cookie}, il browser memorizza i cookie relativi a ciascun server e li usa ogni volta che ricontatta il server con l'header Cookie. \item Expire: \emph{data}: indica che il documento non è più valido dopo la data specificate e deve essere ricaricato; \item Last\_modified: \emph{data}: indica la data di ultima modifica del documento. \end{itemize}

\section{Caching nel web} Un proxy è più efficiente della cache mantenuta dal browser perché un solo utente ha poca probabilità di richiedere le stesse cose.

Quando un client contatta un server web attraverso proxy, deve specificare nella richiesta, nel campo URL, anche l'indirizzo del server, che normalmente non è necessario; quindi il client deve essere conscio di comunicare attraverso un proxy.

Nel caso che il documento non sia presente nella cache il proxy introduce un overhead, dovuto al fatto che deve aprire una connessione con il server web per ottenere il documento.

Le statistiche dicono che solo il 25\% delle pagine web cambia in 7-10 giorni e solo il 5\% ogni giorno.

Un proxy può essere inserito in una rete locale per risparmiare banda sul traffico verso l'esterno, spesso il traffico web occupa circa il 15\% della rete locale e circa il 70\% del collegamento verso l'esterno; un proxy ha ragionevolmente una hit rate di 40-70\% e può far risparmiare molto.

\section{CGI}

\subsection{Passaggio dei parametri} REQUEST\_METHOD=\emph{GET o POST}, CONTENT\_LENGTH=\emph{dimensione} \subsubsection{Metodo GET} \subsubsection{Metodo POST}

\subsection{Risultati} Content-type: \emph{tipo}

\section{Sicurezza nel web}

\subsection{Requisiti per transazioni commerciali} Quando si stipulano contratti attraverso una rete pubblica l'informazione che passa per la rete è accessibile a terzi \begin{itemize} \item evitare il ripudio di un contratto; \item confidenzialità: non diffondere informazioni ad altri; \item autenticazione: riconoscere i comunicatori e verificare l'identità di chi afferma essere chi; \item integrità dei messaggi: mancanza di alterazione dei messaggi in transito; \item possibilità di stabilire delle sessioni spontanee per il cliente; \item anonimità del cliente. \end{itemize}

\subsection{Tecniche} \subsubsection{Crittografia a chiave privata o simmetrica} \subsubsection{Crittografia a chiave pubblica o asimmetrica} \subsubsection{Funzioni hash e firma digitale} \subsubsection{Certificati}

\subsection{Attacchi} \subsubsection{Attacchi low-technology} \subsubsection{Denial of service} \subsubsection{Man in the middle}

\section{SSL} Rende sicura la comunicazione a livello di socket: autentica il server, garantisce la confidenzialità della sessione e pu\'o opzionalmente fare l'autenticazione del client.

Un'autorità di certificazione cifra con la propria chiave privata la chiave pubblica e l'indirizzo del server; il client genera una chiave simmetrica da usare per la comunicazione e la invia crittata con la chiave pubblica del server.

\begin{itemize} \item il client fa una richiesta HTTP; \item il server invia un form HTML che richiede che i dati siano confidenziali; \item il client riempie il form e spedisce i dati usando il protocollo HTTPS (http://) che indica una connessione sicura sulla porta 443; \item il browser scambia con il server alcuni messaggi per stabilire le opzioni (o ssl handshake o negotiations of crypto opts), come versione e parametri degli algoritmi per server authentication, private key, integrity; \item il server invia il suo certificato al client; \item il client controlla che la certification authority indicata sia conosciuta (eventualmente richiedendo l'intervento dell'utente) ed estrae la chiave pubblica del server; \item il client genera la session key, la critta con la chiave pubblica del server e la invia; \item il server decritta il messaggio con la sua chiave privata ed invia al client un messaggio cifrato con la session key come acknowledgement dell'avvenuta connessione (secure channel established). \end{itemize}

\section{SHTTP} è un protocollo a livello applicazione: il messaggio HTTP è inviato come body cifrato di un messaggio SHTTP

Nell'intestazione del messaggio SHTTP è contenuto il certificato del server.

\begin{verbatim} <html> <head> <certs fmt= > \emph{certificato del server} </certs> </head> <body> <form action=shttp://\emph{server/cgi} dn=\emph{cone del server} du=\emph{parametri del certificato} o=\emph{ceertification authority} c=\emph{sigla del paese} \emph{crypto opts} > ... </form> \end{verbatim}

Il browser riceve quindi la chiave pubblica del server certificata dall'autorità di certificazione, genera la chiave di sessione e la invia cifrata nella risposta SHTTP incorporata nell'header.

\section{SSH} Il client riceve la chiave pubblica del server, ma non sono definiti metodi per accertarne l'identità, comunque il client può memorizzare la chiave ed usarla per collegamenti successivi.

Il client genera una chiave di sessione simmetrica a 256 bit, la cifra con la chiave pubblica del server e la invia; tutta la comunicazione si svolge cifrata con la chiave di sessione e quindi la password per l'accesso al sistema può essere inviata in modo sicuro.

\È possibile anche l'autenticazione con algoritmo RSA del client: il server memorizza le chiavi pubbliche dei client autorizzati, quando un client si connette invia la sua chiave pubblica; il server verifica che il client sia tra quelli autorizzati, genera un challenge (numero), lo critta con la chiave pubblica ricevuta e lo invia crittato al client; il client si autentifica se riesce a decrittare il challenge; se il server riceve il challenge correttamente decrittato allora accetta la sessione del client.

\section{Linguaggio JAVA} JAVA è un linguaggio interpretato, si distribuisce come un bytecode intermedio già compilato in un linguaggio molto simile all'assembler, non ottimizzato per un particolare processore e sufficientemente generico; è comunque possibile compilarlo ottimizzandolo per una specifica piattaforma.

I file di codice hammo estensione .java, i file in bytecode hanno estensione .class; il compilatore è javac e l'interprete è java.

I packages si importano con la direttiva import (possono essere usai i caratteri jolly); tutti i packages sono contenuti in una cartella di sistema (CLASSPATH), ogni file deve avere lo stesso nome della classe che contiene.

Deve esistere almeno una classe con un metodo mail, è possibile l'ereditarietà singola (extends).

È possibile utilizzare programmi java nelle pagine web inserendole con il tag applet, le applet definiscono le funzioni init(), start(), stop(), destroy() e metodi di container add(), remove(), setLayout(); un applet può comunicare solo con l'host da cui sono caricate, non possono leggere o scrivere, avviare programmi e accedere a proprietà di sistema, inoltre le finestre sono indicate con uno stile diverso.

\chapter{Microcontrollori} Sono dei microprocessori dedicati ai problemi di controllo (sensori e attuatori); sono costituiti da dispositivi di input come convertitori A/D, una piccola memoria RAM ed una memoria persistente (EEPROM o FLASH ROM) per eseguire e memorizzare i programmi, dispositivi di output come convertitori D/A.

\section{Microprocessori PIC} Sono processori RISC, dotati di supporto per le interruzioni, stack a 2-8 livelli, 0,5-16Kb di program memory, 25-1536 byte di data memory, architettura harward, register file, pipeline.