реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> VxWorks, пофлудим немного...
AlexandrY
сообщение Feb 4 2008, 13:15
Сообщение #16


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Я считаю, что это неправильное определение.

Round-Robin это просто циклическое выполнение задач с одинаковым приоритетом. Если задача получила время на выполнение, то после завершения следующая ее заявка становится в конец очереди. Таймера здесь не причем.

И вот такой способ выполнения очень важен.
О том какие проблемы может вызвать чиcтое приоритетное выпонение читать здесь:
http://www.rtos.com/page/imgpage.php?id=210

Из жизни приведу простой сценарий:

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

И спецы из Express Logic правильно говорят, что в этой ситуации вы получите солидную деградацию производительности из-за лишних переключений контекста.
И выход в осях не имеющих фичи "Preemption-Threshold" это довольствоваться Round Robin

Цитата(yuri_t @ Feb 2 2008, 22:40) *
Давайте определимся с терминологией.

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

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

Если же нужно множество задач с одинаковым приоритетом - то нужно просто создать множество threads(tasks) c одинаковым приоритетом (но это не Round-robin !!!)
Go to the top of the page
 
+Quote Post
tag
сообщение Feb 4 2008, 13:39
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(AlexandrY @ Feb 4 2008, 16:15) *
Round-Robin это просто циклическое выполнение задач с одинаковым приоритетом.


...на самом деле это просто циклическое выполнение задач. Понятие приоритета в данном случае не вводится. Задача получает управление если истек квант времени предыдущей задачи в списке, либо предыдущая задача сама вернула управление с помощью системного вызова.


Цитата(AlexandrY @ Feb 4 2008, 16:15) *
Понятно что выбрать оптимальную стратегию назначения приоритетов здесь практически невозможно.


...ее и не надо выбирать. Создаются задачи равного приоритета и включается механизм Time slicing
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Feb 4 2008, 18:18
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Вот, например, цитата из VxWorks 5.5 Programmer’s Guide (Part #: DOC-14617-ZD-00)


Round-Robin Scheduling

A round-robin scheduling algorithm attempts to share the CPU fairly among all
ready tasks of the same priority. Round-robin scheduling uses time slicing
to achieve fair allocation of the CPU to all tasks with the same priority. Each task, in a group
of tasks with the same priority, executes for a defined interval or time slice.
Round-robin scheduling is enabled by calling kernelTimeSlice( ), which takes a
parameter for a time slice, or interval. This interval is the amount of time each task
is allowed to run before relinquishing the processor to another equal-priority task.
Thus, the tasks rotate, each executing for an equal interval of time. No task gets a
second slice of time before all other tasks in the priority group have been allowed
to run.
In most systems, it is not necessary to enable round-robin scheduling, the
exception being when multiple copies of the same code are to be run, such as in a
user interface task.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 22:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016