Пространство пользователя и параметр HZ

Пространство пользователя и параметр HZ

Раньше изменение параметра НZ приводило к аномалиям в пользовательских программах. Это происходило потому, что значения параметров, связанных со временем, экспортировались в пространство пользователя в единицах, равных количеству импульсов системного таймера в секунду. Так как такой интерфейс использовался давно, то в пользовательских приложениях считалось, что параметр HZ имеет определенное конкретное значение. Следовательно, при изменении значения параметра HZ изменялись значения, которые экспортируются в пространство пользователя, в одинаковое число раз. Информация о том, во сколько раз изменились значения, в пространство пользователя не передавалась! Полученное от ядра значение времени работы системы могло интерпретироваться как 20 часов, хотя на самом деле оно равнялось только двум часам.

Чтобы исправить это, код ядра должен нормировать все значения переменной jiffies, которые экспортируются в пространство пользователя. Нормировка реализуется путем определения константы USER_HZ, равной значению параметра HZ, которое ожидается в пространстве пользователя. Так как для аппаратной платформы x86 значение параметра HZ исторически равно 100, то значение константы USER_HZ=100. Макрос jiffies_to_clock_t() используется для нормировки значения счетчика импульсов системного таймера, выраженного в единицах HZ, в значение счетчика импульсов, выраженное в единицах USER_HZ. Используемый макрос зависит от того, кратны ли значения параметров HZ и USER_HZ один другому. Если кратны, то этот макрос имеет следующий очень простой вид.

#define jiffies_to_clock_t(x) ((x) / (HZ / USER_HZ))

Если не кратны, то используется более сложный алгоритм.

Функция jiffies_64_to_clock_t() используется для конвертирования 64-битового значения переменной jiffies из единиц HZ в единицы USER_HZ.

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

unsigned long start = jiffies;

unsigned long total_time;

/* выполнить некоторую работу ... */

total_time = jiffies - start;

printk("Это заняло %lu импульсов таймера ",

 jiffies_to_clock_t(total_time));

В пространстве пользователя передаваемое значение должно быть таким, каким оно было бы, если бы выполнялось равенство HZ=USER_HZ. Если это равенство не справедливо, то макрос выполнит нужную нормировку и все будут счастливы. Конечно, этот пример несколько нелогичный: больше смысла имело бы печатать значение времени не в импульсах системного таймера, а в секундах следующим образом.

printk("Это заняло %lu секунд ", total time / HZ);

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Пространство имен XSL

Из книги автора

Пространство имен XSL Заметьте, что элементы XSLT, такие как <xsl:stylesheet>, используют префикс пространства имен (namespace) xsl, который теперь, после стандартизации XSLT, всегда установлен в «http://www.w3.org/1999/XSL/Transform». Это пространство имен обычно устанавливается с атрибутом xmlns (это не


Адресное пространство процесса

Из книги автора

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


Пространство модели и пространство листа

Из книги автора

Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят


Пространство для трехмерного моделирования

Из книги автора

Пространство для трехмерного моделирования Чтобы воспользоваться всеми возможностями трехмерного черчения, предоставляемыми программой, следует переключиться из пространства AutoCAD Classic (Классический AutoCAD) или 2D Drafting & Annotation (Двухмерное черчение и аннотирование) в 3D


Пространство модели и пространство листа

Из книги автора

Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят


Пространство или время

Из книги автора

Пространство или время Чем больше мы изучаем, разрабатываем и анализируем алгоритмы, тем чаще мы сталкиваемся с одним универсальным законом вычислительной техники: быстрые алгоритмы, как правило, требуют больше памяти. Таким образом, для использования быстрого


Виртуальное пространство

Из книги автора

Виртуальное пространство Работа над трехмерными интерьерами и другими проектами происходит в виртуальном пространстве. Термин "виртуальность" пришел к нам от английского "virtual", что в переводе означает "возможный, воображаемый, существующий лишь как продукт


Пространство имен оболочки

Из книги автора

Пространство имен оболочки BrowseCallbackProc Функция BrowseCallbackProc представляет собой определяемую приложением функцию обратного вызова, используемую совместно с функцией SHBrowseForFolder . Диалоговое окно выбора папки вызывает эту функцию для уведомления о событиях. Тип BFFCALLBACK


Временное пространство сортировки

Из книги автора

Временное пространство сортировки Запросы с предложениями ORDRE BY и GROUP BY "паркуют" промежуточные наборы для дальнейших операций сортировки во временном хранилище. Рекомендуется иметь доступную память, приблизительно в 2.5 раза превышающую размер самой большой таблицы,


Пространство модели и пространство листа

Из книги автора

Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят


Пространство для трехмерного моделирования

Из книги автора

Пространство для трехмерного моделирования Чтобы воспользоваться всеми возможностями трехмерного черчения предоставляемыми программой, следует переключиться из пространства AutoCAD Classic (Классический) или 2D Drafting & Annotation (Двухмерное рисование и аннотация) в 3D Modeling


Пространство модели и пространство листа

Из книги автора

Пространство модели и пространство листа Пространство модели (Model Space) – это пространство AutoCAD, где формируются модели объектов как при двумерном, так и при трехмерном моделировании. О том, что в окне AutoCAD на текущий момент установлено пространство модели, говорят


5 Официальное пространство

Из книги автора

5 Официальное пространство Ваш коллега в офисе жует жевательную резинку, проигрывает на персональном компьютере «Where-in-the-World-is-Carmen-San-Diego?», охает и задает глупые вопросы. А в это время вы пытаетесь разобраться с ка-ким-то непонятным багом. В этой компании вы работаете