Максимальное значение, возвращаемое getnstimeofday - PullRequest
0 голосов
/ 18 сентября 2018

Я реализую модуль ядра, в котором мне нужно измерить время между некоторыми событиями.Для этого я использую функцию getnstimeofday , чтобы получить текущую метку времени в наносекундах.Затем я вычисляю время между двумя событиями, такими как:

nsecs_elapsed = t2 - t1;

Однако, вычисление неверно, когда счетчик наносекунд оборачивается (переполнение и начинается снова, начиная с нуля), и в этом случае я получаю минор t2чем т1.В этом случае я хочу вычислить количество наносекунд, прошедших следующим образом:

nsecs_elapsed = (POSSIBLE MAX_VALUE_TV_NSEC - t1) + (++t2);

Где "POSSIBLE_MAX_VALUE_TV_NSEC" должно быть максимально возможным значением, возвращаемым функцией getnstimeofday .

Теперь эта функция (т.е. getnstimeofday ) заполняет эту информацию в tv.nsec члене переменной struct timespec (чей адрес долженпередаваться в качестве параметра в функцию getnstimeofday ).Поскольку tv.nsec имеет тип long I, хотя максимальное значение переменной long может быть максимально возможным значением, возвращаемым этой функцией, но в соответствии смои наблюдения это не тот случай.

Из этой функции (т.е. getnstimeofday ) я всегда получаю число наносекунд в виде 9-значного числа, поэтому я полагаю, что максимальное значениечто эта функция возвращает, может быть, 999999999 , но я хотел бы получить некоторое подтверждение об этом.Я не нашел такой информации нигде, и, глядя на код ядра, мне все еще не ясно, существует ли максимально возможное значение, возвращаемое этой функцией, кроме максимального значения long со знаком .

Кто-нибудь знает, если возвращаемое значение getnstimeofday ограничено каким-либо максимальным значением?Или у вас есть идеи, где я могу посмотреть на эту информацию?

1 Ответ

0 голосов
/ 18 сентября 2018

Функция getnstimeofday заполняет два поля в структуре:

  • tv_sec с общим количеством секунд,
  • tv_nsec с остальными наносекундами

Эти два поля не могут полностью переполниться: переполнение tv_sec part.

занимает несколько сотен лет.^ 9 наносекунд в секунду, максимальное значение поля tv_nsec составляет 999999999, как вы уже догадались.

...