Разница между планированием ОС и планированием RTOS - PullRequest
7 голосов
/ 10 июня 2011

Рассмотрим функцию / процесс,

void task_fun(void) { while(1) } Если бы этот процесс выполнялся на обычной операционной системе ПК, он бы успешно работал вечно.Но на мобильном телефоне он наверняка вылетит из строя всего телефона за считанные минуты, так как истечет время сторожевого таймера HW и произойдет перезагрузка системы.На ПК этот процесс после истечения установленного промежутка времени будет запланирован и запланирован запуск нового запускаемого процесса.

Я сомневаюсь, почему мы не можем применить ту же стратегию к ОСРВ?В чем заключается ограничение производительности, если такая политика планирования реализована в ОСРВ?Ядро.Я обнаружил, что оба они почти одинаковы.Где происходит передача сторожевого таймера на моем телефоне?Я предполагаю, что планировщик - это тот, кто запускает сторожевой таймер, прежде чем запускать процесс.Может кто-нибудь указать мне, где в коде это делается?

Ответы [ 4 ]

1 голос
/ 10 июня 2011

Linux на настольном компьютере или мобильном телефоне не является ОСРВ.Его политика планирования определяется временем.

В ОСРВ планирование запускается событиями, либо из среды через ISR, либо из самого программного обеспечения через системные вызовы (отправка сообщения, ожидание мьютекса, ...)

1 голос
/ 11 июня 2011

Сбой телефона - это проблема дизайна телефона или конкретной ОС, а не встроенных ОС или ОСРВ в целом. Это «поглотит» задачи с более низким приоритетом (возможно, включая службу наблюдения), что, вероятно, и происходит здесь.

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

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

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

1 голос
/ 10 июня 2011

Существует несколько способов реализации сторожевого таймера, ни один из которых не навязывается Linux:

  • Процесс или поток периодически запускается для проверки выполнения важных операций. Если это не так, выполняется корректирующее действие, например, перезагрузка машины или сброс проблемного компонента.
  • Процесс или поток выполняется непрерывно, чтобы впитать дополнительное время ЦП и сбросить таймер. Если задача не может быть запущена, таймер истекает и предпринимает корректирующие действия.
  • Аппаратный компонент сбрасывает систему, если он периодически не массируется; аппаратный таймер истекает.

Здесь нет ничего, что нельзя сделать ни в ОСРВ, ни в любой другой многозадачной операционной системе.

0 голосов
/ 29 марта 2012

В нормальной ОС у нас есть два типа процессов. Пользовательский процесс и процесс ядра. Процессы ядра имеют временные ограничения. Однако пользовательские процессы не имеют временных ограничений.

В ОСРВ все процессы являются процессами ядра, и поэтому следует строго соблюдать временные ограничения. Все процессы / задачи (могут использоваться взаимозаменяемо) основаны на приоритете, и для правильной работы системы важны временные ограничения.

Итак, если ваш код void task_fun (void) {while (1)} работает вечно, другие задачи с более высоким приоритетом будут голодать. Следовательно, сторожевая система вылетит из системы, чтобы указать разработчику, что временные ограничения других задач не выполняются.

Например, планировщик GSM должен запускаться каждые 4,6 мсек. Если ваша задача выполняется дольше, временные ограничения задачи планировщика GSM не могут быть выполнены. Таким образом, система должна перезагрузиться, поскольку ее цель побеждена.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...