П.10. - это тоже из технических, не "академических" требований: RTOS должна иметь адекватные (realtime) средства сетевого взаимодействия.
Об чём речь? Что у нас есть практически во всех OS общего применения? Правильно - TCP/IP (IPX/SPX - это славная, но практически умершая технология, и - не считать же серьёзной сетевой технологией "одоробло" NETBEUI от MS?).
TCP/IP по ряду причин не годится для realtime & embedded приложений. Т.е., очень даже годится, и даже крайне желателен, например, для управления извне (зашёл по telnet или ssh - и чудишь как у себя дома) - но не годится для гарантированной доставки данных. TCP/IP разрабатывался и оптимизировался для WAN, а не для LAN, и главная его характеристика "живучесть", но никак не "гарантированность". Вот, например, существует общее заблуждение, что TCP ("протокол гарантированной доставки", про UDP я даже не говорю) - может обнаружить обрыв канала... - не может: будете сидеть в своём блокирующем read() до посинения ;-)... И многое другое, причин много, сейчас не об этом - если кому будет интересно, я перечислю отдельно.
Тот же QNX - имеет в своём составе развитую сетевую подсистему Qnet - "гарантированного реагирования", которая, кроме того - плотно и органично интегрируется с работой полностью автономного стека TCP/IP.
Вот, пожалуй, на этом можно остановиться (хотя это ещё далеко не все П.П. "почему нельзя требовать от OS общего назначения - удовлетворять требованиям realtime").
P.S. Прошу прощения, если я написал слишком много, и утомил кого-то... Просто - "проходил мимо", сммотрю тема "реал тайм осы" - а в реал тайм осы скоро станут зачислять OS/2, и MS-DOS ... так дальше пойдёт - и MS Windows допустим в реалтайм... :-( Абыдно стало, панимаешь, да? Ещё раз прошу прощения.
Первоначально опубликовано Olej
Здесь я сознательно пошутил - сформулировал утверждение провокационно... и результат не заставил себя ждать, и именно тот, которого я ожидал.
Всё было бы так как вы говорили, если бы в природе вообще существовали однозадачные вычислительные процессы. Но их - не бывает!
Вы еще будете меня за многозадачность агитировать ;-)
Тем не менее - есть. Вот даже у меня рядом стоит - ящик для радиоканала - так внутри дос.
Первоначально опубликовано Olej
И ещё, к развеиванию иллюзий однозадачности у автоматчиков (а она - ой как есть!) - если у вас есть хоть одно (!) ассинхронное событие внешнего мира - прерывание: у вас уже есть классическая многозадачность! И хорошо, если она обслуживается такими же классическими API OS, и очень плохо - если "самопалками" от непонимания, что перед нами таже общая проблема ("вот кинжал: он хорош для того, у кого он есть, и плох - для того, у кого его нет"(с) ;-)).
"Автоматчики" как вы выражаетесь поступают элементарно: используют цикл опроса на манер поллинга с такой частотой, что никакой асинхронности нету. Вон у меня в DSP - все укладывается в 2-3 микросекунды.
Первоначально опубликовано Olej
А вот на предмет: "псевдомногозадачный режим в стиле DOS" - акститесь! Я столько руками переделал этих TSR, зубы на этом проел... много могу порасказать - о том, например, что почти все эксплуатируемые TSR были сделаны
некорректно, а потом говорят "виснет, виснет"... Переключение в TSR корректно только в том случае, когда вы сохраняете контекст задачи - в DOS это PSP - первый сектор задачи, да и это ещё не всё... Теперь представьте: для переключения на выполнение 3-х команд в TSR ... начинаем сохранять 256 байт (куда? может на диск ;-)? или в область памяти - так её ещё выделить нужно, динамически, и лучше по принципу стека - этот TSR может другой прервать!?)... а выполнив - вернуть братно.
Заметьте - я про TSR ничего не говорил. Просто все сделано через большой цикл с кучей switch'ей, callback-ов, тайм-аутов и нарезкой данных на куски.
Первоначально опубликовано Olej
Ещё будем об realtime и предсказуемости поведения говорить в этом случае?
Конечно. squid работает на многих платформах и под большой нагрузкой. С предсказуемым поведением. И с такой архаичной внутренней организацией.
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Критические секции тоже есть и используются. Чем оно избыточное - непонятно.
А потому, что:
- в POSIX его нет - не нужно, и так всего хватает;
- где мютексы есть - так критическую секцию создать труда не составляет, кто понимает...
На ассемблере тоже можно все что угодно изобразить - однако ж. И эээ.. навскидку - с мутексами будет тормознее. Намного.
SY,
EK
Первоначально опубликовано Olej
П.10. - это тоже из технических, не "академических" требований: RTOS должна иметь адекватные (realtime) средства сетевого взаимодействия.
[...]
канала... - не может: будете сидеть в своём блокирующем read() до посинения ;-)... го стека TCP/IP.
Не пользуйте блокирующие вызовы и будет вам щастье.
Стандартные пайпы OS/2 совершенно спокойно живут под netbios'ом / netbios over ip.
SY,
EK
Первоначально опубликовано evgen
Вы еще будете меня за многозадачность агитировать ;-)
Тем не менее - есть. Вот даже у меня рядом стоит - ящик для радиоканала - так внутри дос.
Почти как говорил М.Жванецкий: что ящик стоит - верю, что там внутри дос - верю, а вот что однозадачность - не верю - отныне и во веки веков, аминь ;-).
Чисто однозадачным процессом можно считать только что-то из численных вычислений - решение какого-то квадратного уравнения, что ли...
Как только у вас любое IRQ - всё, это поехала новая, параллельная ветка... В том случае, если вы аккуратничаете, сохраняете 2-3 регистра (даже не трогая сегментных, возможно), не сохраняя контекста прерванной задачи - так это только из-за элементарной простоы действий, выполняемых в обработчике (кстати, и эта привычка элементарных действий в обработчике - это "обратным концом" привычка, выработанная неприятностями ;-)).
Первоначально опубликовано evgen
используют цикл опроса на манер поллинга с такой частотой, что никакой асинхронности нету.
Активноый опрос со 100% загрузкой процессора? Хорошее решение...
Первоначально опубликовано evgen
Заметьте - я про TSR ничего не говорил. Просто все сделано через большой цикл с кучей switch'ей, callback-ов, тайм-аутов и нарезкой данных на куски.
TSR - это только название, и всего.
Но всё происходящее происходит точно также: calback-и (по сетевым событиям, ведь вы об squid говорите, если я понял?) - прерывания по сетевым событиям, тайм-ауты - прерывания от системного таймера, а на них обработчики, обработчики, обработчики... А на них - сохранение контекста, или без - но это "если повезёт"...
Первоначально опубликовано evgen
Конечно. squid работает на многих платформах и под большой нагрузкой. С предсказуемым поведением. И с такой архаичной внутренней организацией.
Под многими - я видел, знаю...
Под однозадачной дос - не видел..., но может пропустил чего.
Но считать squid как образец ... "с предсказуемым поведением" в смысле realtime? Нет, право, батенька, это уж слишком. Да если он заснёт над вашим запросом на лишних 5 минут - так вы и не заметите... даже на 15 минут - тоже не успеете идти на разборки с администратором...
Первоначально опубликовано Olej
Вот, пожалуй, на этом можно остановиться (хотя это ещё далеко не все П.П. "почему нельзя требовать от OS общего назначения - удовлетворять требованиям realtime").
P.S. Прошу прощения, если я написал слишком много, и утомил кого-то... Просто - "проходил мимо", сммотрю тема "реал тайм осы" - а в реал тайм осы скоро станут зачислять OS/2, и MS-DOS ... так дальше пойдёт - и MS Windows допустим в реалтайм... :-( Абыдно стало, панимаешь, да? Ещё раз прошу прощения.
Обычно таки разделяют hard и не hard-realtime OS.
Вы этого почему-то не проводите. По факту у меня получаются весьма hard-realtime системы на не hard-realtime OS - и оно работает в промышленных условиях. Часть из приложений я описывал, и не только здесь. И почему-то никто не объявился и не сказал - у меня точно такое же, но под QNX. Даже обидно, панимаешь.
SY,
EK
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Вы еще будете меня за многозадачность агитировать ;-)
Тем не менее - есть. Вот даже у меня рядом стоит - ящик для радиоканала - так внутри дос.
Почти как говорил М.Жванецкий: что ящик стоит - верю, что там внутри дос - верю, а вот что однозадачность - не верю - отныне и во веки веков, аминь ;-).
Чисто однозадачным процессом можно считать только что-то из численных вычислений - решение какого-то квадратного уравнения, что ли...
Как только у вас любое IRQ - всё, это поехала новая, параллельная ветка... В том случае, если вы аккуратничаете, сохраняете 2-3 регистра (даже не трогая сегментных, возможно), не сохраняя контекста прерванной задачи - так это только из-за элементарной простоы действий, выполняемых в обработчике (кстати, и эта привычка элементарных действий в обработчике - это "обратным концом" привычка, выработанная неприятностями ;-)).
В ящике для радиоканала - наверное есть прерывания, а в остальном - можно и без них с тупым поллингом
Первоначально опубликовано Olej
Первоначально опубликовано evgen
используют цикл опроса на манер поллинга с такой частотой, что никакой асинхронности нету.
Активноый опрос со 100% загрузкой процессора? Хорошее решение...
DSP или PICу - это по барабану, у них все время 100% загрузка, кроме режимов сна
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Заметьте - я про TSR ничего не говорил. Просто все сделано через большой цикл с кучей switch'ей, callback-ов, тайм-аутов и нарезкой данных на куски.
TSR - это только название, и всего.
Но всё происходящее происходит точно также: calback-и (по сетевым событиям, ведь вы об squid говорите, если я понял?) - прерывания по сетевым событиям, тайм-ауты - прерывания от системного таймера, а на них обработчики, обработчики, обработчики... А на них - сохранение контекста, или без - но это "если повезёт"...
TSR - это еще и куча ограничений...
А в сквиде все сетевые события проверяются в одном месте - через select или poll - и далее только обработчики и никаких таких прерываний. Цикл опроса длится где-то 100-200 мс, а все остальное сидит в буферах TCP стека...
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Конечно. squid работает на многих платформах и под большой нагрузкой. С предсказуемым поведением. И с такой архаичной внутренней организацией.
Под многими - я видел, знаю...
Под однозадачной дос - не видел..., но может пропустил чего.
Но считать squid как образец ... "с предсказуемым поведением" в смысле realtime? Нет, право, батенька, это уж слишком. Да если он заснёт над вашим запросом на лишних 5 минут - так вы и не заметите... даже на 15 минут - тоже не успеете идти на разборки с администратором...
;-) В дос оно не влезет по размеру - разве что с экстендером.
А на предмет заснет-не заснет - тестируют его в хвост и гриву - не засыпает. Хотя неприятности с ним случаются при потере связи - но это уже из другой области
SY,
EK
Первоначально опубликовано Olej
П.3. "RTOS должна имень достаточно большое число уровней приоритетов". Это самое простое... А сколько большое? И как их считать. Вот Windows имеет 16(?)? Но ведь это нечестные 16 - там 4 группы по 4, и приоритеты могут меняться внутри групп шедулером ядра! А это уже вопросы из области диспетчирования, а не приоритетов. Т.е. можно считать "честно" - 4.
4 по 32.
для Normal приоритетов приоритет еще может динамически меняться внутри каждого из 32 уровней
Первоначально опубликовано Olej
Т.е. само требование нужно бы переписать: "RTOS должна имень достаточно большое число статических уровней прерывания". В QNX - 64, у кого-то ещё из RTOS (VxWorks?) - 128. В Linux, если не ошибаюсь - 16? Сколько в OS/2?
Долго думали - что вы имели ввиду ? для IRQ уровень прерывания задается его номером, в писюке их всего 16.
SY,
EK
Первоначально опубликовано Olej
П.4. - его даже не называют часто (а зря), это сильно связано с приоритетами выше: "RTOS должна иметь эффективные и управляемые процедуры диспетчеризации".
Очень интересный пункт - об одном ём можно книжку написать ;-).
POSIX 1003b (стандарт POSIX в части realrime возможностей, я на него буду много ссылаться) определяет 4 дисциплины диспетчеризации: FIFI, RR (round-robin), adaptive, sporsdic.
Разработчикам OS общего применения часто даже не приходит на ум иметь одновременно несколько дисциплин диспетчеризации - они ищут "лучшую"...
- в Linux - чистая round-robin (на уровне, фактически, процессов! - мы ещё к этому вернёмся);
- в Windows... это отдельная песня: в 3.1/3.11 было то, что MS "изобрели" как "кооперативная многозадачность" - у всех остальных нормальных людей это FIFO. В 95/NT/... - это "вытесняющая многозадачность", т.е. то, что у остальных RR, но у них ещё идёт "изобретательство" по изменению (снижению) приоритета выполняющегося процесса - т.е. это типичая adaptive. О том, на уровне чего (процессов или потока) идёт диспетчеризация в Win32 судить трудно ("тайны мадридского двора") - везде в документации: "... процесс ..." - но они пишут документацию так небрежно, что могут и не различить эти понятия.
4 класса приоритетов по 32 уровня. NORMAL класс может иметь как динамические приоритеты, так и абсолютные (устанавливается в config.sys) все остальные - абсолютные
На уровне ниток.
Приоритеты наследуются нитками.
SY,
EK
Первоначально опубликовано Olej
П.5. - почти все универсальные OS (Windows, Linux, OS/2...) - моноядерные (или макроядерные) OS, за исключением, пожалуй MacOS & NextStep, я больше не знаю. Моноядерность сама по себе ни в коей мере не порок (вон биолог Линус Торвальдсон - тот просто "писает горячим чаем" от моноядерности...). Но из нее вытекает ряд любопытных следствий.
Ядро моноядерных OS - нереентерабельно. Т.е. оно может быть реентерабельно, ещё в IBM OS/360 это было - но реентерабельное ядро будет на порядок сложнее, и, самое главное с условиях рынка настольных систем - существенно медленнее. По крайней мере, ядро и Windows и Linux - нереентерабельное. Может OS/2 реентерабельное? Не верю.
А это значит, что любой вызов API ядра не может прерываться для выполнения другого вызова API ядра. А это значит, что любой вызов API ядра - это временная зона нечувствительности (напрмер, для переключения в контекст другого потока)... А вызовы ядра - это добрая половина всего API OS :-( ... сколько их 2000? 5000? 10000? (и чем богаче API системы - тем ситуация усугубляется). А вот здесь и выплывает пункт: "RTOS должна обеспечивать минимальные интервалы нечувствительности"...
Многие RTOS выполнены по технике микроядра - в универсальных OS эта техника применяется редко, т.к. она была тщательно проработана в университетских IT кругах (появилась) только в 1-й половине 80-х годов. Так сделаны QNX, VxWork... В микроядерной архитектуре системный вызов (вызов микроядра) - это только передача (коммутация) через микроядро исполняющему модулю вызова - это на порядки меньше, чем в макроядре. Да и API микроядра в QNX, напр., это - 64 вызова!
Сильно сомнительно, что можно сделать реентабельные вызовы для нереенабельных операций - скажем переключалку задач или диспетчер памяти.
Микро- или не микро ядро - прямого отношения к риалтайму этого не имеет, как и то, сколько вызовов API сидит в ядре и сколько - не в ядре. Они все равно где-то есть...
Что до OS2 - то часть системных вызовов реентабельны, часть - нет, но от этого никто не страдает
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме