Страница man для этих системных вызовов указывает, что блокировка и разблокировка памяти выполняется в единицах целых страниц.
Предположим, что я вызвал mlock(2)
для блокировки нескольких диапазонов адресов с одной страницы памяти.Если я вызову munlock(2)
для одного из этих диапазонов, будет ли снята блокировка для всей страницы (т.е. неявно разблокирует все остальные диапазоны на странице)?или блокировка страницы сохраняется до тех пор, пока не будут освобождены все диапазоны адресов?
Редактировать: Чтобы уточнить, мой вопрос не о гранулярности mlock
(страница руководства оченьясно с этой стороны).Мой вопрос о блокировке и разблокировке нескольких отдельных диапазонов на одной странице.Мой вопрос можно перефразировать следующим образом:
- Реализует ли ядро механизм, когда страница остается заблокированной, пока число
mlocks
превышает количество разблокировок?или - ядро наивно разблокирует всю страницу, когда вызывается один
munlock
(независимо от того, сколько mlocks
было вызвано ранее)?