Когда в синхронизации нет необходимости
Некоторые подходы к проектированию ядра, обсуждавшиеся в предыдущей главе, в определенной степени облегчают синхронизацию потоков ядра. Приведем их краткий обзор:
- все обработчики прерываний подтверждают получение прерывания на программируемом контроллере прерываний, а также отключают линию 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 | Следующая страница