Работа с данными, связанными с процессорами, на этапе компиляции

Работа с данными, связанными с процессорами, на этапе компиляции

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

DEFINE_PER_CPU(type, name);

Это описание создает переменную типа type с именем name, которая имеет интерфейс связи с каждым процессором в системе. Если необходимо объявить соответствующую переменную с целью избежания предупреждений компилятора, то необходимо использовать следующий макрос.

DECLARE_PER_CPU(type, name);

Работать с этими переменными можно с помощью функций get_cpu_var() и put_cpu_var(). Вызов функции get_cpu_var() возвращает l-значение (левый операнд, l-value) указанной переменной на текущем процессоре. Этот вызов также запрещает вытеснение кода в режиме ядра, а соответственный вызов функции put_cpu_var() разрешает вытеснение.

get_cpu_var(name)++; /* увеличить на единицу значение переменной

                        name, связанное с текущим процессором */

put_cpu_var(); /* разрешить вытеснение кода в режиме ядра */

Можно также получить доступ к переменной, связанной с другим процессором.

per_cpu(name, cpu)++; /* увеличить значение переменной name

                         на указанном процессоре */

Использовать функцию per_cpu() необходимо осторожно, так как этот вызов не запрещает вытеснение кода и не обеспечивает никаких блокировок. Необходимость использования блокировок при работе с данными, связанными с определенным процессором, отпадает, только если к этим данным может обращаться один процессор. Если процессоры обращаются к данным других процессоров, то необходимо использовать блокировки. Будьте осторожны! Применение блокировок рассматривается в главе 8, "Введение в синхронизацию выполнения кода ядра", и главе 9, "Средства синхронизации в ядре".

Необходимо сделать еще одно важное замечание относительно создания данных. связанных с процессорами, на этапе компиляции. Загружаемые модули не могут использовать те из них, которые объявлены не в самом модуле, потому что компоновщик создает эти данные в специальных сегментах кода (а именно, .data.percpu). Если необходимо использовать данные, связанные с процессорами, в загружаемых модулях ядра, то нужно создать эти данные для каждого модуля отдельно или использовать динамически создаваемые данные.

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

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

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

17.4. О компиляции нового ядра

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

17.4. О компиляции нового ядра 17.4.1 Зачем вообще нужно компилировать ядро? Как было сказано в начале данного раздела, основная функция ядра состоит в том, чтобы обеспечить взаимодействие с аппаратурой компьютера. Обслуживание некоторых составляющих аппаратного


Глава 5 Работа с данными

Из книги Excel. Мультимедийный курс автора Мединов Олег

Глава 5 Работа с данными В этой главе вы познакомитесь с некоторыми способами организации данных в таблице (сортировка по алфавиту, возрастанию или убыванию, группировка по некоторым общим признакам), которые позволят сделать работу с таблицей более комфортной.Excel


2.2.1.4 Разделение потоков между виртуальными процессорами.

Из книги Руководство администратора баз данных Informix. автора Кустов Виктор

2.2.1.4 Разделение потоков между виртуальными процессорами. Для каждого класса поддерживаются три очереди потоков, которые разделяются всеми виртуальными процессорами данного класса: Очередь готовых к выполнению потоков.Очередь спящих потоков. В нее помещается,


Правило 41: Разберитесь в том, что такое неявные интерфейсы и полиморфизм на этапе компиляции

Из книги Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ автора Мейерс Скотт

Правило 41: Разберитесь в том, что такое неявные интерфейсы и полиморфизм на этапе компиляции В мире объектно-ориентированного программирования преобладают явные интерфейсы и полиморфизм на этапе исполнения. Например, рассмотрим следующий (бессмысленный) класс:class Widget


12.8. Работа с данными при помощи запросов

Из книги Основы информатики: Учебник для вузов автора Малинина Лариса Александровна

12.8. Работа с данными при помощи запросов В режиме таблицы доступны самые разные операции с данными – просмотр, сортировка, фильтрация, обновление и печать. Однако очень часто приходится проводить вычисления или просматривать данные из нескольких таблиц. Отобрать нужные


Глава 6 Практическая работа с данными в XML-файлах

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Глава 6 Практическая работа с данными в XML-файлах В главе 3 мы уже кратко описывали основные принципы языка XML, которые необходимы для понимания объектной модели сценариев WS XML. В настоящее время применение XML становится все более широким, поэтому настоящая глава посвящена


Работа с бинарными данными

Из книги Справочник по PHP автора

Работа с бинарными данными packПакетирование данных в двоичную строку.Синтаксис:string pack(string format [,mixed $args, ...]);Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format,


Работа с внешними данными

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Работа с внешними данными Загрузка и отображение на рабочем листе содержимого внешних файлов — это только часть возможностей, предлагаемых Flash для общения с внешним электронным миром. Другая, весьма обширная, часть позволяет получать и обрабатывать данные, поставляемые


3.8.1. Подготовка к компиляции

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

3.8.1. Подготовка к компиляции Прежде чем выполнять какие-то действия по обновлению ядра, нужно подготовиться к самому худшему, а именно — к краху системы. Да, неправильные действия в самом деле могут нарушить работу или сделать невозможной загрузку системы. Ядро — это


10.5. Модели компиляции шаблонов А

Из книги C++ для начинающих автора Липпман Стенли

10.5. Модели компиляции шаблонов А Шаблон функции задает алгоритм для построения определений множества экземпляров функций. Сам шаблон не определяет никакой функции. Например, когда компилятор видит шаблон:template typename TypeType min( Type t1, Type t2 ){return t1 t2 ? t1 : t2;}он сохраняет


10.5.1. Модель компиляции с включением

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

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


16.8.2. Модель компиляции с разделением

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

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


Работа с данными процессоров на этапе выполнения

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

Работа с данными процессоров на этапе выполнения Для динамического создания данных, связанных с процессорами, в ядре реализован специальный распределитель памяти, который имеет интерфейс, аналогичный kmalloc(). Эти функции позволяют создать экземпляр участка памяти для


Когда лучше использовать данные, связанные с процессорами

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

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


Работа со связанными списками

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

Работа со связанными списками Для работы со связанными списками ядро предоставляет семейство функций. Все они принимают указатели на одну или более структур list_head. Все функции выполнены как функции с подстановкой тела (inline) на языке С, и их все можно найти в файле