| Предыдущий | Следующий |
| KERN_FAILURE | KERN_NOT_RECEIVER |
KERN_RESOURCE_SHORTAGE
KERN_RESOURCE_SHORTAGE означает, что Mach не смогла выделить системный ресурс, необходимый для выполнения запроса. XNU прямо указывает, что это состояние может быть непостоянным. Поэтому оно отличается от неверно сформированного запроса и от KERN_NO_SPACE, который относится к неподходящему диапазону виртуальных адресов.
Сам код не определяет, какого именно ресурса не хватило. В зависимости от операции ограничивающим фактором могут быть метаданные управления памятью, порт или другой ресурс IPC, выделение памяти ядром либо ресурс иной подсистемы. Сведение каждого случая к обычному исчерпанию кучи приложения теряет этот контекст.
Практические действия
- Запишите точный вызов Mach, запрошенный размер, целевую задачу и предшествующие события жизненного цикла ресурсов.
- Перед повторной попыткой освободите больше не нужные ресурсы.
- Используйте ограниченное число повторов только тогда, когда вызывающая сторона способна безопасно перенести временный отказ; неограниченные немедленные повторы могут усилить нагрузку.
- Сопоставьте отказ с состоянием карты VM. Если проблема заключается в самом запрошенном диапазоне адресов, более конкретным результатом будет
KERN_NO_SPACE.
Модель Mach разделяет адресные пространства задач, объекты памяти, порты и ресурсы IPC. Код возврата сообщает, что выделение завершилось ошибкой на уровне Mach; контекст для поиска ограниченного ресурса предоставляет неудавшийся API.
Ссылки
- XNU: kern_return.h
- Руководство Apple по программированию ядра: обзор Mach
- Справочное руководство GNU Mach: интерфейс виртуальной памяти
Нужно найти другой код? Найти другой код состояния или ошибки.
