2014-01-24 4 views
1

У меня есть проект о «имитации планировщика потоков с помощью pthread».pthread scheduling

Я нашел несколько проблем:
1. Is жизненный цикл нити такой же, как линукс нить lifecyle?
2. На каком этапе кода выполняется планирование (в pthreads), нужен пример.
3. Могу ли я реализовать свой собственный алгоритм планирования, или я должен использовать явное планирование pthreads like (set_sched_param, ...)?
4. Есть ли способ отслеживать планирование процессов (графически) с помощью C?

+0

A2: планирование происходит во время процедуры обслуживания прерывания таймера. Помимо всего прочего, система оценивает, сколько времени выполнения текущего потока было получено, чтобы определить, превысило ли оно его допустимое время выполнения, и, если это так, другой поток занимает свое место (_if_ другой поток готов к запуску). – mah

+0

... так что в других словах планирование происходит на уровне * kernel *, и все, что вы делаете, находится в пользовательском пространстве. – Brad

+0

Планирование @mah 'происходит во время процедуры обслуживания прерывания таймера'. Как насчет всех других десятков аппаратных и программных источников прерываний, которые могут запросить запуск планировщика? –

ответ

1

Я предполагаю, что то, что вам нужно, имитирует планировщик для некоторой ОС, используя pthreads в качестве основы для вашей реализации. Что вы можете сделать, так это создать pthread для каждого смоделированного потока и поставить неявное ожидание переменной условия в каждой из примитивов для потоковой передачи вашей ОС. Затем вы можете выбрать, какую переменную условия сигнализировать, решить, какой поток будет запускаться, когда. Я замалчиваю детали (спросите, хотите ли вы получить дополнительную информацию), но это довольно просто.

+0

Благодарим вас за этот ответ, но я хочу узнать больше или попробовать код. Это будет ключом моей работы. Что относительно явного планирования в pthread? (С sched.h). Итак, у нас есть 2 решения: 1/condition variables 2/pthread exmplicit scheduling, похоже ли это? – sfaxiano

+0

Да, это разные решения. Вы можете получить более высокую производительность, используя явное планирование, но более точный контроль с помощью ручного планирования с использованием CV и т. Д. Я посмотрю, могу ли я написать пример кода и ссылку здесь. –

+0

Большое спасибо, я жду :) – sfaxiano