Paola Magillo, Univestita' di Genova,
Corso di Interfacce Utente per Informatica, a.a. 2002-2003.
SISTEMI A FINESTRE
Architettura
Un WMS puo' essere collegato ad una singola piattaforma
sulla quale girano tutte le applicazioni che ne fanno uso,
oppure avere una architettura distribuita di tipo
client/server.
- Singola piattaforma: Microsoft Windows, Macintosh
- Client/server: X Windows
Architettura client/server
Ruoli di client e server
- Server:
Processo responsabile di tutti i dispositivi di I/O
(schermo, tastiera, mouse).
Risiede sulla stessa macchina a cui sono collegati i
dispositivi, davanti alla quale siede l'utente.
- Client:
Applicazione che puo' anche girare su una macchina diversa da quella
del server, quindi lontana da quella a cui siede l'utente,
e che comunica con il server via rete.
Il client e' quello che ci mette la CPU,
il server e' quello che ci mette schermo e dispositivi di input.
Il servizio offerto dal server e' la gestione dell'I/O.
NOTA BENE:
Qui i ruoli di client e server sono invertiti rispetto ad altri
contesti, nel quali come servizio offerto si intende la potenza di calcolo.
Il computer su cui risiede i client non ha bisogno di tutto lo strato
di software che costituisce il WMS, ma solo di un protocollo di
comunicazione e delle librerie che costituiscono l'API.
- un server puo' comunicare con piu' client
(ospitare l'interfaccia di piu' applicazioni che girano su
ciascuna su una diversa macchina remota).
- un client puo' comunicare con piu' server
(vi possono girare piu' applicazioni ciascuna delle quali
mostra la sua interfaccia su macchine remote diverse).
Comunicazione fra client e server
Tutto l'I/O dell'applicazione e' gestito dal server.
Il client invia richieste al server (es. chiede di aprire una
finestra sullo schermo, chiede di scrivere o visualizzare qualcosa
su una finestra...).
Il server invia al client:
- risposte alle sue richieste
- eventi generati dalle azioni compiute dall'utente
In base alle richieste, il server alloca e mantiene risorse
per conto del client:
-
La risorsa e' una struttura dati che risiede sul server,
il server comunica al client un identificatore della
risorsa (link).
-
Il client puo' agire su questa struttura mediante le operazioni
fornite dalla API, usando l'identificatore come parametro.
Comunicazione asincrona
Il protocollo di cominicazione fra client e server e' asincrono.
-
Le richieste che arrivano al server provenienti dai vari client
sono messe in una coda, il server e le prende
in considerazione una per una quando ha tempo.
-
Gli eventi che arrivano dal server ad una applicazione che gira sul client
sono messi in coda, l'applicazione li prende in considerazione uno
per uno quando ha tempo.
Ne' il server ne' il client bloccano la loro esecuzione:
-
Il client non aspetta la risposta alla richiesta ma va avanti
(anche con altre richieste).
-
Il server invia eventi man mano che arrivano, non aspetta che
l'applicazione li abbia processati
Ci possono essere dei ritardi.
Risorse e richieste
Risorse
Risorsa: struttura dati mantenuta e gestita dal server
per conto di uno o piu' client.
Contiene tutte le informazioni relative ad un potenziale strumento
disponibile al client per fare I/O sul server
Risorse possono corrispondere a:
- finestre
- bitmap (matrici booleane = immagini raster in bianco e nero)
- font
- pixmap (matrici di piu' bit = immagini raster a colori)
Il server puo' creare, modificare e distruggere le risorse su richiesta
del client.
-
Quando il client chiede al server una risorsa,
il server (se puo' soddisfare la richiesta) alloca la risorsa
corrispondente e fornisce al client un identificatore (link) attraverso
il quale il client puo' accedere alla risorsa stessa.
-
Ogni risorsa (in base al suo tipo) e' caratterizzata da un insieme di
parametri che il client puo' conoscere ed impostare attraverso
opportuni comandi della API.
-
Agendo sulle risorse (tramite le funzioni della API) il client
puo' produrre l'output.
Nota: una risorsa corrisponde ad un potenziale
strumento di I/O. Es: una finestra nello stato corrente
puo' essere mappata (visibile) oppure non mappata (nascosta).
Richieste
Quando il client ha bisogno di un servizio da parte del server,
manda una richiesta.
Esempi di richieste riferite a risorsa di tipo "finestra":
- creare una finestra
- distruggere una finestra
- riconfigurare una finestra (visualizzare, nascondere,
spostare, ridimensionare...)
- visualizzare testo in una finestra
- visualizzare output grafico in una finestra
- chiedere informazioni sullo stato corrente di una finestra
Vi sono richieste per altri tipi di risorse.
Per soddisfare una richiesta, il server puo' dover compiere una delle
operazioni seguenti:
- allocare/deallocare la struttura dati corrispondente alla
risorsa interessata
- modificare/leggere i parametri della struttura dati
- generare output sui dispositivi grafici
- generare eventi verso altri client (es. per riconfigurare
una finestra il server si rivolge al window manager, che e'
un particolare client - ved. dopo)