Защита структуры, к которой обращаются обработчики исключений и прерываний
Рассмотрим структуру, к которой обращаются обработчики как исключений (например, служебные процедуры системных вызовов), так и прерываний.
В однопроцессорных системах предотвратить конфликты одновременного обращения довольно просто, поскольку обработчики прерываний не являются реентерабельными и не могут быть прерваны обработчиками исключений. Если ядро обращается к структуре при отключенных локальных прерываниях, его код не может быть прерван. Если же к структуре обращается обработчик прерываний только одного вида, он может не отключать локальные прерывания.
В многопроцессорных системах мы должны принимать во внимание параллельное выполнение обработчиков исключений и прерываний на других процессорах. Отключение локальных прерываний должно сочетаться с применением спин-блокировок, чтобы заставить параллельно выполняющиеся тракты
ядра ждать, пока обработчик, обратившийся к структуре, закончит свою работу.
Иногда бывает предпочтительнее заменить спин-блокировку семафором. Поскольку обработчики прерываний не могут быть приостановлены, они должны получить семафор с использованием "плотного” цикла и функции down tryiock о. Для них семафор работает практически как спин-блокировка. С другой стороны, служебные процедуры системных вызовов могут приостановить вызвавший их процесс, если семафор занят. Для большинства системных вызовов это нормальное поведение. В этом случае семафоры предпочтительнее спин-блокировок, поскольку они повышают уровень параллельности в системе.
Предыдущая страница | 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 | Следующая страница