Операция V0P_MAP вызывается из mmap и выполняет зависимые от файловой системы действия по инициализации и проверке параметров. Эта операция контролирует, например, отсутствие блокировки отображаемого файла или невозможность дальнейшего отображения при достижении конца файла. Файловая система также может читать информацию, необходимую для преобразования смещений файла в физические номера блоков (из индексных дескрипторов и блоков косвенной связи). Причины, в силу которых это делается, описаны ниже.
Операция VOP_GETPAGE вызывается подсистемой VM при необходимости получения страниц из файла. Страницы могут при этом уже находиться в памяти, но система VM не обладает данными об их преобразованиях. Операция VOP_GETPAGE начинает свою работу с проверки наличия страниц в памяти. Ядро хранит информацию обо всех страницах ядра в глобальной таблице хэширования, индексом к которой является пара . Ядро помещает данные о странице в таблицу при размещении ее в памяти и удаляет при сбросе бита корректности или переназначении страницы. Несмотря на то, что каждая файловая система реализует операцию V0P_PAGE по-своему, все они применяют единую функцию поиска в хэш-таблице. Если страница там не обнаруживается, операция произведет ее чтение из файла (посредством специфичных для конкретной файловой системы функций). В локальных файловых системах, например ufs, следует определять местонахождение данных на диске на основе из индексного дескриптора и блоков косвенной связи файла, в то время как в удаленных файловых системах (например, NFS) необходимо производить запрос на получение страницы от сервера.
Операция VOP_GETPAGE обрабатывает любые случаи обращения к файлам, именно поэтому возможна оптимизация ее работы при помощи таких технологий, как упреждающее чтение. Для той или иной файловой системы, как правило, известны данные об оптимальном размере передачи, а также специфика логического разбиения дисков, поэтому операция может быть оптимизирована за счет кластеризации (klustering1). Этот термин обозначает процесс объединения смежных страниц в рамках операции вводавывода1. Операция VOP_GETPAGE также может производить операции vnode, такие как обновление данных об обращениях или количестве изменений соответствующего индексного дескриптора.
Операция VOP_PUTPAGE вызывается для сброса страниц, потенциально заполненных полезной информацией (так называемых «грязных» страниц) обратно в файл. Параметры операции включают в себя флаг, указывающий на синхронность или асинхронность записи. Если операция вызывается демоном pagedaemon с целью освобождения некоторого количества памяти, может произойти взаимная блокировка. Например, операции VOP_PUTPAGE необходимо производить определение физического расположения страниц на диске. Для этого иногда приходится читать данные из блока косвенной связи (см. раздел 9.2.2), что невозможно из-за отсутствия свободной памяти.
Одним из способов предупреждения возникновения взаимной блокировки является хранение информации о преобразованиях из блоков косвенной связи в памяти в течение всего периода поддержки отображения файла. Такой подход увеличивает производительность работы обеих операций (V0P_ GETPAGE и VOP_PUTPAGE), так как не требует проведения чтения данных из блоков косвенной связи. С другой стороны, хранение в памяти информации об этих блоках приводит к некоторому избыточному расходованию оперативной памяти.
Опубликовал katy
June 20 2015 10:08:10 ·
0 Комментариев ·
2615 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.