| Предыдущий | Следующий |
| KERN_INVALID_HOST | KERN_MEMORY_DATA_MOVED |
KERN_MEMORY_PRESENT
KERN_MEMORY_PRESENT — специализированный результат внешнего управления памятью. XNU определяет его для попытки предоставить «ценные» данные для памяти, уже присутствующей в объекте памяти. Это не обычная ошибка стандартных API выделения памяти приложениями macOS.
Виртуальная память Mach может опираться на объекты памяти, содержимое которых предоставляется и управляется через интерфейсы в стиле пейджера. В этой модели ядро и диспетчер памяти согласуют, какие страницы присутствуют и какие данные можно предоставить. Передача данных для уже присутствующей страницы противоречит этому состоянию.
Почему это важно
- Обычно результат указывает на несогласованность в пользовательском пейджере, компоненте ядра или другом пути внешнего управления памятью.
- Диагностировать его следует по автомату состояний объекта памяти и владению страницами, а не изменением обычных параметров кучи процесса.
- Проследите запросы и ответы для соответствующего диапазона страниц, чтобы найти повторную или запоздалую передачу данных.
- Перед повторной попыткой проверьте семантику «ценных» данных в реализации управления памятью.
Для конечного пользователя этот код обычно является симптомом, выданным низкоуровневым ПО. Для разработчика, работающего на границе объектов памяти Mach, он обозначает конкретное противоречие: диспетчер попытался предоставить данные для страницы, уже находящейся в объекте.
Ссылки
- XNU: kern_return.h
- Руководство Apple по программированию ядра: объекты памяти
- Справочное руководство GNU Mach: внешнее управление памятью
Нужно найти другой код? Найти другой код состояния или ошибки.