Я хочу реализовать механизм ожидания незанятого ожидания для создания задержки в наносекундах в модуле ядра Linux.Неужели занят ожидание?
Прямо сейчас я смотрел на функции
ndelay(ns);
Но https://www.kernel.org/doc/Documentation/timers/timers-howto.txt
Здесь упоминается, что ndelay функция занятая механизм ожидания.
Но я хочу не занятую задержку ожидания. Итак, я думаю о nop
в модуле ядра Linux, как это:
asm volatile ("nop");
Я изучал, что NOP принимает один цикл выполнения. Итак, я буду внедрять вложенные nop, чтобы получить требуемую задержку. Мой вопрос:
Используя nop, я буду внедрять задержку в наносекундах в не занятой очереди ожидания? Кто-нибудь может подтвердить это? Также будет полезно обратиться к некоторым журналам и ресурсам.
Это инструкция 1 цикла «ничего не делать». если ваш процессор будет иметь время цикла наносекундного масштаба, тогда да, nop будет «некоторым количеством наносекунд задержки». но обратите внимание, что это будет другая задержка, основанная на тактовой частоте процессора. процессор 1ghz будет иметь 1 наносекундную задержку, а 100 МГц процессор будет составлять 10 наносекунд. –
Спасибо за ваш комментарий. Но это создаст незапланированную задержку ожидания? –
Я не уверен, что означает «не занятый». По моему опыту вы либо выполняете ожидание (неоднократно проверяя условие), либо вызываете функцию ядра, которая предотвращает распределение планировщика потока в поток до тех пор, пока не будет выполнено условие (например, семафор). Любая инструкция, которую вы выполняете, по определению удерживает процессор. Тем не менее, вы посмотрели инструкцию 'pause'? –