ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
242849 Топик полностью
Vit (11.03.2011 10:35, просмотров: 221) ответил =AlexD= на Терминология у тебя конечно того, но в целом ты думаешь в правильном направлении, хотя вложенные прерывания тут не при чём. Запрещаются те прерывания, которые могут выполнить "системный код", не более но и не менее.
типо в камнях, где нет SWI, делаем их руками, а где есть - забываем и опять делаем руками:) Открыл описание embOS - там в обработчиках прерываний, в которых используются сервисы ОС, явно прописываются "защитные заглушки" при входе и при выходе (OS_EnterInterrupt() и OS_LeaveInterrupt()). Наверно это "критическая секция" только наоборот:) Чуток размышлизма. Специально открыл Таненбаума. ничего в моём понимании критических секций не изменилось. но понял откуда ноги спора растут. Во-первых от "для ядра характерна блокировка прерываний для некоторых команд при работе с переменными или списками. Возникновение прерывания в момент, когда, например, список готовых процессов находится в неопределенном состоянии, могло бы привести к состоянию состязания". это тот случай, когда ОС нужно защищать саму себя - просто частный случай. Во-вторых -от "неразумно давать пользовательскому процессу полномочия запрета прерываний" и далее "запрет прерываний бывает полезным в самой операционной системе, но это решение неприемлемо в качестве механизма взаимного исключения для пользовательских процессов". Вот тут и зарыто отличие "взрослых" ОС от остальных - во "взрослых" пользователи не пишут драйвера - там отдельно системное программирование и пользовательское application. Когда смешиваются в кучу и кони и прочая, тогда и начинается меряние "важностью критичности". Считаю, что то drivers (из системного только и остаётся, если ядро уже написано) и applications не стоит объединять в одной посуде. Но это вопрос не к инструментарию. Когда мне нужен доступ к быстрому АЦП, таймеру и прочему изменчивому, то я пишу функцию, которая фактически есть драйвер, и если мне надо глушить все прерывания, то так и делаю. В результате отдельно пишем BSP, а на уровне application у нас нет ни обработчиков прерываний, ни критических секций:) BSP для относительно больших проектов вааще оформляем в виде либы. То же жестковременное ногодрыжество оформляется в виде программируемого генератора и "запечатывается" - пользовательская задача может управлять генератором, но не ногами напрямую.