Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: функции для работы с кешем процессора
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
novartis
Здравствуйте.
Закидываю я данные с pci express девайса напрямую в юзер спейс программу. Данные кидаю в буфер озу.
Процессором читаю эти данные.
Понятно, что процессор читает не саму озу, а данные из кеша, где хранится копия данных из озу.

Начитался теории, что строки кеша сопровождаются флагами (MESI, изменено, эксклюзив, шаред, инвалидейт и т.д., и более сложные)
Есть ли какие функции для получения статуса кеш строки?
Конкретно под линуксом.
Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.
gerber
К участкам памяти, предназначенных для "слива" данных с периферии посредством DMA (PCI Bus Master и т. п.), предъявляется довольно много требований - участок должен быть непрерывен в физической памяти (если только не Scatter-Gather DMA), неперемещаем системой, выровнен с гранулярностью, удобной "железу", и не должен участвовать в страничной перетасовке виртуальной памяти с файлом подкачки с диска (non-pageable).
Поэтому кидать данные напрямую в юзер-спейс - это жесть, конечно. Буфер, который вы выделите new или malloc() не будет соответствовать вышеописанным требованиям. Нужен мало-мальский модуль ядра, который умеет выделять буфера с нужными свойствами.
Что касается кэширования, то специальным образом программисту не нужно заботиться о кэше - кэш-строки инвалидируются (помечаются, как устаревшие) автоматически контроллером памяти при сторонней модификации памяти посредством DMA, и при следующей попытке чтения перезагружаются из памяти в кэш.
Цитата(novartis @ Dec 16 2015, 08:32) *
Чтобы знать, что прочитанная переменная соответствует ее оригиналу в озу.

Тут volatile не забываем (хотя это и не имеет отношения к кэшу, только чтобы компилятор не заоптимизировал переменную в регистры).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.