реал тайм осы |
Ответить | Страница <1 34567 36> |
Автор | |||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
Опубликовано: 17 Октябрь 2003 12:50 |
||
П.6. - очень часто пишут, что "RTOS должна обеспечивать наследование приоритетов" ... вот MS всё спорила, что в WinNT есть наследование приоритетов ;-)...
Этот пункт очень сильно связан с предыдущим... Наследование приоритетов - это когда вызовы (в том числе и API, в том числе и API ядра!) выполняются под приоритетом вызывающего потока (процесса). Говорят, что "в макроядерной архитектуре это весьма трудно реализовать"... но дело то в том, что даже реализовав это - оно там бессмысленно: - отношения приоритетов имеет смысл только в контексте кто и кого может прервать при исполнении. Но если API ядра выполняюися в блокирующем режиме - то какая разница, под каким приоритетом они это делают?! В QNX - наследование приоритетов - органичная особенность, блюдущаяся на всез уровнях иерархий. Следующий пункт - это вот тот сакраментальный N+1-й критерий, о котором я упоминал выше, и который появился гораздо позже остальных: "RTOS должна препятсвовать возникновению инверсии приоритетов". Это потрясающе интересная проблема, в общем виде она не решена, но я даже не стал её выносить в отдельный "П", т.к. - как можно вообще рассуждать об "инверсии приоритетов" в OS-ах, в которых нет наследования приоритетов!!! P.S. Я не буду детально расписывать "инверсию приоритетов", но только скажу: а). этот эффект возникает только при рассмотрении 3-х и более параллельных веток выполнения (поток, процесс), потому его и "просмотрели", б). выявляется он крайне редко - для этого нужно стечение временных интервалов этих >=3-х процессов, в). поэтому оттестировать его (отсутствие ;-)) практически невозможно, г). но когда возникает - то элементарная логика выполнения нарушается (низкоприоритетный процесс выполняется, а высокоприоритетный - стоит и его ждёт), д). ... и вот тогда точно "рванёт"... ;-( (какой там закон Мэрфи?). |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
П.7. - "RTOS должна обладать минимальной латентностью". Но одна из характеристик, определяющих латентность - это "масштаб", тот квант времени, timeslice - с дискретностью которого принимаются решения, о перепланировании, к примеру. До самого последнего времени все универсальные OS (MS-DOS, Windows, Linux) использовали фиксированный квант в 20ms. (в последнее время что-то меняется, в Linux, например, происходят некоторые изменения...).
А в QNX (как 1 из образцов RTOS) - timeslice = 1ms. Но и это ещё не всё - он может программно изменяться! Я сам доводил timeslice в QNX до его минимальной границы (в текущей версии 6.2.1) - 10mks. На это все говорят: "так при этом сильно упадёт производительность!"... Не падает! Как? Не знаю :-). Сравните масштабы интервала принятия решений в системе: отличие в 2000 раз!!! Это практически так: временная сетка событий, которая в одном случае =1сек., в другом - =1час., или представьте "анимацию", в которой кадры вместо 25 в сек. сменяются - 1 за 20 минут... Представили? Какая (минимальная, если можно изменить) величина timeslice в OS/2? |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
П.8. - "RTOS должна обеспечивать гибкие механизмы организации параллельных вычислительных ветвей и взаимодействия между ними" - обычно здесь понимают механизмы "лёгких" процессов - thread (хотя это как-раз совершенно не обязательно, в VxWorks, кажется, существуют только пользовательские потоки, но не процессы). Именно по этой причине использование MS-DOS в качестве среды выполнения реалтайм не может даже рассматриваться, а так часто встречающиеся в обсуждениях утверждения "... а вот мы слабали под MS-DOS что-то такое вполне в роде реалтайм" - не могут вызывать даже смеха, потому, что смех этот закончится слезами...
Это-то как раз, как будто, есть в универсальных OS... Но реализации? В Linux - thread создаются через clone(), т.е. как теже процессы (и даже имеют отличающиеся pid). В Windows - есть thread, но всё, что связано с их "собственными" областями данных (pthread_key_*() в POSIX) - всё смазано и с большими ограничениями. А средства IPC (межпроцессного взаимодействия)? Весь их "джентльменский набор" строго формализован POSIX 1003b..., но во всех универсальных OS их то есть крайне ограниченное подмножество, то появляются "новые" и заведомо избыточные ("критическая секция" в Windows). |
|||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 08 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 178 |
|||
Начнем с конца.
Почему это нельзя ? Очень даже можно. В однозадачном случае дос обеспечит навыисшую скорость реакции, поскольку никаких накладных расходов и переключений контекста(если не рассматривать большую разницу в производительности real 32bit protected mode). Более того - можно и внутри досовской задачи организовать "псевдомногозадачный режим в стиле DOS" Другое дело - чего это стоит, как это отлаживать и что делать с записью на диск, сетевизмами и т.д. и т.п. Вы будете смеятся, но этот "псевдомногозадачный режим в стиле DOS" используется и некоторых уникс-приложениях, в частности - в хорошомаштабируемом прокси-сервере squid
дык вроде как родили ж posix thread'ы в ли/униксах ?
А что IPC ? В OS/2 все есть чуть ли не с версии 1.0 и про ограниченное подмножество чего-то никто не говорит. Критические секции тоже есть и используются. Чем оно избыточное - непонятно. SY, EK |
|||
SY,
EK |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
П.9. - этого пункта вы не найдёте ни в одном "академическом" перечислении (до таких ли конкретностей снисходить мужам от науки? ;-)) - это пункт "от меня": в RTOS ни при каких обстоятельствах не может быть механизма свопирования страниц на диск. И действительно нет: QNX, VxWorks, pSOS...
Иначе - о каком минимальном (или даже предсказуемом до порядков) времени реакции можно говорить, если требуемая для реакции страница памяти окажется выгруженной? Можно возразить: многие OS предусматривают возможность пометить страницу как "невыгружаемая". Предоставляют, но какие из них метить, если это апприорно неизвестно... все? тогда это и есть несвопирование. На это возражают - во многих OS есть возможность запретить свопинт (вот выше про OS/2 это было сказано). Но "запретить" и "не использовать" это не одно и то же: - как будет вести себя OS со штатно включенным свопингом, которая тестировалась и отлаживалась именно так в 99.999...% случаев - при отключении свопинга как опциональной возможности (которая и тестировалась то может всего 3 ;-) раза)? P.S. Понятие "свопинг", кочующее с обсуждения в обсуждение, вообще а).ошибочное и б).вносит много заблуждений. В современных OS свопинга вообще-то нет, свопинг был в Win 3.1/3.11 - когда при нехватке RAM часть области задачи выгружалась на диск. В современных OS есть виртуализация страниц RAM на диск - похоже на свопинг, но и только, не более, чем "похоже": о какой выгрузке задачи можно говорить, когда любая задача после подготовки и перед началом выполнения даже ещё не загружалась в RAM, а только выполнено распределение несуществующей физической памяти задачи и сделано её отображение на дисковое пространство? А отсюда следует ещё одно тонкое требование к realtime OS - в такой системе не должен использоваться механизм COW (copy on write) при создании копий областей RAM. В частности - при ветвлении процессов на манер UNIX-овского fork()! А этот механизм в универсальных OS отменить нельзя. |
|||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 08 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 178 |
|||
(a) поэтому надо делать наоборот - девелопить со своппингом, тогда без него уж точно все будет замечательно ;-) (б) не отключают свопинг по одной простой причине: для работы без своппинга надо несколько больше памяти, что выходит несколько дороже. (в) большинство техпроцессов не загнутся и не взорвутся при возникновении задержки на свопинг или как вы тут правильно заметили - пейджинг. Более того - и вообще ничего плохого не произойдет, если все сконструированно как надо. Мне за восемь лет ни разу не потребовалось отлючать свопинг. Максимум чего я делал - убирал приоритет дисковым операциям. SY, EK |
|||
SY,
EK |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
А потому, что: - в POSIX его нет - не нужно, и так всего хватает; - где мютексы есть - так критическую секцию создать труда не составляет, кто понимает... Так и просится фраза из известного анекдота: "дык Страдивари, это он для лохов скрипки делал, а для конкретных пацанов - барабаны...". |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
Нет!
Это просто караул, а не форум - здесь просто заикой станешь! |
|||
Действительный член Присоединился: 14 Октябрь 2003 Категория: Ukraine Online Status: Offline Публикации: 267 |
|||
В UNIX - "да", в Linux - "нет" - не нужно путать. Linux - только один из многих-многих-многих... UNIX. И, в общем, ничем не выдающийся особенно в соём "роду", кроме философии развития... POSIX - это и есть обобщение всех UNIX наработок под одним стандартом, и, в свою очередь - стандарт того, что должно быть в каждом UNIX, и кого можно относить к UNIX. А написал я это всё для справки: детальнее, чем плохи thread в Linux, и в каком направлении они их собираются изменить - можно посмотреть здесь: http://www.shelek.com/club/viewart.php?id=82 Кроме того, при некотором размышлении (хоть там нет об том ни слова), оттуда можно понять и почему плохи thread Windows (для SMP выполнения). |
|||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 27 Март 2003 Категория: Russian Federation Online Status: Offline Публикации: 240 |
|||
>Н-да... >элементарной технической примитивности форума. > >убогое бормотание из-за "формы" редактирования постингов ;-)... >>>>>>>>>>>>>>>>>>>>>>>>>>>> «Умность» содержания форума зависит исключительно от участников форума, то есть от авторов сообщений. Редактор ответов конечно достаточно примитивен и не расчитан на «разрезание» исходного сообщения. Надеюсь в следующей версии это может быть исправлено. В то же время если нужно, то текст исходного сообщения может быть скопирован скажем в Word, где ответ может быть написан в стиле стандартной e-mail переписки, а затем скопирован в поле ответа. Это письмо так и сделано. С Уважением Сергей Сорокин |
|||
Ответить | Страница <1 34567 36> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |