С помощью userspace кода, указанного по ссылке выше, получилось сделать задуманное. Сейчас плис пишет прямо в буфер юзер спейс программы. Все довольно шустренько работает. Но вот зародился такой вопрос.
Плиска пишет пакет данных, размером чуть меньше страницы (~4000 байт). В конце записи плиска приписывает флаг по определённому адресу, указывающему, что запись закончена. Проц все время в while читает этот флаг. Как только проц определил, что флаг взвелся, он приступает к работе с данными. Но это не оптимально. Можно было бы начинать работать с данными по мере их поступления.
Придумали следующий вариант. Плиска все равно в шину отправляет данные пакетиками по 128байт. Из них последние 8байт отводим под флаг. Проц мониторит флаг первого пакетака - если флаг взвелся, проц может проанализировать 120 байт переданных ему данных, и переходит к считыванию флага следующего пакетика. И т.д.
А может быть есть другие средства/механизмы удостовериться в том, что данные обновились? Какие-нибудь волшебные ассемблерные вставки?
Помимо этого озадачивает следующее. Данные плиска пишет прямо в физ. память. А проц читает не саму память, а кеш первого уровня, в котором отображается блок памяти, размером с кеш линию (обычно 64байт). Так мне объяснил коллега.
Каким образом узнать (гарантировать), что в кеше процессора актуальные данные, что из Плиски вот только что не прилетели новые данные?