Перейти к содержанию
    

Доброго времени суток господа!

Вот уже неделю, как изучаю сабжевую систему, а к пониманию не приблизился.

Нет, конечно прикладной софт на нее я уже писать смогу, но без понимания философии системы это дурное дело.

Вот приблизительный список нескладух:

1.Переключение задач или вытесняющее или раунд-робин. Если есть вытеснение, зачем карусель?

2.Отсутсвует защита памяти, но зато есть управление виртуальной.

3.Изумительные вызовы типа taskLock() и taskSafe(), чтобы если уже залочить задачу навеки, чтобы никто ее не снял и не вытеснил. Это особо интересно в контексте использования этой оси в критических приложениях.

4.Собственные вызовы типа taskSpawn() перемежаются со стандартными POSIX, тоже самое с объектами синхронизации.

 

Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая.

Кто-то может объяснить в чем тут дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1.Переключение задач или вытесняющее или раунд-робин. Если есть вытеснение, зачем карусель?

2.Отсутсвует защита памяти, но зато есть управление виртуальной.

1. А возможно такое - вытеснение по приоритетам, а если задачи на одном приоритете, то между ними карусель?

2. А не наоборот? Т.е. единое адресное пространство, но с возможностью защиты задач друг от друга.

(просто интересно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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? Софтварные защиты весьма условны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно и так, но тогда зачем эту карусель включать-выключать?

Выключать, чтоб задачи сами контролировали когда отдавать управление, или через Time Slicing (если такое есть).

 

In VxWorks, ..., which is available only with the optional product VxVMI;

А как еще защитить, если не на уровне MMU? Софтварные защиты весьма условны.

Ясно, ключевое слово "optional product VxVMI" - не знал про такой.

А некоторые микроконтроллеры не имеют аппаратных блоков MMU, зато имеют что-то типа memory overlay control (как например в моем "любимом" Tricore).

 

А такая просьба - скинте куда-нить доки на VxWorks (это вроде не секрет) - давно хотел посмотреть - что это за система.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выключать, чтоб задачи сами контролировали когда отдавать управление, или через Time Slicing (если такое есть).

Есть-есть. Только чем Time Slicing лучше чем преэптивность?.

зато имеют что-то типа memory overlay control (как например в моем "любимом" Tricore).

А с этого места подробней плз.

 

З.Ы.

доки здесь:

http://www.slac.stanford.edu/exp/glast/fli.../vxworks/guide/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая.

Кто-то может объяснить в чем тут дело?

 

Насколько понимаю, следует разделять ранние версии, до 6, и поздние. Первые действиетельно вызывали очень много нареканий. Последнии стали, вроде как, надежнее, но за такие деньги экспериментируют только если очень надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть-есть. Только чем 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 там немного для других целей)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Preemption - вытеснение низкоприоритетной задачи когда появляется высокоприоритетная.

Round-robin - между задачами _одного_ приоритета.

Это я понимаю.

Но Р-Р, является включаемой опцией. Причем как я понял программной. Т.е. предполагается, что м.б. ситуация, когда задачи одного приоритета разруливаются, только по доброй воле программиста. Т.е. пока явно не сделан exit()/sleep()/suspend().В сочетаниии с taskLock() складываеться интересная ситуация - управление переключением отдано на откуп именно прикладному программисту. Мне всегда казалось, что одно из ключевых преимуществ ОС - автоматизация переключения задач, и обеспечение общей устойчивости системы при сбое одной из задач.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Round-robin - вещь, в общем-то, ненужная. А почему сделана? Потому что - у всех есть,

а у нас в системе нет??? Конкуренты будут заявлять: "А у них нет Round-robin !!!" Вот и сделали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я понимаю.

Но Р-Р, является включаемой опцией. Причем как я понял программной. Т.е. предполагается, что м.б. ситуация, когда задачи одного приоритета разруливаются, только по доброй воле программиста. Т.е. пока явно не сделан exit()/sleep()/suspend().

 

...это нормальная ситуация для любой ОС. Time slicing поэтому и придумали.

 

В сочетаниии с taskLock() складываеться интересная ситуация - управление переключением отдано на откуп именно прикладному программисту. Мне всегда казалось, что одно из ключевых преимуществ ОС - автоматизация переключения задач, и обеспечение общей устойчивости системы при сбое одной из задач.

 

...taskLock() отнюдь не способ управления переключением с целью переключения, а способ сохранения целостности данных

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Round-robin - вещь необходимейшая.

Приоритетной схемой можно обойтись только при малом количестве задач и несложном их администрировании.

Где есть WEB сервер, множественный доступ, многоканальное обслуживание и т.д. без Round-Robin, а вернее схемы равноприоритетного обслуживания задач выкрутится нельзя.

 

 

Round-robin - вещь, в общем-то, ненужная. А почему сделана? Потому что - у всех есть,

а у нас в системе нет??? Конкуренты будут заявлять: "А у них нет Round-robin !!!" Вот и сделали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте определимся с терминологией.

 

Round-robin - это когда задачи преключаются по таймеру, т.е работала себе задача и вдруг - сработал некий глобальный системный таймер и задача снята с исполнения - не потому, что ждет семафор или появления нового элемента в очереди и т.п. и не потому, что после прерывания задача с более высоким приоритетом стала активной, а просто потому, что истекло время, отведенное данной задаче на работу.

 

Так вот, такой механизм в real-time системах не нужен и, более того - вреден.

 

Если же нужно множество задач с одинаковым приоритетом - то нужно просто создать множество threads(tasks) c одинаковым приоритетом (но это не Round-robin !!!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если же нужно множество задач с одинаковым приоритетом - то нужно просто создать множество threads(tasks) c одинаковым приоритетом (но это не Round-robin !!!)

??? ничего не понял, поясните плиз, и как их переключать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

??? ничего не понял, поясните плиз, и как их переключать?

А чего непонятного? задача конечно может работать сама по себе, но обычно она чего-то получает снаружи и чего-то наружу отдает. А это вызов сервисов с ожиданием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Преемптивность - это, как сказали, вытеснение текущей задачи как только появится высокоприоритетная задача. Маст хэв при нескольких приоритетах.

 

RR - это когда задачи одного приоритета по очереди поступают на выполнение, т.е. если порядок определен как 1-2-3, то после первой задачи всегда будет запускаться №2.

 

Переключение задач в RR может осуществляться как явно программистом (засыпание, ожидание, явный перешедулинг), так и самой системой с помощью TimeSlicing, когда задачам выдается квант времени, по истечении которого она вытеснится независимо от программиста.

TimeSlicing появился во времена, когда пользователи с помощью терминалов подключались к мейнфрейму и запускали свои расчеты. Т.о., каждому пользователю казалось, что он один работает с мейнфреймом (хотя и более медленным чем на самом деле).

Однако, если задача не вычислительная, а событийная (т.е. ждет событие - реагирует на него - опять впадает в ожидание), TimeSlicing усложняет жизнь, ага :)

 

...

3.Изумительные вызовы типа taskLock() и taskSafe(), чтобы если уже залочить задачу навеки, чтобы никто ее не снял и не вытеснил. Это особо интересно в контексте использования этой оси в критических приложениях.

4.Собственные вызовы типа taskSpawn() перемежаются со стандартными POSIX, тоже самое с объектами синхронизации.

 

Вобщем выглядит это похоже на ранние поделки Мелкософт. Но ведь система сертифицирована как супер-пупер надежная и устойчивая.

Кто-то может объяснить в чем тут дело?

3. Эти вызовы требуются, например, когда нужно жестко уложиться во временные рамки (т.е. сформировать временную диаграмму для работы с железом), т.к. иногда нет возможности сделать такую задачу высокоприоритетной. В основном, это следствие "кривого" железа :)

Другой пример - синхронизация с более высокоприоритетной задачей, т.к. мьютекс потяжеловесней и может привести к лишним переключениям задач. Использовать нужно "с головой" и на очень короткий срок (понимая, что задержка на переключение более приоритетной задачи увеличится на некоторую известную величину).

 

4. Типичный бардак, обусловленный повышением производительности. POSIX вызовы - это, скорее всего, обертки для нейтивных функций, поэтому когда можно использовать нейтив вызовы - их и используют. Еще можно покурить доку на предмет их отличий :)

 

А вообще, ОС не может быть супер-пупер надежной и устойчивой, т.к. эти характеристики больше зависят от программиста. В лучшем случае, система не будет мешать программисту и отвлекать его своими "багами" и "фичами". Так что к заявлениям маркетологов нужно относиться как к заявлениям маркетологов :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...