OSDev

для всех
Текущее время: 22 июл 2019, 13:24

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




Начать новую тему Ответить на тему  [ Сообщений: 102 ]  На страницу 1, 2, 3, 4, 5 ... 11  След.
Автор Сообщение
 Заголовок сообщения: Планировщик
СообщениеДобавлено: 05 июл 2011, 15:10 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Я сейчас написал планировщик. Написал и задумался.
По-первых - а программам что-нибудь останется? Там не самые быстрые команды. Скажите пожалуйста, сколько у вас планировщик весит?
Во-вторых - можно его сейчас отладить? Можно ли в QEMU запихать по нужному адресу "сырой" бинарник и вручную перевести в PM? Или надо написать также загрузчик?

_________________
Found a CPU. LAPIC ID: 00


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

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1382
У меня планировщик в данный момент находится в зачаточном состоянии (правда, другой пока и не нужен) и состоит из нескольких подпрограмм:

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

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

Суммарный объём -- 30-40 команд ассемблера ARM, точнее считать лениво.

АДД: Тоже посмотрел на свой планировщик; понял, что его писал полный идиот, и сократил до двух подпрограмм и 23 ассемблерных команд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 05 июл 2011, 18:12 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
418ImATeapot писал(а):
Я сейчас написал планировщик. Написал и задумался.
По-первых - а программам что-нибудь останется? Там не самые быстрые команды. Скажите пожалуйста, сколько у вас планировщик весит?
Время переключения должно быть несравнимо меньше минимального кванта времени непрерывной работы потока. Размер кванта также может быть увязан с производительностью процессора. При малейшей возможности нужно обходить выполнение тяжеловесных операций, например, при поток-ориентированном планировании перегружать каталог страниц только, в том случае, если активируется поток другого процесса, пытаться группировать потоки одного процесса и т.п. Основными элементами планирования являются операции переключения на следующий готовый к выполнению поток, вывод из ожидания, а также динамическое изменение приоритета выполнения (также способное привести к автоматическому переключению контекста). Даже при сложном строении очереди выполнения (например, у меня 4-уровневая очередь выполнения в соответствии с 4 приоритетными классами) и других сопутствующих очередей (прежде всего очередей ожидания), на мой взгляд, это не слишком объемные операции.

Цитата:
Во-вторых - можно его сейчас отладить? Можно ли в QEMU запихать по нужному адресу "сырой" бинарник и вручную перевести в PM? Или надо написать также загрузчик?
GRUB?


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

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
За комменты по-поводу размера - спасибо. MUL и LLDT - не слишком тяжело?
phantom-84 писал(а):
Цитата:
Во-вторых - можно его сейчас отладить? Можно ли в QEMU запихать по нужному адресу "сырой" бинарник и вручную перевести в PM? Или надо написать также загрузчик?
GRUB?

Скорее, BOOTCOM под SYSLINUX. Ибо "ядро" не самостоятельно и никогда самостоятельным не станет. Но лучше, все-таки, вручную.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 07 июл 2011, 11:48 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1382
Использовать таблицы дескрипторов категорически не рекомендуется -- механизм кривой и крайне медленный. А умножение выполняется со скоростью сложения, т.е. с максимальной. Ну или, может, в 2-3 раза медленнее, но не в десятки, как деление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 07 июл 2011, 13:57 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
418ImATeapot писал(а):
За комменты по-поводу размера - спасибо. MUL и LLDT - не слишком тяжело?
Я сейчас вообще LDT не использую (при начальной инициализации загружаю NULL в LDTR и все). Когда-то использовал, но тоже как общесистемную (т.е. имела место чистая стилизация и не более того). Как вариант при переключении можно корректировать непосредственно поля "локальных" дескрипторов (которых при нынешних тенденциях в архитектуре должно быть немного - один-два, если они вообще есть). Кстати LLDT не такая уж и сложная операция.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 08 июл 2011, 17:04 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1087
Откуда: Балаково
418ImATeapot писал(а):
Я сейчас написал планировщик. Написал и задумался.
По-первых - а программам что-нибудь останется?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 10 июл 2011, 00:38 

Зарегистрирован: 16 фев 2010, 22:03
Сообщения: 101
ИМХО, следует расчитывать частоту для таймера по которому переключаются задачи исходя из частоты процессора.
А насчёт переключателя:
У меня пока такой: сохраняет в стек 16 числовых значение, ищет следующую задачу для исполнения в связанном кольцевом списке (то есть первую после текущей, которая не приостановлена), меняет каталог страниц, восстанавливает эти 16 значений (15 регистров (x86-64) и одна служебная переменная) и выходит, предварительно послав EOI контроллеру прерываний.

Кстати такой вопрос: где хранить указатель на структуру с описанием текущего процесса и потока? Пока хранюв глобальной переменной, но в случае многоядерности такой подход не подойдёт.


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1087
Откуда: Балаково
KIV писал(а):
Кстати такой вопрос: где хранить указатель на структуру с описанием текущего процесса и потока? Пока хранюв глобальной переменной, но в случае многоядерности такой подход не подойдёт.

У меня структура привязана к ядерному стеку, а стеки расположены массивом.


Последний раз редактировалось Himik 10 июл 2011, 10:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Планировщик
СообщениеДобавлено: 10 июл 2011, 10:06 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
KIV писал(а):
У меня пока такой: сохраняет в стек 16 числовых значение, ищет следующую задачу для исполнения в связанном кольцевом списке (то есть первую после текущей, которая не приостановлена), меняет каталог страниц, восстанавливает эти 16 значений (15 регистров (x86-64) и одна служебная переменная) и выходит, предварительно послав EOI контроллеру прерываний.
Ты что все задачи хранишь в очереди выполнения? Не слишком ли накладно? EOI непосредственно к переключению не относится, кроме того функция переключения может быть вызвана не только по таймеру.

Цитата:
Кстати такой вопрос: где хранить указатель на структуру с описанием текущего процесса и потока? Пока хранюв глобальной переменной, но в случае многоядерности такой подход не подойдёт.
TSS.SP0 - у меня структура потока расположена в вершине ядерного стека этого потока - очень удобно.


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 1


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

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