2016-04-01 8 views
1

Я хочу реализовать механизм ожидания незанятого ожидания для создания задержки в наносекундах в модуле ядра Linux.Неужели занят ожидание?

Прямо сейчас я смотрел на функции

ndelay(ns); 

Но https://www.kernel.org/doc/Documentation/timers/timers-howto.txt

Здесь упоминается, что ndelay функция занятая механизм ожидания.

Но я хочу не занятую задержку ожидания. Итак, я думаю о nop в модуле ядра Linux, как это:

asm volatile ("nop"); 

Я изучал, что NOP принимает один цикл выполнения. Итак, я буду внедрять вложенные nop, чтобы получить требуемую задержку. Мой вопрос:

Используя nop, я буду внедрять задержку в наносекундах в не занятой очереди ожидания? Кто-нибудь может подтвердить это? Также будет полезно обратиться к некоторым журналам и ресурсам.

+0

Это инструкция 1 цикла «ничего не делать». если ваш процессор будет иметь время цикла наносекундного масштаба, тогда да, nop будет «некоторым количеством наносекунд задержки». но обратите внимание, что это будет другая задержка, основанная на тактовой частоте процессора. процессор 1ghz будет иметь 1 наносекундную задержку, а 100 МГц процессор будет составлять 10 наносекунд. –

+0

Спасибо за ваш комментарий. Но это создаст незапланированную задержку ожидания? –

+0

Я не уверен, что означает «не занятый». По моему опыту вы либо выполняете ожидание (неоднократно проверяя условие), либо вызываете функцию ядра, которая предотвращает распределение планировщика потока в поток до тех пор, пока не будет выполнено условие (например, семафор). Любая инструкция, которую вы выполняете, по определению удерживает процессор. Тем не менее, вы посмотрели инструкцию 'pause'? –

ответ

1

Как следует из его названия, «NOP» - это операция, которая не изменяет состояние машины, однако это не означает, что процессор не работает или «не занят» при выполнении NOP. Как и любая другая команда, NOP по-прежнему утверждает некоторые ресурсы процессора во время его выполнения.

Очевидно, что современные суперконвейерные процессоры являются сложными и обычно выполняют много операций одновременно, поэтому, скорее всего, NOP будет использовать меньше ресурсов, чем более сложная операция, например, операция с веткой, строкой или с плавающей запятой, но она небезопасна предположить, что NOP не занят, как вы говорите.

+0

Есть ли еще что-нибудь, что я могу сделать для реализации незанятой задержки на наносекунду в модуле ядра? У меня нет идей. –