OSDev

для всех
Текущее время: 17 май 2024, 15:38

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




Начать новую тему Ответить на тему  [ Сообщений: 179 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 18  След.
Автор Сообщение
СообщениеДобавлено: 17 июн 2010, 01:16 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Mr.McD. писал(а):
***Синхронизация скорости потоков***
Решает проблемы: "Проблема производителя и потребителя", повышает производительность системы за счёт выравнивания скоростей.
Создаёт проблемы: Противоречит принципам параллелизма, ???, ???.

Это можно сформулировать как балансировка приоритета с загруженностью.
А касательно принципов параллелизма, то чтобы избежать противоречий, придётся перейти на "задачную" приоритетность - где каждая задача в системе состоит из одного или нескольких потоков. Приоритет изначально назначается пользователем самой задаче, а планировщик по ходу работы распределяет этот приоритет задачи на несколько потоков, входящих в задачу. Некий приоритет (количество или длинну квантов) задачи можно будет распределять и динамически перераспределять внутри задачи по частям, а суммарный приоритет задачи остаётся неизменным. Таким образом, параллельность не нарушается на уровне задач. Например приоритет 10 для группы из 2 потоков можно распределить как 5 и 5, или 6 и 4, в зависимости от загруженности потоков, выполняя балансировку. Конечно, сама задача не является исполняющим потоком, это просто контейнер для потоков.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2010, 10:34 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Теперь надо решить вопрос с алгоритмом определения динамического приоритета. Планировщик по некому алгоритму должен детектировать ситуацию дисбаланса загруженности потоков в задаче, чтобы вводить корректировки в распределение времени. Я простого решения пока не вижу. Будем думать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2010, 12:23 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Прииличный поток (в смысле, грамотно реализованный), когда он не может продолжать работу из-за неготовности чего-то там, предоставляемого другими потоками, переходит в ожидание с помощью соответствующего вызова АПИ (т.е. вещи вроде спин-блокировок в коде пользовательского режима не используются из-за своей неэффективности -- их место в самых глубоких недрах ядра, т.е. там, где других способов просто нет). В связи с этим можно выделять квант времени на задачу целиком, и в том случае, если какой-либо поток не израсходовал полностью свой кусочек кванта, просто передавать остаток другим потокам. В итоге задача будет получать для своих потоков одно и то же время, ну а использовать его будут те потоки, которые реально способны выполняться, а не ждущие чего-нибудь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2010, 12:52 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
SII, здесь рассматривается такой же приличный поток (в смысле, грамотно реализованный), как ты и описываешь, но тут рассматривается другая проблема. Речь идёт о минимизации или даже исключении времени ожидания одного потока другим, так сказать бесшовной стыковке по времени при конвеерных вычислениях несколькими потоками. Чтобы переходили в ожидание друг друга как можно реже, или потоки друг друга не ждали вообще. Предполагается, что синхронная параллельность более производительна (за счёт уменьшения количества ожиданий или блокировок). Хотя, это ещё нужно посчитать, это только предположения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 июн 2010, 16:15 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Я уже говорил выше, что, по моему мнению, проблема высосана из пальца, и повторяю это вновь. В подавляющем большинстве случаев важна производительность не одного конкретного потока и даже не одной задачи, а всей системы в целом. А производительность в целом зависит в том числе и от накладных расходов на работу самой системы: чем они выше, тем меньше процессорного времени остаётся для задач, выполняющих полезную (с точки зрения пользователя) работу. Соответственно, слишком "умные" алгоритмы планирования, распределения памяти и т.п. могут в итоге привести к прямо противоположному результату -- к снижению эффективности системы.

Простейшая реализация взаимодействия нескольких потоков, на мой взгляд, достаточно эффективна: каждый поток выполняет свою работу, не зависящую от других потоков, а когда дело доходит до обращения к общим данным, просто запрашивает у ОС захват мьютекса (или другого объекта синхронизации -- не суть важно, это детали). Если мьютекс свободен, ОС отдаёт его потоку и возвращает ему управление, в результате накладные расходы невелики -- один системный вызов, причём простой, не требующий длительной обработки внутри системы, и два переключения контекста (на код ядра и из него обратно на код потока). Если же мьютекс занят, ОС ставит поток в очередь к нему и передаёт процессор следующему готовому к выполнению потоку. Накладные расходы опять-таки минимальны (выполнение простого кода, связанного с управлением мьютексами, и снова два переключения контекста), и почти всё процессорное время уходит на работу потоков, т.е. на полезную работу. Лично я не вижу _никаких_ путей для уменьшения этих накладных расходов: потоки не занимают процессор ни единого лишнего такта (либо делают полезную работу, которую в любом случае придётся делать, либо переводятся системой в состояние ожидания, предоставляя процессор другим потокам, у которых есть работа), а поэтому всё лишнее время уходит лишь на выполнение сравнительно простого кода системы.

Если говорить строго, есть один метод увеличения производительности путём сокращения накладных расходов, но он достигается уменьшением функциональности системы -- а именно отказом от квантования времени. Пока у потока есть, чем заняться, он занимает процессор непрерывно, и снимается с него только тогда, когда переходит в состояние ожидания. Накладные расходы на вызов функций АПИ, связанных с синхронизацией, будут примерно теми же, что в предыдущем случае, но не будет накладных расходов на более сложный планировщик, подсчёт тиков таймера и т.д. и т.п. -- просто переключай потоки при переходе текущего в состояние ожидания, и всё. Но такое решение имеет весьма ограниченное применение и эффективно лишь в определённых ситуациях. Собственно, оно было весьма популярно лишь в эпоху пакетной обработки (когда машине утром скармливали колоду перфокарт, а вечером приходили за результатами). Например, в системе существует два задания: высокоприоритетное, интенсивно использующее ввод-вывод, и низкоприоритетное, загружающее главным образом процессор. Ввысокоприоритетное почти всё время проводит в ожидании завершения начатых им операций ввода-вывода, а в это время низкоприоритетное занимается расчётами, поскольку процессор оказывается свободен. Но, как только операция ввода-вывода заканчивается, управление опять получает высокоприоритетное задание, которое занимает процессор очень ненадолго, запускает очередную операцию ввода-вывода и опять отправляется в ожидание. В результате достигается оптимальная загрузка аппаратуры: и ввод-вывод на полную катушку работает, и процессор без дела не стоит, и накладные расходы на работу самой ОС невелики из-за отсутствия сложных алгоритмов планирования.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июл 2010, 16:42 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Щас нет инета ответить. Пишу с телефона. Есть идеи. Чиж дай аську. Моя 577772982.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июл 2010, 21:49 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Моя 113676892.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июл 2010, 17:05 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Чиж,если ты ф/п можешь гарантировать должную чистоту кода,то можно отказаться от ring3.И отподёт


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июл 2010, 17:11 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
смысл в "экзо",т.к. не будет разделения кода по привелегиям и различных согласований.Это даст


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июл 2010, 17:18 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
бОльшую гибкость.А модульность будет определяться только степенью вытесняемости функцион.потоков.


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

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


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

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


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

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