Низкая задержка прерывания благодаря выделенным архитектурам и операционным системам

Этот вопрос может показаться немного расплывчатым, однако я изучаю, как работают системы прерываний и их время ожидания. Я пытаюсь понять, как такие архитектурные средства, как FIQ в ARM, помогают уменьшить время задержки. Чем это отличается от использования операционной системы, которая не имеет доступа или не может предоставить доступ к этим возможностям? Например, Windows RT предназначена для ARM и т. д., и эта операционная система не может быть перенесена на другие архитектуры.

Проще говоря, чем отличается задержка прерывания в выделенных архитектурах с выделенными операционными системами по сравнению с операционными системами, которые можно переносить на множество разных архитектур (например, Linux)?

Извините за разглагольствования - я довольно смущен, как вы, вероятно, можете сказать.


person JSJ    schedule 20.10.2014    source источник
comment
возможный дубликат В чем разница между прерыванием FIQ и IRQ система?   -  person artless noise    schedule 21.10.2014
comment
начните с поиска документации по оборудованию, помните, что существует много ядер рук и различаются способы управления прерываниями. Arm не производит чипы, а производит ядра, поставщики чипов могут обернуть свою собственную логику диспетчера прерываний вокруг логики ARM, добавляя дополнительные проблемы. опять гугл твой друг. Как только вы поймете аппаратное обеспечение или даже протестируете его на «голом железе», что должно быть открытием (недетерминированное время отклика), вы можете начать исследовать операционные системы с открытым исходным кодом.   -  person old_timer    schedule 21.10.2014
comment
Немного расплывчато, скорее, очень расплывчато. Я ожидаю, что самые переносимые операционные системы будут иметь наиболее общие уровни абстракции, которые требуют большего количества кода (времени цикла) для перехода от аппаратного обеспечения к уровню абстракции и от уровня абстракции к общему обработчику по сравнению с чем-то целевым или менее общим. ..но конечно...это зависит.   -  person old_timer    schedule 21.10.2014


Ответы (1)


Я начну с вашего примера с Windows RT, Windows RT — это порт Windows на архитектуру ARM. Это не «выделенная операционная система». Есть (вероятно) много ОС, которые работают только на одной архитектуре, но это скорее функция, которую нельзя портировать по какой-то причине.

Что на самом деле означает «порт»?

У Windows есть ядро ​​(здесь мы будем называть его NT, не имеет значения), и в этом ядре NT есть множество концепций, которые необходимо реализовать. Этими концепциями являются такие вещи, как таймеры, виртуализация памяти, исключения и т. д.

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

Давайте рассмотрим прерывания (исключения AKA) на ARM с FIQ и IRQ. В общем случае прерывание может происходить асинхронно, то есть в любое время. Процессор обычно чем-то занят, когда активируется IRQ, поэтому этот контекст (назовем его UserContext1) должен быть сохранен, прежде чем ЦП сможет использовать какие-либо ресурсы, используемые UserContext1. Обычно это означает сохранение регистров в стеке перед их использованием. На ARM, когда происходит IRQ, процессор переключается в режим IRQ. Регистры r13 и r14 имеют свою копию для режима IRQ, остальные нужно будет сохранить, если они будут использоваться - так и происходит. Эти сохранения в памяти занимают некоторое время. IRQ обрабатывается, UserContext1 извлекается из стека, после чего происходит выход из режима IRQ.

Таким образом, задержка в этом случае может быть временем от утверждения IRQ до момента начала выполнения вектора IRQ. Это будет некоторое установленное количество тактовых циклов, основанное на том, что делал ЦП, когда произошло IRQ. Задержка до того, как может произойти обработка IRQ, — это время от утверждения IRQ до момента, когда ЦП закончил сохранение контекста. Задержка перед выполнением кода пользовательского режима зависит от слишком большого количества вещей в ОС/ядре, чтобы объяснять их здесь, но минимум сводится к времени от утверждения IRQ до возврата после восстановления UserContext1 + время для переключения контекста ОС.

FIQ - Если вы упорный программист, вам может понадобиться всего 7 регистров, чтобы полностью справиться с обслуживанием прерываний. Я упомянул, что режим IRQ имеет собственную копию из 2 регистров, а режим FIQ имеет собственную копию из 7 регистров. Да, это 28 байтов контекста, которые не нужно выталкивать в стек (на самом деле один из них — это регистр ссылок, так что у вас действительно 6). Это может устранить необходимость сохранять UserContext1, а затем восстанавливать UserContext1. Таким образом, задержка может быть уменьшена до времени, необходимого для сохранения/восстановления.

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

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

(*Многопроцессорные системы делают то же самое, но с некоторыми функциями синхронизации и барьера, а также с небольшим количеством сложности)

person SilverCode    schedule 21.10.2014