Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
7.4 Comunicazione tra processi<br />
Le applicazioni unidirezionali di Win32 gestiscono la comunicazione tra processi condividendo<br />
gli oggetti del kernel. Un altro modo consiste nel passare i messaggi: un metodo che è<br />
particolarmente popolare nelle applicazioni della GUI di <strong>Windows</strong>. Un thread può inviare un<br />
messaggio ad un altro thread o ad una finestra chiamando PostMessage,<br />
PostThreadMessage, SendMessage, SendThreadMessage, o<br />
SendMessageCallback. La differenza fra spedire per posta e inviare un messaggio consiste<br />
nel fatto che le procedure di invio per posta sono asincrone: ritornano immediatamente e il thread<br />
chiamante non sa quando il messaggio è stato realmente consegnato. Le procedure di invio sono<br />
sincrone: bloccano il chiamante fino a quando il messaggio non è stato consegnato ed elaborato.<br />
In aggiunta all’invio di un messaggio, un thread può pure inviare dei dati insieme al<br />
messaggio. Siccome i processi hanno gli spazi degli indirizzi separati, i dati devono essere<br />
copiati. <strong>Il</strong> <strong>sistema</strong> li copia chiamando SendMessage per inviare un messaggio di tipo<br />
WM_COPYDATA con una struttura dati COPYDATASTRUCT che contiene la lunghezza e<br />
l’indirizzo dei dati da trasferire. Quando il messaggio è inviato, <strong>Windows</strong> <strong>XP</strong> copia i dati in un<br />
nuovo blocco di memoria e assegna l'indirizzo virtuale del nuovo blocco al processo ricevente.<br />
7.4.1 Code di input individuali<br />
A differenza dell'ambiente di <strong>Windows</strong> a 16 bit, ogni thread Win32 ha una propria coda di input da<br />
cui il thread riceve i messaggi. (ogni input è ricevuto tramite messaggi.) Questa struttura è più<br />
affidabile della coda di input condivisa dalle finestre a 16 bit, poiché, con code separate,<br />
un'applicazione bloccata non può bloccare l'input di altre applicazioni. Se un’applicazione Win32<br />
non chiama GetMessage per gestire gli eventi nella propria coda di input, la coda si riempie, e<br />
dopo circa 5 secondi il <strong>sistema</strong> segna l’applicazione come "non rispondente".<br />
7.5 Gestione della memoria<br />
Le API di Win32 forniscono ad un'applicazione parecchie possibilità di usare la memoria: memoria<br />
virtuale, file a memoria mappata, heap, e memorizzazione locale ai thread.<br />
7.5.1 Memoria virtuale<br />
Un'applicazione chiama VirtualAlloc per riservare o impegnare la memoria virtuale e<br />
VirtualFree per rilasciare o liberare la memoria. Queste funzioni permettono<br />
all'applicazione di specificare l'indirizzo virtuale in cui la memoria è allocata e operano su multipli<br />
del formato della dimensione della pagina di memoria, e l'indirizzo di partenza di una regione allocata<br />
deve essere più grande di 0x10000. Esempi di queste funzioni sono mostrati in Figura 14.<br />
57