У меня есть вопрос относительно отображаемой памяти io. Предположим, имеется периферийное периферийное устройство IO с памятью, значение которого считывается процессором. После чтения значение сохраняется в кеше. Но значение в памяти было обновлено внешним периферийным периферийным устройством ввода-вывода. В таких случаях, как ЦП определяет, что кеш был признан недействительным, и каков может быть обходной путь для такого случая?Управление кэшем с отображением памяти I/O
ответ
Это сильно зависит от платформы. И на самом деле, есть два разных случая.
Дело № 1. Память, отображаемая на периферии. Это означает, что доступ к некоторому диапазону адресов физической памяти направляется на периферийное устройство. В действительности нет оперативной памяти. Для управления кэшированием x86, например, имеет MTRR («регистры диапазона типов памяти») и PAT («таблицы атрибутов страницы»). Они позволяют устанавливать режим кэширования в определенном диапазоне физической памяти. При нормальных обстоятельствах диапазон памяти, отображаемой в ОЗУ, равен с возможностью записи в обратную сторону, тогда как диапазон памяти, отображаемой на периферийные устройства, равен uncacheable. Различные политики кэширования описаны в Intel's system programming guide, 11.3 «Методы кэширования доступны». Таким образом, когда вы выдаете запрос на чтение или запись на периферийное устройство с отображением памяти, кеш процессора обходит, и запрос переходит непосредственно к устройству.
Корпус №2. DMA. Это позволяет периферийным устройствам получать доступ к ОЗУ асинхронно. В этом случае контроллер DMA ничем не отличается от любого ЦП и одинаково участвует в протоколе согласованности кеша. Запрос на запись с периферии рассматривается кэшами других ЦП, а строки кэша либо недействительны, либо обновляются новыми данными. Запрос на чтение также просматривается кэшами других ЦП, и данные возвращаются из кеша, а не из основной ОЗУ. (Это всего лишь пример: фактическая реализация зависит от платформы. Например, SoC обычно не гарантирует жесткую когерентность кеш-памяти < -> CPU.)
В обоих случаях проблема кэширования также существует на уровне компилятора: complier может кэшировать значения данных в регистрах. Вот почему языки программирования имеют некоторые способы запрещения такой оптимизации: например, volatile
ключевое слово в C.
- 1. Файлы с отображением памяти заменяют путь IO
- 2. Управление кэшем браузера
- 3. Управление кэшем схемы Mondrian
- 4. управление кэшем не работает
- 5. Управление кэшем HTML
- 6. В чем разница между DMA и IO с отображением памяти?
- 7. Гобелен 4: Управление кэшем активов?
- 8. Управление кэшем лазурного кэша с Azure PowerShell
- 9. Управление чтением/записью в файлы с отображением памяти (windows)
- 10. Сериализация с использованием файла с отображением памяти
- 11. Файл с отображением и отображением Java-памяти
- 12. ALSA - управление async IO
- 13. Управление отображением блок-схемы
- 14. Управление отображением многострочного текста?
- 15. Проблемы с отображением памяти, отображаемые в памяти
- 16. Недостатки использования файлов с отображением памяти
- 17. Lua: файл с отображением памяти?
- 18. Файл с отображением памяти C++
- 19. Именование файлов с отображением памяти
- 20. Java-файлы с отображением памяти?
- 21. Файлы с отображением памяти .NET
- 22. Усечение файла с отображением памяти
- 23. Управление кэшем для watchQuery (Angular-Apollo)
- 24. база данных Управление кэшем Vs в deepstream
- 25. Codeigniter: управление кэшем на каждом выходе контроллера
- 26. PHP управление кэшем не похоже на работу
- 27. Управление отображением обработки в REST
- 28. Управление позицией текста с зеркальным отображением CSS
- 29. Розетки io - управление несколькими комнатами?
- 30. Управление выпуском платформы Spring IO