2009-04-22 3 views
0

Мне нужно создать концепцию для обмена данными между двумя компьютерами с использованием разделяемой памяти или концепций программирования сокетов tcp. Как я могу это сделать? Возможно ли реализовать разделяемую память в архитектуре клиентского сервера? Как мне это сделать?Общайтесь с двумя компьютерами, используя общую память?

ответ

7

Вы не можете связываться между двумя компьютерами с использованием общей памяти, поскольку они не используют память.

Вы должны использовать сокеты TCP.

+1

Вы можете сделать это на флеш-накопителе :) – Prankster

+0

У меня есть ощущение, что майкан знает, что из коробки два компьютера не используют память - «возможно ли реализовать разделяемую память в архитектуре клиентского сервера? об этом?" Ответ «да, его возможное, поиск распределенной общей памяти» –

+1

Распределенная разделяемая память намного сложнее (и медленнее), чем сокеты. – Zifre

1

Я думаю, а не разделяемая память, то, что вы ищете, более правильно называется чем-то вроде «отражающей памяти».

С отражающей памятью каждый компьютер в сети владеет блоком памяти. Каждый блок накачивается вокруг шины между всеми компьютерами с высокой скоростью. Каждый компьютер получает копию памяти со всех других компьютеров для чтения, но обычно может писать только в свою собственную память.

Таким образом, каждый компьютер может «видеть» состояние памяти на каждом другом компьютере. Как правило, вы видите такую ​​архитектуру в промышленных системах управления, которые распределяют контроль над физически отдельными машинами и хотят видеть общее состояние почти в режиме реального времени.

Что касается построения системы, то вы можете начать с UDP-пакетов, которые просто вызывают состояние локального компьютера, и все остальные компьютеры будут считывать эти данные.

0

Снежный ответ: «вы не можете этого сделать, потому что компьютеры не обмениваются памятью», просто неправильно. Процессоры на одном компьютере не обмениваются памятью, аппаратное и программное обеспечение реализует протоколы общей памяти, чтобы обеспечить иллюзию разделяемой памяти.

Общие протоколы памяти на разных процессорах очень похожи на протоколы разделяемой памяти на разных компьютерах, и та же проблема.

Поиск «распределенного кеша» «кортеж пространства» и "distributed shared memory" он может обеспечить некоторую пищу для размышлений. memcached - очень популярный продукт с открытым исходным кодом, на который вы можете взглянуть.

EDIT: Что касается комментария о «кеш-когерентной архитектуре». Каждый процессор имеет свой собственный локальный кэш памяти (например, кэш L1). Существует целая куча «материала», которая делает этот «кеш-когерентный» таким образом, что каждый процессор считывает и записывает в разделяемое пространство памяти. Процессоры абсолютно, положительно не записывают напрямую в одно разделяемое пространство памяти. Проблема концептуально одинакова для общей памяти на компьютерах.

+1

Это неверно. В кеш-когерентной архитектуре (например, x86) процессоры на одном компьютере обмениваются памятью. – Zifre

+0

Итак, что же такое кеш L1? –

+0

Кэш каждого процессора. Процессоры по-прежнему используют основную память и заполняют кеш L1 из одной и той же ячейки памяти. –

0

Возможно, вы захотите изучить что-то вроде memcached, системы кеширования распределенной памяти.

Предоставлено, это все еще выполняется через TCP.

2

Вы CAN Общайтесь с удаленной системой с общей памятью.Удаленный DMA - это функция новых высокопроизводительных карт сетевого интерфейса (NIC).

Вот бумага, которая оценивает производительность RDMA 10 Gb ethernet. Я знаю бесконечно, а также RDMA, другие, вероятно. Не будет ли приятно, когда выйдет 802.11 XXX? Беспроводная RDMA? :)

+0

Эта ссылка сейчас мертва, однако в wikipedia есть статья: http://en.wikipedia.org/wiki/Remote_direct_memory_access – RandomNickName42

Смежные вопросы