Nano Hash - криптовалюты, майнинг, программирование

Что происходит, когда семафор освобождается или сигнализируется в RTOS?

Пусть будет 6 задач, из 6 4 (задача) ждут Семафор. Когда семафор сигнализируется, какое решение принимает RTOS

  1. какие задачи выбрать из списка ожидания(для семафора)
  2. если одна задача будет выбрана из списка ожидания, что произойдет с оставшейся задачей, т.е. когда они будут запущены.
  3. когда уже запущена задача с более высоким приоритетом.

Является ли решение одинаковым для всех RTOS?

01.01.2016

Ответы:


1

Если это многозадачная система с упреждающим приоритетом, то планировщик RTOS будет запускать готовую к выполнению задачу с наивысшим приоритетом. Когда семафор получает сигнал, планировщик RTOS повторно оценивает готовую к выполнению задачу с наивысшим приоритетом и выполняет переключение контекста на эту задачу, если она отличается от ранее запущенной задачи.

Когда есть несколько задач, ожидающих одного и того же семафора, и этот семафор сигнализируется, тогда:

  1. Задача с наивысшим приоритетом среди задач, ожидающих семафора, будет готова к выполнению.
  2. Остальные задачи будут продолжать ждать семафора.
  3. Если ранее запущенная задача имеет более высокий приоритет, чем задача, которая была подготовлена ​​к выполнению, то предыдущая задача продолжает выполняться. Даже если ожидающая задача была сделана готовой к выполнению, она не будет выполняться до тех пор, пока не станет задачей с наивысшим приоритетом, готовой к выполнению.

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

Последующие действия. Если вы используете семафор в качестве сигнала события и есть несколько задач, использующих это событие, вам придется тщательно продумать дизайн. Я не верю, что это можно сделать с помощью одного двоичного семафора. Потому что, если задача потребителя с наивысшим приоритетом получает семафор, делает свою работу, а затем снова ждет семафора, прежде чем семафор снова будет сигнализирован, то потребитель с наивысшим приоритетом всегда будет получать семафор каждый раз, когда он сигнализируется. Задачи-потребители с более низким приоритетом никогда не будут выполняться, потому что им никогда не будет присвоен семафор.

Одним из возможных решений является использование счетного семафора. При возникновении события счетчик семафоров должен быть установлен равным количеству потребляющих задач. Затем каждая потребляющая задача получает семафор и уменьшает счетчик на единицу. Задачи-потребители не должны снова ждать семафора, пока счетчик семафора не уменьшится до нуля. Это предотвратит многократное получение семафора потребителем с наивысшим приоритетом для каждого события и, следовательно, позволит каждой задаче потребителя выполняться ровно один раз в ответ на событие.

Возможно, вы захотите изучить шаблоны проектирования публикации-подписки, чтобы узнать, есть ли лучшие способы решения этого требования для вашей ситуации.

01.01.2016
  • если задача с наивысшим приоритетом (выполняется из-за сигнала семафора) завершает свою работу и начинает ожидать сигнала семафора, остальные задачи будут ждать вечно. Любые ссылки, чтобы прояснить эти концепции. 02.01.2016
  • @anishkumar, я добавил дополнительную информацию к своему ответу. 02.01.2016
  • @anishkumar: задачи с более низким приоритетом никогда не будут выполняться, если задача с более высоким приоритетом всегда находится в ожидании на семафоре, когда семафор задан. Если все задачи имеют одинаковый приоритет, выбор, вероятно, зависит от реализации RTOS, но обычно не является детерминированным. Некоторые RTOS имеют semFlush (например, VxWorks), где все ожидающие задачи готовятся. Если семафор ведет подсчет, а передающая задача имеет более высокий приоритет, чем любая ожидающая задача, то вы можете дать семафору несколько раз, чтобы подготовить все потоки. В конце проверьте документацию для вашей RTOS. 03.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..