Внутреннее представление переменной jiffies

Внутреннее представление переменной jiffies

Переменная jiffies исторически всегда представлялась с помощью типа unsigned long и, следовательно, имеет длину 32 бит для 32-разрядных аппаратных платформ и 64 бит для 64-разрядных. В случае 32-разрядного значения переменной jiffies и частоты появления временных отметок 100 раз в секунду, переполнение этой переменной будет происходить примерно каждые 497 дней, что является вполне возможным событием. Увеличение значения параметра HZ до 1000 уменьшает период переполнения до 49.7 дней! В случае 64-разрядного типа переменной jiffies, переполнение этой переменной невозможно за время существования чего-либо при любых возможных значениях параметра HZ для любой аппаратной платформы.

Из соображений производительности и по историческим причинам — в основном, для совместимости с уже существующим кодом ядра — разработчики ядра предпочли оставить тип переменной jiffiesunsigned long. Для решения проблемы пришлось немного подумать и применить возможности компоновщика.

Как уже говорилось, переменная jiffies определяется в следующем виде и имеет тип unsigned long.

extern unsigned long volatile jiffies;

Вторая переменная определяется в файле <linux/jiffies.h> в следующем виде.

extern u64 jiffies_64;

Директивы компоновщика ld(1), которые используются для сборки главного образа ядра (для аппаратной платформы x86 описаны в файле arch/i386/kernel/vmlinux.lds.S), указывают компоновщику, что переменную jiffies необходимо совместить с началом переменной jiffies_64.

jiffies = jiffies_64;

Следовательно, переменная jiffies — это просто 32 младших разряда полной 64-разрядной переменной jiffies_64. Так как в большинстве случаев переменная jiffies используется для измерения промежутков времени, то для большей части кода существенными являются только младшие 32 бит.

В случае применения 64-разрядного значения, переполнение не может возникнуть за время существования чего-либо. В следующем разделе будут рассмотрены проблемы, связанные с переполнением (хотя переполнение счетчика импульсов системного таймера и не желательно, но это вполне нормальное и ожидаемое событие). Код, который используется для управления ходом времени, использует все 64 бит, и это предотвращает возможность переполнения 64-разрядного значения. На рис. 10.1 показана структура переменных jiffies и jiffies_64.

Рис. 10.1. Структура переменных jiffies и jiffies_64

Код, который использует переменную jiffies, просто получает доступ к тридцати двум младшим битам переменной jiffies_64. Функция get_jiffies_64() может быть использована для получения полного 64-разрядного значения[57]. Такая необходимость возникает редко, следовательно большая часть кода просто продолжает считывать младшие 32 разряда непосредственно из переменной jiffies.

На 64-разрядных аппаратных платформах переменные jiffies_64 и jiffies просто совпадают. Код может либо непосредственно считывать значение переменной jiffies, либо использовать функцию get_jiffies_64(), так как оба этих способа позволяют получить аналогичный эффект.

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

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

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

ОПЫТЫ: Внутреннее расследование

Из книги Журнал «Компьютерра» № 39 от 24 октября 2006 года автора Журнал «Компьютерра»

ОПЫТЫ: Внутреннее расследование Автор: Сергей ЛеоновСегодня мы займемся варварским делом — разборкой одной из современных цифровых фотокамер. Не слишком часто удается разобрать до винтика подобную технику, но раз уж такая возможность представилась, почему бы не


ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ Как уже было замечено в главе 2, каждый файл в системе UNIX имеет уникальный индекс. Индекс содержит информацию, необходимую любому процессу для того, чтобы обратиться к файлу, например, права собственности на файл, права доступа к


СРЕДНЕЕ ЗВЕНО: Внутреннее перепрограммирование

Из книги Журнал "Компьютерра" №760 автора Журнал «Компьютерра»

СРЕДНЕЕ ЗВЕНО: Внутреннее перепрограммирование Автор: Владимир ГуриевЛюбое изменение рубрикатора заслуживает объяснения - "А это зачем вы картину повесили?" "А она не просто так висит, а дырку на стене закрывает", - однако, как правило, мы им пренебрегаем, полагая, что


Внутреннее представление свойств в C#

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Внутреннее представление свойств в C# Многие программисты (особенно те, которые привыкли использовать C++) стремятся использовать традиционные префиксы get_ и set_ для методов чтения и модификации (например, get_FullName() и set_FullName()). Против самого соглашения возражений нет. Однако


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

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

Внутреннее представление индексаторов типов Мы рассмотрели примеры метода индексатора в C#, и пришло время выяснить, как представляются индексаторы в терминах CIL. Если открыть числовой индексатор типа Garage, то будет видно, что компилятор C# создает свойство Item, которое


Внутреннее представление перегруженных операций

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Внутреннее представление перегруженных операций Подобно любому элементу программы C#, перегруженные операции представляются специальными элементами синтаксиса CIL. Откройте, например, компоновочный блок OverloadedOps.exe с помощью ildasm.exe. Как показано на рис. 9.1, перегруженные


Внутреннее представление пользовательских подпрограмм преобразования

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Внутреннее представление пользовательских подпрограмм преобразования Как и в случае перегруженных операций, те методы, которые обозначены ключевыми словами implicit или explicit, получают "специальные имена" в терминах CIL: op_Implicit и op_Explicit соответственно (рис. 9.2). Рис. 9.2.


Inner Glow (Внутреннее свечение)

Из книги 1С: Бухгалтерия 8 с нуля. 100 уроков для начинающих автора Гладкий Алексей Анатольевич

Inner Glow (Внутреннее свечение) Эффект Inner Glow (Внутреннее свечение), аналогично эффекту внутренней тени, позволяет задать свечение элемента по внутреннему его контуру. Во всем остальном его действие совпадает с действием эффекта Outer Glow (Внешнее свечение) (рис. 8.13). Рис. 8.13.


Внутреннее устройство Pocket PC

Из книги Разработка ядра Linux автора Лав Роберт

Внутреннее устройство Pocket PC Если не брать в расчет сам факт миниатюрности и отсутствие некоторых привычных на настольном ПК устройств, таких как клавиатура и мышь, то можно считать, что Pocket PC является полноценным компьютером. Мало того, по своим параметрам он является


Внутреннее соединение

Из книги Священные войны мира FOSS автора Федорчук Алексей Викторович

Внутреннее соединение Следующий оператор соединяет две таблицы, которые связаны через внешний ключ FK правой таблицы (Table2) и первичный ключ PK таблицы Table1:SELECTТаblе1.PK,Table1.COL1,Table2.PKX,Table2.COLXFROM Table1 INNER JOIN Table2ON Table1.PK = Table2.FKWHERE... условия-поискаЭто спецификация внутреннего


Внутреннее устройство технологии

Из книги Написание скриптов для Blender 2.49 автора Anders Michel

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


Урок № 61. Внутреннее перемещение ТМЦ

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

Урок № 61. Внутреннее перемещение ТМЦ Одной из распространенных операций складского учета является операция по внутреннему перемещению товарно-материальных ценностей внутри предприятия. В этом случае перемещаемые ценности не покидают пределы предприятия, а лишь


Переменная jiffies

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

Переменная jiffies Глобальная переменная jiffies содержит количество импульсов системного таймера, которые были получены со времени загрузки системы. При загрузке ядро устанавливает значение этого параметра в нуль и он увеличивается на единицу при каждом прерывании


Переполнение переменной jiffies

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

Переполнение переменной jiffies Переменная jiffies, так же как и любое целое число языка программирования С, после достижения максимально возможного значения переполняется. Для 32-разрядного беззнакового целого числа максимальное значение равно 2??- 1. Поэтому перед тем как