OSDev

для всех
Текущее время: 28 апр 2024, 23:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 102 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11
Автор Сообщение
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 17 авг 2011, 16:37 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
418ImATeapot писал(а):
Да, смешивает. Приоритет в данном случае указывает на шансы данного потока попасть в очередь.
Плохо поддающаяся анализу схема. В очередь могут попасть далеко не все высокоприоритетные потоки и наоборот менее приоритетные потоки могут начать серьезную конкуренцию с более приоритетными, особенно если первых много, а последних мало.

Цитата:
(время простоя << приоритет)
Не понял.

Цитата:
Пусть "пустое место" будет "бездействие системы".
Соответственно, чтобы удалить поток из очереди свитчера, достаточно заменить его "дескриптор" на "дескриптор" "бездействие системы".
В смысле "бездействие"? Потоки в очереди есть, но они не всегда располагаются в смежных элементах статической очереди. Чтобы найти действительно поток, а не "пустое место" ("держатель места"), ты должен циклически выполнять обход очереди в поисках элемента, у которого установлен флаг готовности, ну или делать что-то типа этого. Это чисто рабочий момент, показывающий, что статическая структура для очереди выполнения не слишком-то подходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 05 сен 2011, 16:43 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
*******************************************************************
Пока есть время, сел переделывать.
На бумажке все расписал.
Получилось как-то так:

Основные компоненты системы планирования: GenerateEvent, планировщик, переключатель.
Объекты системы планирования: событие, работа и поток.

Событие - это вызов системной функции GenerateEvent (возможно, имеет смысл "спрятать" эту функцию внутрь ядра).

Работа - это обработчик события.
Работы могут быть четырех приоритетов: Real Time, Interactive, Normal, Blocker.

При вызове GenerateEvent просматривает списки работ, ищет нужные и запускает их.
Если запускаемая работа - Normal, GenerateEvent просто создает дескриптор потока, соответствующий этой работе.
Если запускаемая работа - Interactive, GenerateEven создает дескриптор потока и запускает этот поток.
Если запускаемая работа - Real Time, GenerateEvent останавливает квантовый таймер и запускает поток.
Если запускаемая работа - Blocker, GenerateEvent создает дескриптор потока, соответствующий этой работе и блокирует все остальные потоки и работы процесса.

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

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

Фуф...

Пожалуйста, ткните носом!

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 102 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB