• Где найти

    Где найти информацию о рынке программных продуктов? Newproga.ru: новости, обзоры.

    newproga.ru





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


Заранее определенная рабочая очередь

В большинстве случаев создание целого набора рабочих потоков для выполнения функции является лишней тратой ресурсов. Поэтому ядро предлагает заранее определенную рабочую очередь, называемую events, которой может свободно пользоваться любой разработчик. Эта очередь является всего лишь стандартной рабочей очередью, которая может включать в себя функции из разных слоев ядра и драйверов устройств ввода/вывода. Ее дескриптор workqueue struct хранится в массиве keventd wq. Для работы с такой заранее определенной очередью ядро предлагает функции.
Заранее определенная рабочая очередь позволяет значительно сэкономить системные ресурсы, если функция вызывается редко. С другой стороны, функции, выполняемые в этой очереди, не должны блокироваться надолго. Поскольку выполнение висящей функции из рабочей очереди сериализуется на каждом процессоре, большая задержка отрицательно сказывается на остальных пользователях заранее определенной рабочей очереди. В дополнение к общей очереди events в Linux можно найти несколько специализированных рабочих очередей. Самой важной из них является kblockd, используемая слоем блочных устройств

Возврат из прерываний и исключений

Мы закончим эту главу рассмотрением заключительного этапа выполнения обработчиков исключений и прерываний.. Хотя основная цель этого этапа — возобновить выполнение некоторой программы, при его реализации необходимо учитывать несколько моментов:
-количество управляющих трактов ядра, выполняемых параллельно (если поток всего один, процессор должен переключиться обратно в режим пользователя);
-висящие запросы на переключение процесса (если имеется такой запрос, ядро должно выполнить планирование; в противном случае управление возвращается текущему процессу);
-сигналы, ожидающие доставки (если текущему процессу послан сигнал, он должен быть обработан);
-пошаговый режим (если выполнение текущего процесса отслеживается отладчиком, пошаговый режим должен быть восстановлен до переключения в пользовательский режим);
-режим виртуального 8086 (если процессор работает в режиме виртуального процессора 8086, текущий процесс выполняет старую программу реального режима и, следовательно, должен быть обработан специальным образом).
Для отслеживания висящих запросов на переключение процесса, сигналов, ожидающих доставки, и пошагового режима применяется ряд флагов. Они хранятся в поле flags дескриптора thread info. Это поле содержит и другие флаги, но они не имеют отношения к возврату из прерываний и исключений.

Предыдущая страница | 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 без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

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

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