Мне было дано задание исправить встроенную операционную систему, написанную на C / C ++.Текущий планировщик потоков очень похож на Round Robin Scheduling , за исключением того, что в нем отсутствует одна очень важная функция - возможность прерывать потоки, а затем возвращать выполнение, создавая тем самым надежный «отрезок» времени выполнения.
Мой вопрос: как можно прервать выполнение кода, выполнить другую задачу и затем корректно вернуться к выполнению?Я считаю, что такое поведение требует ассемблер, специфичный для архитектуры.Это чип, на котором будет работать ОС: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC860
Кстати, это программное обеспечение для авионики, поэтому оно должно быть «детерминированным».Кроме того, здесь не используется куча, вся память должна быть ограничена.
Текущая система представляет собой «периодический процесс», при котором следующая задача должна ждать завершения первой.Это просто ужасно, если одна часть операционной системы дает сбой, скажем, стек ATN, тогда вся операционная система будет поставлена на колени.(Вставьте разбившийся самолет здесь ... хотя это программное обеспечение класса B, что означает, что самолет не потерпит крах, если система это сделает.)