Существует несколько подходов к этой проблеме, но большинство из них требует сначала выполнить запись в промежуточную память.
Сетевая файловая система (NFS)
Самый простой подход - это простопусть сервер откроет какую-то общую файловую систему, такую как NFS и использует mmap()
для сопоставления удаленного файла с адресом памяти.Затем запись по этому адресу фактически запишет кэш страницы операционной системы, который в конечном итоге будет записан в удаленный файл, когда кэш страницы заполнен или после предопределенного времени ожидания системы.
Распределенная общая память (DSM)
Альтернативный подход - использование DSM с очень маленьким размером кэша.
В информатике распределенная разделяемая память (DSM) - это форма архитектуры памяти, в которой физически разделеныПамять может быть адресована как одно логически совместно используемое адресное пространство.
[...] Программные системы DSM могут быть реализованы в операционной системе или в виде библиотеки программ и могут рассматриваться как расширения базовой виртуальной памяти.архитектура.При реализации в операционной системе такие системы прозрачны для разработчика;это означает, что основная распределенная память полностью скрыта от пользователей.
Это означает, что каждый виртуальный адрес логически сопоставляется с виртуальным адресом на удаленной машине и записывается на негосделает следующее: (а) получит страницу с удаленного компьютера и получит эксклюзивный доступ.(б) обновить данные страницы.(c) отпустите страницу и отправьте ее обратно на удаленный компьютер при повторном ее чтении.
В типичной реализации DSM (c) произойдет, только когда удаленный компьютер снова прочитает данные, но вы можетеначните с существующей реализации DSM и измените поведение так, чтобы данные отправлялись после заполнения кэша страниц локального компьютера.
MMU ввода-вывода
[...] IOMMUотображает видимые устройством виртуальные адреса (также называемые в данном контексте адресами устройств или адресами ввода-вывода) в физические адреса.
Это в основном означает запись непосредственно в буфер сетевого устройства, который фактически реализуетальтернативный драйвер для этого устройства.Такой подход кажется наиболее сложным, и я не вижу никакой выгоды от этого подхода.
Этот подход на самом деле не использует промежуточную память, но определенно не рекомендуется, если система не требует больших требований в реальном времени.