lqp - Realtime Revisited
January 19th, 2010
08:47 pm

[Link]

Previous Entry Add to Memories Tell A Friend Next Entry
Realtime Revisited
Года полтора назад я спрашивал френдов - могут ли они мне обьяснить, какой смысл имеет выражение "Realtime OS", кроме как быть маркетинговым Buzzword-ом. Меня стали ругать, что я де незнаю таких элементарных вещей, но ответы как-то меня не удовлетворили.

Не так давно я нашел правильный ответ и гоотв признать что "реалтаймовость" это не всегда только рекламный слоган.

[Жесткой] Realtime OS называется операционная система, системные вызовы которой всегда возавращают управление за заданное время - _независимо_ от того, успела ли система за это время выполнить запрашиваемую функцию. То есть если в обычных ОС системные вызовы возвращают два состояния "выполнено" и "ошибка", то в реалтаймовых три - "выполнено", "ошибка" и "не успела я". Предполагается что в последнем случае система либо доделает задачу, когда ей снова передадут управление, либо выполнение задачи дальше все равно бессмысленно. Прикольно, но для большинства применений, в том числе обычно относимых к "реалтайму" - чрезмерно геморройно. И к качеству драйверов/планировщиков никакого отношения не имеет.

(24 comments | Leave a comment)

Comments
 
From:[info]amarao-san.livejournal.com
Date:January 19th, 2010 - 03:06 pm
(Link)
ну, да, это и есть главное требование к рилтайму (из названия следует). Там ещё планировщик такой же - приложение должно успеть к дедлайну. Либо вызвать эксепшн "опускайте аварийные стержни в реактор".
From:[info]lqp
Date:January 19th, 2010 - 08:34 pm
(Link)
Если у нас время системных вызовов ограничено - то с планировщиком все получается более-менее само собой. Ну то есть можно конечно сделать такой планировщик, который бы систематически обносил бы временем программу, но это нужно специально извращаться.

From:[info]tzirechnoy.livejournal.com
Date:January 19th, 2010 - 04:00 pm
(Link)
Ну, не совсем корректное утверждение.

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

И, соответственно, всё не так геморройно как кажэтся.
From:[info]lqp
Date:January 19th, 2010 - 05:02 pm
(Link)
Вас могут уснуть (вытеснить) на любое время безо всякого Вашэго участия

Это мы по второму кругу начинаем. Совсем без причины никакая мала-мала вменяемая ос выгружать программу не будет. Если железо исправно и достаточно для выполнения задач - то причина это как правило другие программы, запущенные на том же железе. А не иметь физического контроля над железом и _всеми_ выполняющимися программами и приэтом требовать реалтаймовости - это на мой взгляд нонсенс.
From:[info]max630.livejournal.com
Date:January 19th, 2010 - 05:40 pm
(Link)
> не иметь физического контроля над железом и _всеми_ выполняющимися программами и приэтом требовать реалтаймовости - это на мой взгляд нонсенс

это верно. соответственно, не надо зависеть от железа и программ, которые мы не можем или не хотим контролировать.
[User Picture]
From:[info]kouzdra
Date:January 19th, 2010 - 05:52 pm
(Link)
Совсем без причины никакая мала-мала вменяемая ос выгружать программу не будет. Если железо исправно и достаточно для выполнения задач - то причина это как правило другие программы, запущенные на том же железе.

Конечно - но это само по себе не составляет проблемы: это вовсе не обязательно фиксить избыточностью ресурсов: достаточно иметь возможность запретить выгрузку тех приложений, для которых это существенно (постоянно или временно - на критическом участке).

Вот как раз хороший пример одной из фич, которыми RT-OS отличаются от не RT
From:[info]lqp
Date:January 19th, 2010 - 08:08 pm
(Link)
Ну,если совсем уж на диск - сейчас мало кто такого не умеет.
From:[info]tzirechnoy.livejournal.com
Date:January 19th, 2010 - 06:46 pm
(Link)
Да хоть по десятому.

В современных условиях все программы вытесняются много раз в секунду. В том числе когда жэлезо исправно и достаточно для выполнения задач. Прерывания, знаете ли. Они не ждут.

Что ещё веселее: в современных условиях дажэ реалтаймовая задача почти всегда выгружэна нафиг. Поскольку объём реалтаймовых задач дажэ в хардреалтайм системе обычно гораздо меньшэ, чем объём всей остальной шняги по общению с внешним миром.

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


Могу привести пример радио-АТСки (базовой станцыи DECT на несколько сотен абонентов). У неё есть реалтаймовая часть (софт, по счастью), которая отрабатывает DECTовские сообщения, делит канал между абонентами, маршрутизирует звук и сообщения ISDN. И есть нихера не реалтаймовая часть, которая отвечает оператору, ведёт базу данных пользователей и их идэнтификаторов, перекладывает логи в архив и создаёт бэкапы. Вот вторая по объёму кода заметно большэ, чем первая. Но несмотря на это благодаря реалтаймовым патчам на одну известную ОС они замечательно ужываются на одной практически писюковой плате, с совсем писюковым процэссором и стандартной периферией (ну, кроме АЦП/ЦАП и гетеродина в DECTовских платах).
From:[info]lqp
Date:January 19th, 2010 - 08:25 pm
(Link)
Если вы, скажем, в "нихера не реалтаймовой части" запустите dd, то реалтаймовой части резко поплохеет, кажется даже на RTlinux. Но вы, естественно, в рабочем режиме этого делать не будете. Мой пойнт был именно в этом: обеспечение гарантированной реакции отдельной программы в агрессивной софтверной среде редко бывает условием задачи. Как правило нагрузку внешней среды можно ограниить какими-то разумными рамками.
From:[info]tzirechnoy.livejournal.com
Date:January 20th, 2010 - 08:54 am
(Link)
Нет, не поплохеет. Ну, разве что dd напущен на какой-то странный девайс, разработичики драйверов которого не знали про требования к realtime. Но в настоящем RTlinux таких драйверов нет.
From:[info]max630.livejournal.com
Date:January 19th, 2010 - 04:25 pm
(Link)
> "выполнено", "ошибка" и "не успела я"

"нет, не допустим". Не успеть - не должно и по построению не может. Когда я это делал, это означало что никакого IO в тех системных вызовах кроме inp/outp и неблокирующей работой с очередями общения с "мягким" миром не было.
From:[info]lqp
Date:January 19th, 2010 - 05:03 pm
(Link)
Даже самые большие буфера в озу рано или поздно кончатся.
From:[info]max630.livejournal.com
Date:January 19th, 2010 - 05:35 pm
(Link)
в моём случае это проходило по разряду "выдернули из розетки"

по-хорошему можно протянуть до гуя и даже диска, но это не на ширпотребных OS
From:[info]tzirechnoy.livejournal.com
Date:January 19th, 2010 - 06:47 pm
(Link)
Да, и это надо понимать. И что-то с этим делать. Ничего страшного (не должно случаться).

Во многих случаях, например, критичный обмен приходит прямо в realtime-часть, и уходит прямо в realtime-часть. Все остальные bells&wistles могут подождать часок-другой-третий, пока мастер не приедет.
From:[info]max630.livejournal.com
Date:January 19th, 2010 - 09:17 pm
(Link)
вообще, возможно, переполнение буфера и игнорировалось, я уже не помню точно.
[User Picture]
From:[info]ppkk
Date:January 19th, 2010 - 04:38 pm
(Link)
Под такие ОС и ПО надо писать соответственно, иначе смысл теряется. В старые времена там отказывались порой, например, от таких прелестей архитектуры популярных микропроцессоров как прерываний и т.п.: "разделением времени" занимались сами приложения, состоящие из малюсеньких кусочков, передающих управление ядру самостоятельно.

К персоналкам, за которыми люди сидят, это не должно иметь особого отношения: скорее уж к тем, кто пишет программы для микроконтроллеров. Ну или сетевого оборудования, например, мобильных телефонов (без Явы всякой) и т.п. Про VxWorks, если из Википедии, можно почитать.

Для современных персоналок написанное Вами было бы неплохо применить, но ясно, сколько проблем будет с привычными программами, так что можно только вздыхать и жалеть, что по этому пути не пошли. RTLinux или Windows CE же, по идее, очень грубо,— попытки сэкономить на образовании, чтобы не слишком люди переучивались для разработки специфического ПО.
[User Picture]
From:[info]kouzdra
Date:January 19th, 2010 - 06:02 pm
(Link)
RTLinux или Windows CE же, по идее, очень грубо,— попытки сэкономить на образовании, чтобы не слишком люди переучивались для разработки специфического ПО.

Еще на софте - codebase у них очень большой - жалко терять.
[User Picture]
From:[info]ppkk
Date:January 20th, 2010 - 04:13 pm
(Link)
Да. Если не для примера писать, то причин важных вообще много может быть.
From:[info]max630.livejournal.com
Date:January 19th, 2010 - 05:45 pm
(Link)
касаемо "выдернуть из розетки" и прочих катаклизмов

Реалтаймовые обещания выполняются при соблюдении некоторых допущений. Это как "не выдёргивать из розетки" и "не стрелять из пулемёта в системник" ещё и "память в буфере не закончится". Обобщение этих требований в одну группу может показаться смешным, но они совпадают в одном - при работе системы такого не происходит, а если произойдёт - то мы сделаем так чтобы не происходило.
From:[info]lqp
Date:January 19th, 2010 - 08:29 pm
(Link)
При достаточно длинном списке условий такого рода любая ОС становится реалтаймовой.
From:[info]bablaw.livejournal.com
Date:January 19th, 2010 - 08:40 pm
(Link)
Я, как старый фанат ассемблера, понимал всегда под реалтаймом полностью отключенные прерывания по внешним устройствам и однозначно фиксированное время выполнения команд (т.е. код, не зависящий по времени исполнения от данных).

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

В общем, параллельное архитектуры рулят...
From:[info]lqp
Date:January 19th, 2010 - 11:24 pm
(Link)
Реалтайм на голом железе - это, как бы, совсем другой вопрос.
From:[info]torbasow.livejournal.com
Date:January 24th, 2010 - 10:18 am
(Link)
Виндам этого ох как не хватает. Едва ли не каждодневно случается чертыхаться, взывая к ним: «Оставьте, ради всего святого, эту задачу! Я передумал её делать (или вообще по ошибке запустил)! Ослобоните интерфейс!».
From:[info]http://users.livejournal.com/_iga/
Date:January 28th, 2010 - 05:47 am
(Link)
> в реалтаймовых три - "выполнено", "ошибка" и "не успела я"

В реалтаймовой RSX-11M (ОСРВ), которую упоминал [info]kouzdra@lj, отсутствовал такой код возврата системного вызова как "не успела".
И в принципе некоторые её системные вызовы могли никогда не возвращать управление (например, EXIT$S), или не возвращать управление неопределённо долгое (не зависящее от операционной системы) время (например, QIOW$ или WTSE$).

Реалтаймовая ОС - та, которая позволяет использующему её программисту(ам) создавать системы реального времени (с гарантированным временем отклика на внешние события). RSX-11M позволяла, но сама по себе не гарантировала это.
Powered by LJ.Rossia.org