Планировщик потоков для встроенной операционной системы реального времени - PullRequest
0 голосов
/ 18 января 2010

Мне было дано задание исправить встроенную операционную систему, написанную на C / C ++.Текущий планировщик потоков очень похож на Round Robin Scheduling , за исключением того, что в нем отсутствует одна очень важная функция - возможность прерывать потоки, а затем возвращать выполнение, создавая тем самым надежный «отрезок» времени выполнения.

Мой вопрос: как можно прервать выполнение кода, выполнить другую задачу и затем корректно вернуться к выполнению?Я считаю, что такое поведение требует ассемблер, специфичный для архитектуры.Это чип, на котором будет работать ОС: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC860

Кстати, это программное обеспечение для авионики, поэтому оно должно быть «детерминированным».Кроме того, здесь не используется куча, вся память должна быть ограничена.

Текущая система представляет собой «периодический процесс», при котором следующая задача должна ждать завершения первой.Это просто ужасно, если одна часть операционной системы дает сбой, скажем, стек ATN, тогда вся операционная система будет поставлена ​​на колени.(Вставьте разбившийся самолет здесь ... хотя это программное обеспечение класса B, что означает, что самолет не потерпит крах, если система это сделает.)

Ответы [ 3 ]

7 голосов
/ 18 января 2010

отказ от ответственности: не используйте мой совет. Найдите специалиста, если благополучие людей зависит от системы, тогда не оставляйте ее на волю случая / хаки / ТАК совет!

Самолет упс http://xs.to/thumb-AF83_4B54A285.jpg

Вы должны быть в состоянии написать новую процедуру, которая вводится через прерывание с известным интервалом, сохранять состояние потока, используя существующие функции планирования, и изменять контекст потока. Кроме того, убедитесь, что ваши примитивы блокировки работают с новым расписанием, и что вы не забиваете блокировку T & S не на атомарном уровне или без инструкций или что-либо еще.

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

Современные операционные системы, 3-е издание содержит несколько хороших фрагментов теории, но реализация зависит от существующего кода и передового опыта для используемого вами оборудования, а также от другого кода в ядре, которое обрабатывает прерывания , сигналы и пр.

Также «Проектирование и анализ систем реального времени» Филиппа А. Лапланте »может быть хорошим ресурсом для адаптации существующего планировщика к новым требованиям. Еще один интересный фрагмент текста

4 голосов
/ 18 января 2010

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

Иногда прерывание таймера будет исходить от самого ЦП, но в других системных архитектурах оно будет поступать от контроллера ввода-вывода или какого-либо другого устройства.

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

Так что на самом деле никто не сможет дать вам подробный рецепт здесь.

За исключением, конечно, отчета вашего работодателя в ФАУ.

1 голос
/ 18 января 2010

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

У вас уже должны быть средства для сохранения и восстановления контекста потока в циклический интервал времени.

...