| Предыдущий | Следующий |
| KERN_INVALID_PROCESSOR_SET | KERN_INVALID_POLICY |
KERN_POLICY_LIMIT
Ограничение допустимого запроса планирования
KERN_POLICY_LIMIT — значение Mach kern_return_t, используемое интерфейсами политик планировщика. Оно означает, что запрошенные атрибуты планирования выходят за пределы, допустимые для целевого потока. Запрос политики может быть структурно правильным, но при этом требовать больше, чем разрешено предоставить данному потоку.
Это особенно актуально для кода, использующего thread_policy_set или связанный интерфейс Mach. Такой вызов задаёт целевой поток, разновидность политики, структуру данных политики и количество, выраженное в единицах integer_t. Например, THREAD_TIME_CONSTRAINT_POLICY передаёт период, время вычисления, ограничение и флаг возможности вытеснения; временные поля задаются значениями абсолютного времени Mach.
Отличия от соседних результатов
| Статус | Диагностическое значение |
|---|---|
KERN_POLICY_LIMIT | Выбранные атрибуты превышают применимое ограничение целевого потока. |
KERN_INVALID_POLICY | Запрошенная политика не включена или не может использоваться в текущем контексте. |
KERN_INVALID_ARGUMENT | Аргумент, разновидность политики, размер структуры или переданное значение недопустимы для вызова. |
KERN_POLICY_STATIC | Параметры политики целевого потока в этот момент нельзя изменить. |
Не сводите этот статус к общей фразе «слишком высокий приоритет». Полезными доказательствами являются полный запрос политики и идентификатор целевого потока, поскольку применимое ограничение относится к конкретному контексту планировщика, а не к одному глобальному числу.
Что записать до изменения запроса
- Зафиксируйте точную процедуру Mach, разновидность политики, порт целевого потока и каждое поле структуры политики.
- Для запроса с временными ограничениями сохраняйте
period,computationиconstraintвместе. Определение XNU требует, чтобы ограничение было не меньше времени вычисления, однако само выполнение этого соотношения ещё не доказывает, что запрос укладывается в разрешённые для потока пределы. - Проверьте, не пытается ли код применить политику реального времени там, где предполагается обычный механизм pthread или QoS. Apple документирует вызовы политик Mach для случаев, которым требуется поведение планировщика за пределами стандартного управления приоритетом POSIX.
- После успешной повторной попытки проверьте фактически действующую политику, а не полагайтесь на предположение, что резервный путь или оболочка сохранили запрошенные атрибуты.
Ссылки
- Apple XNU: kern_return.h
- Apple XNU: thread_policy.h
- Руководство Apple по программированию ядра: планирование Mach и интерфейсы потоков
Нужно найти другой код? Найти другой код состояния или ошибки.