Компоненты и технологии • №2 '2011 компоненты


Механизм взаимного исключения



Pdf көрінісі
бет79/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   75   76   77   78   79   80   81   82   ...   129
Kurniz

Механизм
взаимного исключения
Доступ к ресурсу, операции с которым 
одновременно выполняют несколько задач 
и/или прерываний, должен контролиро-
ваться механизмом взаимного исключения 
(mutual exclusion).
Механизм взаимного исключения гаранти-
рует, что если задача начала выполнять неко-
торые действия с ресурсом, то никакая другая 
задача (или прерывание) не сможет получить 
доступ к данному ресурсу, пока операции 
с ним не будут завершены первой задачей.
FreeRTOS предлагает несколько способов 
реализации механизма взаимного исключе-
ния:
критические секции;

мьютексы;

задачи-сторожа.

Однако наилучшая реализация взаимно-
го исключения — это написание програм-
мы, в которой ресурсы не разделяются меж-
ду несколькими задачами и доступ к одному 
ресурсу выполняет единственная задача или 
прерывание.
Критические секции
Сразу следует отметить, что критические 
секции — это очень грубый способ реализа-
ции взаимного исключения.
Критическая секция — это часть програм-
мы, которую в один момент времени может 
выполнять только одна задача или прерыва-
ние. Обычно защищаемый критической сек-
цией участок кода начинается с инструкции 
входа в критическую секцию и заканчивается 
инструкцией выхода из нее.
Во FreeRTOS, в отличие от более сложных 
операционных систем, существует одна гло-
бальная критическая секция. Если одна за-
дача вошла в критическую секцию, то ника-
кая другая задача не будет выполняться, пока 
не произойдет выход из критической секции.
FreeRTOS допускает два способа реализа-
ции критической секции:
запрет прерываний;

приостановка планировщика.

Запрет прерываний
Во FreeRTOS вход в критическую сек-
цию, реализованную запретом прерываний, 
сводится к запрету всех прерываний про-
цессора или (в зависимости от конкретно-
го порта FreeRTOS) к запрету прерываний 
с приоритетом равным и ниже макроопре-
деления configMAX_SYSCALL_INTERRUPT_
PRIORITY.
Во FreeRTOS участок кода, защищаемый 
критической секцией, которая реализо-
вана запретом прерываний, — это участок 
кода, окруженный вызовом API-макросов: 


Достарыңызбен бөлісу:
1   ...   75   76   77   78   79   80   81   82   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет