31.05.2013 Views

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!