• Лучшие цены на bmw 6 coupe

    лучшие цены на bmw 6 coupe

    www.bmw-baltauto.ru





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


Когда в синхронизации нет необходимости

Некоторые подходы к проектированию ядра, обсуждавшиеся в предыдущей главе, в определенной степени облегчают синхронизацию потоков ядра. Приведем их краткий обзор:
- все обработчики прерываний подтверждают получение прерывания на программируемом контроллере прерываний, а также отключают линию IRQ. То же самое прерывание больше не возникает, пока не завершится обработчик;
- обработчики прерываний, softirq-функции и тасклеты не могут быть ни вытеснены, ни блокированы, поэтому их выполнение не может быть приостановлено на долгое время. В худшем случае возможна некоторая задержка из-за других прерываний, возникших по ходу выполнения этих функций (это и есть вложенное выполнение трактов ядра);
- тракт ядра, обрабатывающий прерывание, не может быть прерван трактом, выполняющим функцию отложенного выполнения или служебную процедуру системного вызова;
- softirq-функции и тасклеты не могут чередоваться на одном процессоре;
- один тасклет не может выполняться одновременно на нескольких процессорах.
Каждое из этих решений можно рассматривать как своего рода ограничение, которое можно эксплуатировать для облегчения кодирования некоторых функций ядра.

Приведем несколько примеров возможных упрощений:

- нет необходимости кодировать обработчики прерываний и тасклеты как реентерабельные функции;
- процессорные переменные, к которым обращаются только 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 без проблем

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

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

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

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

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

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

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