Некоторые драйверы STREAMS поддерживают карты ввода-вывода, содержащие память с двунаправленным доступом (dual-access RAM), реже называемую памятью с двумя портами (dual-ported RAM). Такие карты имеют буферы памяти, к которым имеет право доступа как аппаратура устройства, так и центральный процессор.
Также на сайте mosecogroup.ru можно узнать много интересного на тему http://mosecogroup.ru/services/proectirovanie/dendroplani/. Что означает вообще тема дендроплан участка - про это написано на сайте mosecogroup.ru. Спасибо сайту за информацию.
Расширенный буфер может быть отражен в адресном пространстве ядра или процесса, что позволяет приложению обращаться к нему и изменять его содержимое без промежуточного копирования данных в оперативную память.
Драйверы STREAMS помещают данные в сообщения и передают их по потоку вверх. Для защиты от копирования содержимого буфера карт ввода- вывода подсистема предлагает методику использования их в качестве буфера данных сообщения. Вместо allocb() драйвер вызывает другую процедуру под названием esballoc() и передает ей адрес буфера. Подсистема STREAMS размещает структуры msgb и datab (из mdbblock), не выделяя при этом буфер данных. Его замещает буфер карты ввода-вывода, ссылки на который записываются в соответствующие поля msgb и datab.
Использование расширенных буферов порождает проблему с их освобождением. Обычно модуль применяет для этой цели процедуры freeb() или freemsg(). Ядро системы демонтирует структуры msgb, datab и буфер данных. Процедура kmem_free() освобождает такие объекты и восстанавливает память. Однако буферы драйверов не могут быть возвращены в общий пул памяти, так как относятся к карте ввода-вывода.
Процедура esballoc() в сравнении со стандартными процедурами выделения памяти поддерживает дополнительный параметр, который задает адрес функции обработчика освобождения (release handler). При удалении сообщения ядро освобождает структуры msgb и datab, после чего вызывает обработчик для открепления буфера данных. Обработчик производит необходимые действия по маркировке буфера как свободного. После этого карта ввода-вывода может использовать такой буфер повторно.
Опубликовал katy
June 24 2015 21:40:43 ·
0 Комментариев ·
3052 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.