| Предыдущий | Следующий |
| KERN_PROTECTION_FAILURE | KERN_INVALID_ARGUMENT |
KERN_NO_SPACE
KERN_NO_SPACE является результатом выделения виртуального адресного пространства Mach. XNU определяет его для уже занятого диапазона или запроса, для которого не удаётся найти требуемый непрерывный диапазон. Это не обязательно означает исчерпание физической оперативной памяти.
Это различие важно, когда вызов использует фиксированный адрес, запрашивает большой непрерывный виртуальный диапазон или выполняется в задаче с фрагментированной картой адресов. Виртуальное пространство, физическая память и нагрузка на резервное хранилище связаны, но являются разными понятиями. У процесса может оставаться доступная память, хотя разместить запрос по указанному адресу невозможно.
Что проверить
- Требует ли вызов конкретного адреса или позволяет Mach выбрать подходящее расположение.
- Запрошенный размер, выравнивание и необходимость размещения в одном непрерывном диапазоне.
- Существующие отображения в целевой задаче, включая области, созданные распределителями, общими библиотеками, JIT-компиляторами и файлами, отображёнными в память.
- Не следует ли запросить другое размещение вместо повтора того же фиксированного запроса.
Для фактической невозможности получить ресурс ядра XNU использует отдельный результат KERN_RESOURCE_SHORTAGE. Разделение этих двух случаев делает журналы значительно полезнее.
Ссылки
- XNU: kern_return.h
- Руководство Apple по программированию ядра: обзор Mach
- Справочное руководство GNU Mach: интерфейс виртуальной памяти
Нужно найти другой код? Найти другой код состояния или ошибки.