Инверсия приоритета семафора
Почему ОСРВ не имеют никакой реализации для предотвращения инверсии приоритетов для семафоров, даже если они существуют для мьютекса.
Семафорам не нужно предотвращать инверсию приоритетов?
Та же самая ситуация происходит как в ОС uC/OS, так и в ОС GreenHills.
Заранее спасибо.
1 ответ
Инверсия приоритетов происходит, когда задача с низким приоритетом владеет семафором, и задача с высоким приоритетом вынуждена ждать на семафоре, пока задача с низким приоритетом не освободит его. Если до освобождения семафора задача с низким приоритетом вытесняется одной или несколькими задачами со средним приоритетом, то происходит неограниченная инверсия приоритетов, поскольку задержка задачи с высоким приоритетом больше не является предсказуемой. Это отрицательно сказывается на монотонном анализе дедлайна (DMA), потому что невозможно предсказать, будет ли высокоприоритетное задание выполнено в срок.
Совместное использование критического ресурса между задачами с высоким и низким приоритетом не является желательной практикой проектирования. Лучше делить ресурс только среди задач с равным приоритетом или ограничить доступ к ресурсу одной задачей сервера ресурсов. Примерами являются задача сервера печати и задача файлового сервера. Мы давно выступаем за эту практику. Тем не менее, с учетом того, что все более разнообразное и сложное промежуточное программное обеспечение распределяется на ОСРВ, становится нецелесообразным применять такие простые стратегии. Следовательно, в интересах безопасности лучше всего реализовать какой-либо метод предотвращения неограниченной инверсии приоритетов.
Проверьте полную ссылку на http://www.smxrtos.com/articles/techppr/mutex.htm
С Уважением,
Отакон