Domanda

  1. Quale IPC tra code di messaggi, memoria condivisa e semafori è più facile da convertire in IPC di rete e qual è il più difficile.

  2. Sarebbe più semplice convertire la memoria condivisa System V in IPC di rete o Posix memoria condivisa in IPC di rete

È stato utile?

Soluzione

Come diceva Henrik Gustafsson:

  1. Le code dei messaggi sono di gran lunga il meccanismo IPC più semplice da convertire in rete. I semafori non sono progettati per trasmettere dati e la memoria condivisa in genere richiede un accesso controllato da semaforo (o un meccanismo equivalente) per fornire un controllo adeguato anche su una singola macchina, per non parlare di una rete. Detto questo, le code dei messaggi di System V sono probabilmente il meccanismo IPC meno utilizzato.

  2. La conversione di qualsiasi meccanismo di memoria condivisa è approssimativamente ugualmente difficile. Il punto chiave da notare è che in realtà raramente si usa "memoria condivisa"; ci sono anche altri strumenti di sincronizzazione in uso.

Altri suggerimenti

  1. Direi che le code dei messaggi sono di gran lunga sulla base del fatto che le operazioni eseguite su una coda di messaggi hanno mappature quasi identiche sulle operazioni dei socket.
  2. Probabilmente ugualmente difficile, ti suggerirei di implementare qualche astrazione leggermente più adatta alla rete in cima a shm ... come una coda di messaggi. La memoria condivisa non è molto adatta per la rete anche se ci sono alcune implementazioni abilitate alla rete, ma quelle che ho incontrato sono in effetti astrazioni che perdono.
  1. I semafori non sono in realtà un meccanismo di comunicazione, sono per la sincronizzazione. La memoria condivisa può essere utilizzata su una rete ( Memoria condivisa distribuita ), ma è piuttosto difficile strumento. Le code dei messaggi sono facili perché mappano direttamente sui socket di rete.

  2. Probabilmente sarebbe una difficoltà abbastanza simile; entrambe le API sono simili, hanno solo un'interfaccia diversa.

(1). Il più semplice è la coda dei messaggi e il più difficile è la memoria condivisa.

Penso che sia perché le code dei messaggi richiedono solo un puntatore alla struttura dati della coda dei messaggi in cui, poiché la memoria condivisa richiede di collegare la memoria condivisa allo spazio degli indirizzi dei processi di entrambi i processi e l'allocazione della memoria condivisa è difficile quando i due processi sono attivi macchine diverse.

(2). È più semplice convertire la memoria condivisa Posix rispetto alla memoria condivisa System V in IPC di rete.

Penso che sia perché Posix supporta sia semafori basati sulla memoria che nomi e non richiede l'intervento del kernel mentre il Sistema V richiede l'intervento del sistema operativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top