Страниц: [1]
  Печать  
Автор Тема: Политика планирования потоков  (Прочитано 5068 раз)
Trendar
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« : Января 09, 2011, 07:47:48 pm »

Добрый день!

Может кто подскажет, как на практике работает политика планирования RR и FIFO?

Допустим у нас есть 2 потока, имеющие равные приоритеты.
Первый поток настроен на политику планирования FIFO.
Второй поток настроен на политику планирования RR.
Также есть переменная N = 0, доступная обоим потокам.

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

Какой будет значение переменно N, скажем через 10 тактов цикла?

-------

Мои мысли: так как у первого потока политика FIFO - то получив процессор, он не отдаст его пока не завершится. Таким образом лишь он будет работать с переменной N и через 10 тактов значение ее будет равно 10.
Записан
ob1
Hero Member
*****
Offline Offline

Сообщений: 629


What has two thumbs up and doesn't give a crap?


Просмотр профиля WWW
« Ответ #1 : Января 09, 2011, 09:02:21 pm »

У меня другой вопрос, который у меня возникает постоянно, когда я смотрю на вопросы подобные этому -- кто мешает проверить самостоятельно?
Записан
@nger
Гость
« Ответ #2 : Января 09, 2011, 09:09:57 pm »

Вызываются потоки один за другим (можно сказать одновременно).

Нельзя

Первый поток в цикле увеличивает на 1 значение переменной N, второй поток уменьшает на 1 значение переменной N.

Какой будет значение переменно N, скажем через 10 тактов цикла?

Более состоятельным я вижу тест с различными переменными для потоков

-------

Мои мысли: так как у первого потока политика FIFO - то получив процессор, он не отдаст его пока не завершится. Таким образом лишь он будет работать с переменной N и через 10 тактов значение ее будет равно 10.

Т.к. потоки запускаются не одновременно, то ее значение может быть и 9
Записан
Trendar
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #3 : Января 09, 2011, 09:29:03 pm »

То есть логика верная.

Поток с политикой планирования FIFO, получив доступ к переменной будет с ней работать до конца, если только добровольно не отдаст управление потоку с политикой RR.

А поток с политикой RR, получив доступ к переменной (если FIFO поток небыл еще запущен), сразу же отдаст доступ запустившемуся потоку FIFO.

Записан
@nger
Гость
« Ответ #4 : Января 09, 2011, 09:38:04 pm »

Поток с политикой планирования FIFO, получив доступ к переменной будет с ней работать до конца, если только добровольно не отдаст управление потоку с политикой RR.

Совсем не обязательно, что добровольно =)

А поток с политикой RR, получив доступ к переменной (если FIFO поток небыл еще запущен), сразу же отдаст доступ запустившемуся потоку FIFO.

Не сразу, а по истечении кванта времени. Т.е. значени N будет декрементироваться много раз.
« Последнее редактирование: Января 09, 2011, 09:39:38 pm от @nger » Записан
Trendar
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #5 : Января 09, 2011, 09:55:58 pm »

Благодарю за ответы)
Записан
oder
Гость
« Ответ #6 : Января 10, 2011, 12:47:59 am »

FIFO работает до тех пор, пока
1) не вызовет функцию ядра, которая по тем или иным причинам заблокирует дальнейшее исполнение и переведёт поток на ожидание;
2) или по прерыванию не станет готовым к выполнению поток с высшим приоритетом.
Во втором случае после выполнения потока с высшим приоритетом управление вернётся уже к следующему потоку (тоесть, RR).

RR работает до тех пор, пока
1) то же самое, что и для FIFO;
2) или по прерыванию не станет готовым к выполнению поток с высшим приоритетом;
3) или по прерыванию таймера ядро не решит, что поток RR уже "достаточно наисполнялся" и отдаст управление следующему потоку того же приоритета (тоесть, FIFO).

Всё это при условии, что процессор один и других потоков данного приоритета нет, конечно же.

Понятно?
Записан
oder
Гость
« Ответ #7 : Января 10, 2011, 01:32:16 am »

Хотя это, конечно, вопрос: перебрасывается ли поток с политикой FIFO в конец очереди при вытеснении потоком высшего приоритета. В документации об этом ничего не сказано. :-/
Записан
Страниц: [1]
  Печать  
 
Перейти в: