2013-08-27 5 views
3

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

+0

RTOS = операционная система в режиме реального времени? –

ответ

1

Может ли процесс быть вытеснен или нет, зависит от конструкции состояний процесса. В Linux у вас есть UNITERUPTIBLE_SLEEP, где процесс сна по-прежнему выполняется по определенной услуге, для которой он был запрошен. (Ex прочитал). Может случиться так, что служба никогда не завершалась, и процесс никогда не получал сигнала и бесконечно спал (держась за системные ресурсы).

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

Как указано в @Levente Kurusa, ОС может отправить сигнал процессу через интервал, сделав его либо управлением yild для ОС, (время нарезки, которое обеспечивает хорошее время отклика), либо убьет его, если он ждет для обслуживания в течение длительного времени.

1

В RTOS каждый процесс имеет минимальное время для запуска, а системные вызовы документируются и реализуются таким образом, чтобы обеспечить наихудший случай - максимальное время, необходимое для завершения. То есть, когда вы вызываете, например, open(), документация системного вызова RTOS имеет наихудшее поле времени. Если вызов не завершен, скажем, 100 мс, значит, он не сработает. Разработка приложений для ОСРВ действительно отличается от разработки для общей ОС. Вы должны учитывать время каждого звонка и т. Д. Например, на QnX вы должны указать ОС максимальное время отклика. Если ваш процесс не будет завершен в этом фрейме, он будет завершен.
Примечание: QnX - это ОС реального времени для x86.

0

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

Многие RTOS просто планируют ядра, которые обеспечивают не только планирование задач, таймеры, синхронизацию и IPC и предоставляются в виде статически любимых библиотек, так что окончательное приложение является монолитным. Чаще всего все потоки разделяют одно пространство памяти, а понятие «процесс», а не «легкий» поток, поскольку модель задачи не реализована. Если есть понятие «пространство ядра», тогда обычно в этом режиме запускается только сам планировщик ОС, и все задачи, потоки или процессы выполняются за пределами этого «пространства».

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

Неизменно в RTOS, однако, прерывания либо не отключены, либо отключены в течение минимально возможного времени, а сам планировщик полностью детерминирован.

Чтобы лучше понять концепции ОСРВ, взгляните на this online course от Джека Ганссле.