Linux Kernel (Ядро линукса) (часть 1)


Структуры данных для softirq-функций

Основной структурой, используемой для представления softirq-функций, является массив softirq vec, состоящий из тридцати двух элементов типа softirq action. Приоритет softirq-функции равен индексу соответствующего элемента softirq action внутри массива. фактически используются только первые шесть элементов массива.

Структура softirq action состоит из двух полей:

указателя action на softirq-функцию и указателя data на специфическую структуру данных, которая может понадобиться softirq-функции.
Другим чрезвычайно важным полем, используемым для отслеживания вытеснения в ядре и вложенности управляющих трактов ядра, является 32-би- товое поле preempt_count, хранящееся В поле thread info каждого дескриптора процесса .Это поле кодирует три разных счетчика и флаг. Первый счетчик показывает, сколько раз вытеснение в ядре было явно отключено для локального процессора; нулевое значение говорит о том, что вытеснение в ядре явным образом не отключалось ни разу. Второй счетчик показывает глубину уровня отключения функций отложенного выполнения (уровень 0 означает, что эти функции включены). Третий счетчик показывает количество вложенных обработчиков прерываний у локального процессора (значение увеличивается функцией irqentero и уменьшается функцией irq exito .

Название поля preempt count оправдывает себя:

вытеснение в ядре должно быть отключено либо явным образом в коде ядра (счетчик вытеснений не равен 0), либо когда ядро работает в контексте прерывания. Таким образом, чтобы определить, возможно ли вытеснение текущего процесса, ядро быстро проверяет поле preempt count на предмет нулевого значения.

Макрос in interrupt проверяет счетчик прерываний и счетчик softirq- функций В поле current_thread_infо ->preempt_count. ЕСЛИ любой ИЗ ЭТИХ двух счетчиков положителен, макрос возвращает ненулевое значение, в противном случае — нулевое. Если ядро не использует несколько стеков режима ядра, макрос обращается К ПОЛЮ preempt_count дескриптора thread info текущего процесса. Если же ядро их использует, макрос может прочитать поле preempt count В Дескрипторе thread info, хранящемся В объединении irq ctx, ассоциированном с локальным процессором. В этом случае макрос возвратит ненулевое значение, потому что поле всегда положительно.

Последней структурой, важной для реализации softirq-функций, является процессорная маска, описывающая висящие softirq-функции.

Она хранится в ПОЛе softirq pending структуры irq cpustat t (ВСПОМНИМ, ЧТО у каждого процессора в системе есть своя такая переменная. Чтобы прочитать или установить значение битовой маски, ядро пользуется макросом locai softirq pendingO, который выбирает битовую маску softirq-функций локального процессора.

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

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...