|
VxWorks, пофлудим немного... |
|
|
|
Jan 23 2008, 12:54
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Доброго времени суток господа! Вот уже неделю, как изучаю сабжевую систему, а к пониманию не приблизился. Нет, конечно прикладной софт на нее я уже писать смогу, но без понимания философии системы это дурное дело. Вот приблизительный список нескладух: 1.Переключение задач или вытесняющее или раунд-робин. Если есть вытеснение, зачем карусель? 2.Отсутсвует защита памяти, но зато есть управление виртуальной. 3.Изумительные вызовы типа taskLock() и taskSafe(), чтобы если уже залочить задачу навеки, чтобы никто ее не снял и не вытеснил. Это особо интересно в контексте использования этой оси в критических приложениях. 4.Собственные вызовы типа taskSpawn() перемежаются со стандартными POSIX, тоже самое с объектами синхронизации.
Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая. Кто-то может объяснить в чем тут дело?
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jan 23 2008, 15:22
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(beer_warrior @ Jan 23 2008, 15:54)  1.Переключение задач или вытесняющее или раунд-робин. Если есть вытеснение, зачем карусель? 2.Отсутсвует защита памяти, но зато есть управление виртуальной. 1. А возможно такое - вытеснение по приоритетам, а если задачи на одном приоритете, то между ними карусель? 2. А не наоборот? Т.е. единое адресное пространство, но с возможностью защиты задач друг от друга. (просто интересно)
|
|
|
|
|
Jan 23 2008, 15:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата 1. А возможно такое - вытеснение по приоритетам, а если задачи на одном приоритете, то между ними карусель? Возможно и так, но тогда зачем эту карусель включать-выключать? Цитата 2. А не наоборот? Т.е. единое адресное пространство, но с возможностью защиты задач друг от друга. (просто интересно) In VxWorks, one important resource that is not part of a task's context is memory address space: all code executes in a single common address space. Giving each task its own memory space requires virtual-to-physical memory mapping, which is available only with the optional product VxVMI; А как еще защитить, если не на уровне MMU? Софтварные защиты весьма условны.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jan 23 2008, 15:45
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(beer_warrior @ Jan 23 2008, 18:31)  Возможно и так, но тогда зачем эту карусель включать-выключать? Выключать, чтоб задачи сами контролировали когда отдавать управление, или через Time Slicing (если такое есть). Цитата In VxWorks, ..., which is available only with the optional product VxVMI; А как еще защитить, если не на уровне MMU? Софтварные защиты весьма условны. Ясно, ключевое слово "optional product VxVMI" - не знал про такой. А некоторые микроконтроллеры не имеют аппаратных блоков MMU, зато имеют что-то типа memory overlay control (как например в моем "любимом" Tricore). А такая просьба - скинте куда-нить доки на VxWorks (это вроде не секрет) - давно хотел посмотреть - что это за система.
|
|
|
|
|
Jan 23 2008, 16:15
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Выключать, чтоб задачи сами контролировали когда отдавать управление, или через Time Slicing (если такое есть). Есть-есть. Только чем Time Slicing лучше чем преэптивность?. Цитата зато имеют что-то типа memory overlay control (как например в моем "любимом" Tricore). А с этого места подробней плз. З.Ы. доки здесь: http://www.slac.stanford.edu/exp/glast/fli.../vxworks/guide/
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jan 24 2008, 09:10
|

Участник

Группа: Участник
Сообщений: 49
Регистрация: 3-02-05
Пользователь №: 2 390

|
Цитата(beer_warrior @ Jan 23 2008, 15:54)  Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая. Кто-то может объяснить в чем тут дело? Насколько понимаю, следует разделять ранние версии, до 6, и поздние. Первые действиетельно вызывали очень много нареканий. Последнии стали, вроде как, надежнее, но за такие деньги экспериментируют только если очень надо.
|
|
|
|
|
Jan 24 2008, 10:54
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(beer_warrior @ Jan 23 2008, 19:15)  Есть-есть. Только чем Time Slicing лучше чем преэптивность? Preemption - вытеснение низкоприоритетной задачи когда появляется высокоприоритетная. Round-robin - между задачами _одного_ приоритета. Time Slicing - также между задачами _одного_ приоритета (альтернатива Round-robin) - максимальное кол-во тиков, пока может выполнятся задача, перед тем как задача с _таким же_ приоритетом получит управление (для каждой задачи задается отдельно). (это я написал вспоминая Nuсlеus, но, похоже, с Vx они близнецы-братья) Цитата А с этого места подробней плз. А какие тут подробности? Нет MMU, есть просто регистры в которых можно прописать границы, за которые программа не имет права вылезать при обращении к памяти, а границы эти менять в ядре при переключении задач. "The TC1775 memory protection system specifies the addressable range and read/write permissions of memory segments available to the currently executing task. The memory protection system controls the position and range of addressable segments in memory. It also controls the kinds of read and write operations allowed within addressable memory segments. Any illegal memory access is detected by the memory protection hardware, which then invokes the appropriate Trap Service Routine (TSR) to handle the error." (в прошлый раз чуть промахнулся - не "memory overlay", а "memory protection". memory overlay там немного для других целей)
|
|
|
|
|
Jan 24 2008, 12:32
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Preemption - вытеснение низкоприоритетной задачи когда появляется высокоприоритетная. Round-robin - между задачами _одного_ приоритета. Это я понимаю. Но Р-Р, является включаемой опцией. Причем как я понял программной. Т.е. предполагается, что м.б. ситуация, когда задачи одного приоритета разруливаются, только по доброй воле программиста. Т.е. пока явно не сделан exit()/sleep()/suspend().В сочетаниии с taskLock() складываеться интересная ситуация - управление переключением отдано на откуп именно прикладному программисту. Мне всегда казалось, что одно из ключевых преимуществ ОС - автоматизация переключения задач, и обеспечение общей устойчивости системы при сбое одной из задач.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jan 31 2008, 07:19
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561

|
Цитата(beer_warrior @ Jan 24 2008, 15:32)  Это я понимаю. Но Р-Р, является включаемой опцией. Причем как я понял программной. Т.е. предполагается, что м.б. ситуация, когда задачи одного приоритета разруливаются, только по доброй воле программиста. Т.е. пока явно не сделан exit()/sleep()/suspend(). ...это нормальная ситуация для любой ОС. Time slicing поэтому и придумали. Цитата(beer_warrior @ Jan 24 2008, 15:32)  В сочетаниии с taskLock() складываеться интересная ситуация - управление переключением отдано на откуп именно прикладному программисту. Мне всегда казалось, что одно из ключевых преимуществ ОС - автоматизация переключения задач, и обеспечение общей устойчивости системы при сбое одной из задач. ...taskLock() отнюдь не способ управления переключением с целью переключения, а способ сохранения целостности данных
|
|
|
|
|
Feb 2 2008, 21:04
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(yuri_t @ Feb 2 2008, 21:10)  Если же нужно множество задач с одинаковым приоритетом - то нужно просто создать множество threads(tasks) c одинаковым приоритетом (но это не Round-robin !!!) ??? ничего не понял, поясните плиз, и как их переключать?
|
|
|
|
|
Feb 3 2008, 11:36
|
Частый гость
 
Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803

|
Преемптивность - это, как сказали, вытеснение текущей задачи как только появится высокоприоритетная задача. Маст хэв при нескольких приоритетах. RR - это когда задачи одного приоритета по очереди поступают на выполнение, т.е. если порядок определен как 1-2-3, то после первой задачи всегда будет запускаться №2. Переключение задач в RR может осуществляться как явно программистом (засыпание, ожидание, явный перешедулинг), так и самой системой с помощью TimeSlicing, когда задачам выдается квант времени, по истечении которого она вытеснится независимо от программиста. TimeSlicing появился во времена, когда пользователи с помощью терминалов подключались к мейнфрейму и запускали свои расчеты. Т.о., каждому пользователю казалось, что он один работает с мейнфреймом (хотя и более медленным чем на самом деле). Однако, если задача не вычислительная, а событийная (т.е. ждет событие - реагирует на него - опять впадает в ожидание), TimeSlicing усложняет жизнь, ага  Цитата(beer_warrior @ Jan 23 2008, 15:54)  ... 3.Изумительные вызовы типа taskLock() и taskSafe(), чтобы если уже залочить задачу навеки, чтобы никто ее не снял и не вытеснил. Это особо интересно в контексте использования этой оси в критических приложениях. 4.Собственные вызовы типа taskSpawn() перемежаются со стандартными POSIX, тоже самое с объектами синхронизации.
Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая. Кто-то может объяснить в чем тут дело? 3. Эти вызовы требуются, например, когда нужно жестко уложиться во временные рамки (т.е. сформировать временную диаграмму для работы с железом), т.к. иногда нет возможности сделать такую задачу высокоприоритетной. В основном, это следствие "кривого" железа  Другой пример - синхронизация с более высокоприоритетной задачей, т.к. мьютекс потяжеловесней и может привести к лишним переключениям задач. Использовать нужно "с головой" и на очень короткий срок (понимая, что задержка на переключение более приоритетной задачи увеличится на некоторую известную величину). 4. Типичный бардак, обусловленный повышением производительности. POSIX вызовы - это, скорее всего, обертки для нейтивных функций, поэтому когда можно использовать нейтив вызовы - их и используют. Еще можно покурить доку на предмет их отличий  А вообще, ОС не может быть супер-пупер надежной и устойчивой, т.к. эти характеристики больше зависят от программиста. В лучшем случае, система не будет мешать программисту и отвлекать его своими "багами" и "фичами". Так что к заявлениям маркетологов нужно относиться как к заявлениям маркетологов
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|