Многопоточность в ADAM 5510( или прерывания) |
Ответить | Страница <12345 7> |
Автор | |||||||||||
Действительный член Присоединился: 01 Июнь 2006 Категория: Russian Federation Online Status: Offline Публикации: 464 |
Опубликовано: 17 Апрель 2009 04:32 |
||||||||||
Не удачный пример. Причина не во заимодействии задач, а в принципиальном построении самой системы. Виндовс изначально задумывалась как полностью реентерабельная система с вытесняющей многозадачностью, где по сути все процессы равноправны в том числе и системные и выполняються в отсутствии аппаратных и програмных прерываний. Отсюда и зависания.
Опять же вопросы синхронизации не связаны с механизмом вытеснения, они возникают в любой многозадачной среде на самом деле. Это просто следствие разной длительности взаимодействующих процессов а не следствие вытеснения. Вообще вытеснение проявляеться в строго определенных случаях, когда менеджер ресурсов определяет процессу статус "голодающего" В сбалансированной системе (среднее время простоя 35% и выше) вытеснение никак себя особо не проявляет. Собственно основная причина, по которой опреционные системы Windows не могут считаться системами реального времени вовсе не в механизме вытеснения а в архитектуре, при котрой время выполнения определяеться процессами протекающими по прерываниям, которые в конечном итоге лишь позволяют выполняться пользовательскому и системному коду в отсутствие программных и аппартных прерывании... Это и делает неопределенным время выполнения вашей задачи. Так как в каждый момент времени процент свободного процессрного времени для системного и пользовательского кода величина неизвестная. |
|||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|||||||||||
Поднимается флейм. Как в старое доброе время - РВ, ПЛК vs. ПК, скоро дойдем до C против МЭК
Да, поскольку контроллеры предназначены для работы в РВ. Его не нужно создавать, его можно нарушить: WHILE %IX1.0 <> TRUE DO SOMETHING; END_WHILE;
Непонятно, откуда Вы это взяли. Про "мягкое" и "жесткое" РВ см. википедию (английскую, в русской пока эта тема плохо освещена.
То есть, как? Это очень смелое утверждение.
Тогда как Вы определяете их принадлежность к ПК?
Да видите ли, занять-то память, наверно, можно. Вопрос в том, каковы последствия такого решения. Недаром в МЭК 61131-3 не предусмотрено никаких средств для этого. |
|||||||||||
Инженер-системотехник
+7 (916) 477 3925 |
|||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|||||||||||
Ну, Windows'9x до этого определения было явно далеко. Вот WinNT/2K/XP - другое дело.
Спасибо за умный и развернутый комментарий. Но здесь есть с чем поспорить. Во-первых, вопросы синхронизации между процессами возникают тогда, когда процессы выполняются асинхронно. При кооперативной многозадачности, мы явно отдаем процессорное время другим задачам, завершив какую-то часть процесса. Проблем с синхронизацией тут не возникает - мы твердо знаем, что все ресурсы, свободные на момент передачи управления процессу, остаются свободными. И такой подход гораздо ближе к понятию системы реального времени. Трудности начинаются, когда процесс может быть вытеснен другим процессом. Для этого вытесняющему процессу достаточно иметь более высокий приоритет. И что делать, если ресурс, нужный высокоприоритетному процессу, занят низкоприоритетным? Приходится как-то сигнализировать ему о том, что ресурс занят. Процессы, протекающие по прерываниям, есть всегда. И сколько они занимают процессорного времени, вообще говоря, лежит на совести разработчика ОС (или, в нашем случае, ПЛК). Основную проблему Windows все знают - она ведет себя недетерминированно (мы не знаем, а вдруг ей понадобится свопиться в данный момент?). Ну а как поведет себя тот или иной ПЛК? Остается лишь надеяться, что лучше чем Windows, поскольку они гораздо проще и используют обычно другие ОС (или вообще не используют). |
|||||||||||
Инженер-системотехник
+7 (916) 477 3925 |
|||||||||||
Действительный член Присоединился: 01 Июнь 2006 Категория: Russian Federation Online Status: Offline Публикации: 464 |
|||||||||||
Вытеснение в Windows само по себе не приводит к выходу из выделенного кванта процессорного времени. Как говориться все дело в волшебных пузырьках. Если процесс, в нашем случае POU получает к примеру квант времени необходимый для полного завершения задачи, либо квант обусловленный временем цикла, то это тоже можно считать своего рода синхронизацией, так как это гарантирует, что в каждый произвольный момент времени ни одна из “параллельно” выполняемых POU не сможет получить доступа к “сырым” либо занятым данным другой POU. Но такой подход в конечном итоге приводит к внутренней фрагментации процессорного времени и к вынужденным простоям. Если взять Windows, то мы имеем заведомо меньший квант времени нежели необходим процессу для завершения. В результате мы имеем карусель на которую попадают маленькие фрагменты исполняемого кода множество процессов. Процессы имеющие более высокий приоритет либо временно его получившие в результате голодания попадают на карусель чаще и получают квантов больше. Это позволяет говорить о более реалистичной иллюзии параллельного выполнения, но тут уже нужны мьютексы и семафоры и запросы обработки плюс накладные расходы не переключение процессов и сохранение и освобождение стека процессора. Кстати CLR (FrameWork) решает эту задачу в Windows весьмя экстравагантным способом – использует один процесс разделенный на защищенные потоки. НО при любой модели многозадачности вопрос синхронизации актуален, просто в некоторых вариантах он заложен саму модель исполнения.
|
|||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|||||||||||
Остается только согласиться с этим. |
|||||||||||
Инженер-системотехник
+7 (916) 477 3925 |
|||||||||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|||||||||||
Тему многозадачности обсуждать можно долго, уж очень она бъемлющая. Но можно когда-то и остановиться. Еще пару слов Режим Жесткого Реального Времени - официальный термин. И еще ключевой момент - насчет динамической памяти.
|
|||||||||||
Участник Присоединился: 29 Июнь 2007 Категория: Russian Federation Online Status: Offline Публикации: 62 |
|||||||||||
А как же глюкавая но WinCE или же какой-нибудь Windows с RTX, в конце-концов embedded? Понятное дело все будет зависеть от задачи но так категорично я бы не заявлял.
Если программа будет полностью не подвластна ОС , то это уже будет анархия!
|
|||||||||||
С уважением!
|
|||||||||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|||||||||||
1. Windows - имеется в виду бытовая. Есть другие Windows-ы, которые хоть и называются также, но отличаются сильно. Embedded я сам охотно использую. Так же не плохи CE и QUNX. Но есть и посерьезнее, настоящие RTOS32, работающие прямо на кирпиче (проце) без заморочек, в сотню раз экономичнее Винды, и все ресурсы принадлежат PLC ! 2. Для ПРОМ-ПК идеальное взаимодействие между исполняемой программой и операционной системой - когда управление полностью принадлежит программе, а ОС только предоставляет функции и сервисы. 3. Конечно, есть простые автономные контроллеры, без всяких коммуникаций, обходящиеся без всяких системных сервисов. Но это уже скорее редкость, чем правило. С уважением, SAN |
|||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|||||||||||
Прежде чем завершить обсуждение, хотелось бы внести ясность в обсуждаемый вопрос. Горячее обсуждение началось с моего утверждения, что многозадачность (вернее, многопоточность) и динамическое выделение памяти не стоит использовать при программировании контроллеров. На что Вы ответили, что
Меня не покидает ощущение, что мы говорим о несколько разных вещах. Например, под "одноцикловой многозадачностью" Вы, похоже, имели в виду так называемую "SWITCH-технологию", не приводящую к распараллеливанию процесса и, следовательно, ничего общего не имеющую с многозадачностью. Далее, по ходу дискуссии, Вы приводите большое количество весьма смелых утверждений. Возможно, если бы Вы приводили примеры из обсуждаемой области, они не выглядели бы такими спорными. Когда Вы говорите о применении в контроллерах многозадачности "от Windows", не вполне понятно, что Вы имеете в виду. Это ядро ПЛК, работающее под управлением ОС Windows (какое?), или это прикладная программа, использующая Windows API (какие средства разработки используются?)? И тут же Вы сами себе противоречите - говорите, что не стоит применять в контроллерах Windows (в качестве чего?), и тут же отчитываетесь об успешном применении XP Embedded (применении для каких целей?). В моем понимании, ПЛК (PLC) - это то, что описано в IEC 61131. То есть, это некая среда (контроллер), обладающая ресурсами, в которой выполняются задачи, вызывающие программы, написанные на языках МЭК. Как видите, такой подход вполне допускает реализацию многозадачности. Однако внутренняя реализация этой среды скрыта для прикладного программиста. Она может использовать, в том числе, и Windows (примеры: CoDeSys SP RTE, Siemens WinAC). Сейчас очень многие ПЛК строятся на базе ОС Linux. Под контроллером я понимаю любое микропроцессорное устройство, служащее для непосредственного управления технологическим объектом. Это не обязательно может быть ПЛК, но и так называемый PAC (Programmable Automation Controller). Грубо говоря, это устройства, не соответствующие IEC 61131, и программируемые другими методами (например, на языке C). Описанный мной подход я распространяю на любые контроллеры. Я говорю о том, что прикладная программа по возможности не должна применять многопоточность и динамическое выделение памяти. Причины: требования обеспечения надежности работы программы, а также облегчение отладки. Вы согласны с этим утверждением? |
|||||||||||
Инженер-системотехник
+7 (916) 477 3925 |
|||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|||||||||||
С этим утверждением нельзя согласиться. Я не раз использовал обмен по Modbus и RS-485. Динамическая память для этого не нужна. Ну на по поводу OPC, тут мы опять рискуем скатиться к обсуждению, стоит ли засовывать пальцы в розетку, тьфу, Windows в контроллер. |
|||||||||||
Инженер-системотехник
+7 (916) 477 3925 |
|||||||||||
Ответить | Страница <12345 7> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |