Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

реал тайм осы

 Ответить Ответить Страница  <1 2728293031 36>
Автор
Сообщение
Olej Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 14 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 267
Свойства публикации Свойства публикации   Ответить, цитируя автора - Olej Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: реал тайм осы
    Опубликовано: 25 Ноябрь 2003 14:43
Первоначально опубликовано evgen

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


Не "показывать не хочет" - а "не находит уместным это делать второпях и кой-как"...
Но в самом скором времени:
- проделаю на различных OS (хотя бы минимальном наборе);
- допишу текстовые разъяснения того, что написано и происходит;
- найду URL, где это сделать более уместно...

... и выложу - как и всегда это делаю.

Но я там столько исписал, и ... "на пальцах", и мимикой - уже столько рассказал в самых деталях, что воспроизвести это, если совсем невмоготу - дело плёвое...
Наверх
Olej Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 14 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 267
Свойства публикации Свойства публикации   Ответить, цитируя автора - Olej Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 14:55
Первоначально опубликовано Draggan

Одним из механизмов защиты от такой ситуации является технология Priority Ceiling Protocol. В соответствии с ней объекту синхронизации (семафору или мютексу не важно) присваивается некий приоритет, соответствущий самому высокому приоритету из списка потоков, к нему собирающихся обратиться. И когда не самый высокоприоритеный поток блокирует этот объект синхронизации его приоритет системой поднимается до значения, соответствующего приоритету обекта управления. Таким образом, поток, захвативший ресурс не может быть прерван внутри critical section более приоритетным потоком, нуждающимся в этом ресурсе.


Такой механизм реализован в одной из (как минимум) OS - если я не путаю: Sun Solaris. Но:
- в качестве альтернативного из 2-х, 2-м является наследование приоритетов;
- by default является наследование приоритетов;
- ... об этом, 1-м - достаточно много оговорок в документации, что ... "что-то с ним не того" и могут быть сюрпризы.
Наверх
Draggan Смотреть выпадающим
Участник
Участник


Присоединился: 31 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - Draggan Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 14:59
Еще кое что, по поводу RMS, раз это интересует.
В журнале RealTime Magazine была статья
J. Zalewski, What Every Engineer Needs to Know About Rate-Monotonic Scheduling: A Tutorial, Real-Time Magazine, S. 6-24, 1/ 1995
В которой меньше математики но больше практических рекомендаций. :) Нашел я ее здесь
http://www-md.e-technik.uni-rostock.de/ma/gol/ebsys.htm
не пугайтесь не английскому языку страницы, ссылку на статью там найти легко. Даю специально всю страницу, т.к. для себя там нашел еще кое что интерестное :)
Draggan
Kharkov, QNX Seminars
Наверх
evgen Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 178
Свойства публикации Свойства публикации   Ответить, цитируя автора - evgen Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 15:13
Первоначально опубликовано Olej


Но я там столько исписал, и ... "на пальцах", и мимикой - уже столько рассказал в самых деталях, что воспроизвести это, если совсем невмоготу - дело плёвое...

Воспроизвести-то дело плевое, но договорится потом об адекватности полученных результатов....
SY,
EK
Наверх
Draggan Смотреть выпадающим
Участник
Участник


Присоединился: 31 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - Draggan Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 15:19
To: evgen
Ну суть проблемы инверсии приоритетов вы наверное знаете, она хорошо описана в знакомой вам статье Сергея Сорокина в журнале СТА. Примерно также, если опустить лирические отступления о паровом катке и числе Пи описал эту проблему Олег, и если Вы считаете ее не серьезной, то Вы сильно заблуждаетесь. Такое отношение погубило реал тайм расширения тогоже, так нелюбимого вами NT. Это проблема, практически на поддающаяся тестированию и исходники в ее понимании Вам ничем не помогут. Фактически все сводится к следующему. Для защиты данных от совместного изменения и искажения их надо блокировать. Если поток, заблокировавший данные вытеснен более приоритетным, данные так и остаются заблокированными. Это в свою очередь, блокирует высокоприоритетный поток нуждающийся в доступе к этим данным. Ну а если управление после этого не возвращается к низкоприоритетномк потоку, дабы он отпустил заблокированный ресурс имеем большую проблему.
Фактически все упирается в механизм блокировки данных (ресурса). В этом контексте термин наследование приоритета конечно идиотский. Он только все путает и ничего не разясняет. Кто наследует, от кого и главное зачем?
На практике же обстоит все следующим образом. При блокировании высокоприоритетного потока на доступе к некоторому блокированному ресурсу перед системой ставиться задача разблокирования этого ресурса и выполнения высокоприоритетного потока (deadline то приближается). Но как это сделать не потеряв данных? Просто вырвать из цепких лапок ресурс у низкоприоритетного потока нельзя. Значит он должен доделать максимально быстро свои дела, отпустить ресурс, после чего его можно спокойно задавить и пустить высокоприоритетный поток. А чтобы этому процессу никто не помешал для этого низкоприоритетному потоку надо дать (на время критической секции) высокий приоритет. ТАк что в какой-то степени некое странное наследование приоритета присутствует но в какой-то извращенной форме.
Вообще, по моему, термины, образованные из подстрочного перевода с английского это какой-то саботаж.
Ну думаю я ничего не напутал.
Как я уже писал это не единственный метод борьбы с инверсией, хотя возможно на сей день смый проверенный. Или я чего не знаю (опасное это слово - самый).
Но наследование тем не менее, не решает всех проблем инверсии, описанный мной случай с несколькими потоками и блокировками - это опасность о которой надо помнить и в ОС где есть наследование приоритетов, а опоздание в вашей системе приведет не к тому, что очередь возле банкомата соберется, а к тому что паровой каток взорвется :)
Draggan
Kharkov, QNX Seminars
Наверх
Olej Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 14 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 267
Свойства публикации Свойства публикации   Ответить, цитируя автора - Olej Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 15:33
Первоначально опубликовано Olej

Но я там столько исписал, и ... "на пальцах", и мимикой - уже столько рассказал в самых деталях, что воспроизвести это, если совсем невмоготу - дело плёвое...


to ALL - кого это может заинтересовать:
- как понять что там выведено?
- есть 3 потока: "0", "1", "2" их приоритеты "0" < "1" < "2", и время запуска "0" < "1" < "2" с малым запаздыванием.
- "0" и "2" - могут блокироваться на объекте синхронизацмм...
- каждый 10 раз выводит свой идентификатор, чтобы видеть динамику...

Тогда вывод:
222222222211111111110000000000 - показывает "естественный" порядок выполнения согласно приоритетам.
111111111100000000002222222222 - показывает инверсию: самый приоритетный поток 2 ждёт всех.
000000000022222222221111111111 - показывает наследование: низкоприоритетный поток "0" получает ("за то", что он захватил ресурс "2") динамически приоритет "2", оттесняет "1", проскакивает и освобождает критический ресурс для "2".
Наверх
Draggan Смотреть выпадающим
Участник
Участник


Присоединился: 31 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - Draggan Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 15:44
Чем мне понравился механизм Priority Ceiling Protocol
так это тем, что в ОС, где нет наследования приоритетов и защиты от инверсии, но приоритет потока можно менять в процессе его исполнения, этот протокол может быть реализован самим разработчиком. И таким образом возможность блокирования ресурса и потока его захватившего более приоритетым потоком, которому самому этот ресурс нужен исключается, хотя это и требует внимания и аккуратности.
Draggan
Kharkov, QNX Seminars
Наверх
Olej Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 14 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 267
Свойства публикации Свойства публикации   Ответить, цитируя автора - Olej Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 15:54
Первоначально опубликовано Draggan

В этом контексте термин наследование приоритета конечно идиотский. Он только все путает и ничего не разясняет. Кто наследует, от кого и главное зачем?

Нет, IMHO, здесь дело с терминологией гораздо лучше, чем с "реальное время":

"инверсия приоритетов" - такой, нейтральный (не подсказывающий механизмов "почему это призошло"), термин, описывающий виденье со стороны потребителя: есть несколько потоков, я должен ожидать, что активизируется N-й, c наивысшим приоритетом, а активизировался... M-й, который, может, даже не 2-й сверху...

"наследование приоритетов" - тоже очень точно, в OS c обменом сообщениями (клиент-серверными) - он на 100% соответствует происходяшему:
- клиент, запрашивая системный вызов, отправляет сообщение;
- сервис, осуществляющий вызов, получив сообщение, выполняет его на приоритете запросившего клиента (наследует).

В моноядерных OS (которых большинство), тоже соответствует:
- поток захватил pthread_mutex_lock мютекс (или condvar, или...);
- примечательная особенность мютекс - что он имеет "владельца" (захватившего его), что принципиально отличается, например, для семафора (но это - уже другая песня)...
- т.е. пара захваченный мютекст - его владелец - это неделимая связь, и выполняется под приоритетом владельца...
- если на мютексе в это время блокируется (pthread_mutex_lock) более приоритетный поток, то мютекс наследует (и его текущий владелец) этот новый приоритет (ожидающего в очереди), и владелец далее выполняется под наследованым приоритетом...
- после освобождения мютекса (pthread_mutex_unlock), поток его владельца разрывает связь мютекс-поток, и возвращается к исполнению на своём статическом приоритете.

По-моему, термин очень точно описывает картину происходящего, другой, точнее, и не придумаешь.
Наверх
evgen Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Сентябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 178
Свойства публикации Свойства публикации   Ответить, цитируя автора - evgen Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 16:19
Первоначально опубликовано Draggan

а опоздание в вашей системе приведет не к тому, что очередь возле банкомата соберется, а к тому что паровой каток взорвется :)


В нашей системе чтоб не взорвалось согласно уставу, ГОСТам и здравому смыслу есть предохранительные клапана, плавкие предохранители и БОЛЬШАЯ КРАСНАЯ КНОПКА.

ЗЫ: остальное будем читать внимательнее в более спокойной обстановке.
SY,
EK
Наверх
Draggan Смотреть выпадающим
Участник
Участник


Присоединился: 31 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - Draggan Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 25 Ноябрь 2003 16:56
Olej, по поводу мютексов согласен. Но вот если вы просто говорите, что в такой-то системе инверсия приоритетов решена методом их наследования, то первое, что приходит в голову, это переход приоритета непосредственно от потока к потоку. В принципе так и происходи, посредством объекта синхронизации и системы. Но это далеко не прозрачно, о чем я и сказал.
Draggan
Kharkov, QNX Seminars
Наверх
 Ответить Ответить Страница  <1 2728293031 36>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz