Первоначально опубликовано Draggan
Real-time systems: systems that respond in a predictable way to unpredictable external events. |
И вот теперь, отталкиваясь от этого короткого замечания, которое во многом совпадает с тем, о чём шло обсуждение на последних 10 страницах темы ;-) - мы можем попытаться нарисовать, "в нулевом приближении", определение того, о чём так долго обсуждали...
А то здесьуже такой категоричный крик начался: "Даёшь определения!!!".
Даже не определение, потому как у меня лично идиосинкразия на любые определения: всё, для чего уже даны неподвергаемые сомнению определения "в последней инстанции" - это уже костно и мертво... - это первый признак. Итак, предварительный вариант... не определения, но описания, объяснения "что есть realtime":
Программная система (любая: OS или прикладная в целом) относится к realtime, если она строго прогнозируемым образом реагирует на непрогнозируемый
ассинхронный поток внешних событий (внешних возмущений). При этом, любая из этих прогнозируемых реакций системы
всегда должна завершаться (время релаксации) в заранее оговоренный для этой системы интервал времени.
Пусть будет так...
Как вы видите - в такой перефразировке временной параметр вообще почти не фигурирует, и выплыл побочно, в конце уточнения.
Теперь:
- системы на основе жёсткой круговой диспетчеризации в однозадачном окружении (MS-DOS, например, см. ранее) - выпадают из этого определения: в них просто нет
ассинхронного потока событий - этот поток в них буферизуется в очередь и обслуживается синхронно. В этом случае, кстати, не умаляется значение таких систем и их применимости там, где это уместно (вот де ... фу, нериэлтайм это система) - просто в этом случае realtime условия просто неприменимы к условиям функционирования такой системы.
- какой-нибудь текстовый редактор MS Word под Windows - выпадает из этоо определения, т.к. все вы наблюдали неожиданные явления его "задумчивости", когда в Windows начинается свопинг, запускается новая задача, или - ну, это просто прелесть - форматируется дискета. Конечно, можно всё довести до абсурда, и сказать, что требуемый интервал релаксации у нас - 1 час. - тогда мы получим "полный реалтайм" ;-).
- система, которая загружена "под завязку", на 95% производительности процессора - тоже выпадают из определения (или - должна выпадать, и, если нужно - под это нужно трансформировать определение). Это - случай производительности, а не realtime, и решается он просто - сменой процессора. Разумно говорить об realtime только тогда, когда
сумма потребных производительностей
всех потенциально обслуживаемых ветвей - может загружать процессор до 70-95%, т.е. когда проблемы могут быть не в нехватке ресурсов для всех ветвей исполнения, а в невозможности их эффективной координации (об этом условии есть и в текстах Dedicated Systems и в материалах QSSL).
Далее просто: всяк, желающий показать, что его любимая OS (или единственная, с которой он может совладать ;-)) - должен:
- назвать численное значение вот того максимального интервала реакции;
- показать на тестах, что во всех мыслимых и немыслимых комбинациях ассинхронных возмущений - время релаксации (ответной реакции, перехода системы из состояния в состояние и т.д.) -
всегда завершается в этот интервал.
Эй, где там: OS/2, FreeBSD ... кто в очереди "крайний"?
Просто ... да непросто... Потому, как 2-е требование - оно не процедурное: требуется доказать отсутствие! Всегда стократ сложнее доказывать, что "ты не верблюд", чем доказывать, что "нечто - есть верблюд".
Поэтому, те кто работает с этими системами (те же Dedicated Systems), пытаются "отрицательное" требоване - заменить суммой "положительных": тех необходимых и достаточных условий, при
выполнении которых будет наблюдаться
отсутствие вот тех, нежелательных качеств системы, которе препятствуют realtime.
Это и есть требования, изложенные Dedicated Systems, и которые я (в некотором другом джентльменском наборе) перечислял многими страницами ранее...
Неприятность этого подхода состоит в том, что этот список
положительных требований в обеспечение
отрицательного свойства - эмпирический, он сформирован по трбованию
необходимого, но никак не подтверждено, что он
достаточный... Так вот произошло с последним требованием: отсутствием инверсии приоритетов - оно было добавлено только через несколко лет после того, как предыдущие N-1 уже были "устаканены". Но последнее ли оно?
Но и одной инверсии приоритетов - достаточно, чтоб поностью завалить critical mission систему... Т.е. одно из первейших требований - покажите на тестах, что в вашей системе не возникает инверсия приоритетов (или при соблюдении каких условий не возникает, или при использовании каких синхронизирующих примитивов не возникает) - и только после этого мы моем говорить о степени риэлтаймовости вашей системы.