Allocazione e rilascio della memoria per un driver proxy SAN
Il driver proxy deve configurare l'accesso ai buffer utente in modo che l'opzione Windows Sockets possa trasferire i messaggi di controllo ed eseguire operazioni RDMA. Per richiedere questo tipo di accesso al buffer, il driver proxy imposta un bit nel membro Flag del relativo oggetto dispositivo per DO_DIRECT_IO. Il driver proxy deve anche allocare o rilasciare memoria usata per il trasferimento dei messaggi e RDMA ogni volta che richiesto di farlo. Quando windows Sockets commuta un provider di servizi SAN per registrare o rilasciare memoria, il provider di servizi SAN richiede il driver proxy rispettivamente allocare o rilasciare memoria fisica. Per altre informazioni sulla configurazione dell'accesso al buffer e sull'allocazione e rilascio della memoria, vedere Gestione della memoria e gestione dei buffer.
Allocazione di memoria insufficiente per RDMA
Un driver proxy deve allocare memoria a cui è possibile accedere per le operazioni RDMA. Il driver proxy può allocare memoria insufficiente per le operazioni RDMA anche in un sistema configurato in modo che non sia possibile allocare memoria fisica inferiore a 4 GB. Viene chiamata configurazione NOLOWMEM. Il driver proxy chiama la funzione MmAllocateContiguousMemorySpecifyCache o la funzione DMA AllocateCommonBuffer per recuperare memoria insufficiente.
Per recuperare un puntatore alla funzione DMA AllocateCommonBuffer , il driver proxy esegue la procedura seguente:
Inizializza una struttura di DEVICE_DESCRIPTION e quindi scrive informazioni pertinenti per la scheda di interfaccia di rete SAN in questa struttura.
Chiama IoGetDmaAdapter per recuperare un puntatore alla struttura della scheda DMA per la scheda SAN. In questa chiamata il driver passa un puntatore alla struttura di DEVICE_DESCRIPTION compilata. IoGetDmaAdapter restituisce un puntatore a una struttura di adapter DMA contenente un puntatore a una struttura DMA_OPERATIONS . DMA_OPERATIONS contiene puntatori a un set definito dal sistema di funzioni DMA. Una di queste funzioni è AllocateCommonBuffer, che alloca un buffer DMA fisicamente contiguo.