|
Размышлизма о вреде вытесняющей многозадачности., Все не так просто, как кажется. |
|
|
|
Jun 12 2008, 13:27
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Есть некий типовой контроллер. 512к FLASH,32к RAM. Такое распределение памяти вызвано объективными технологическими особенностями. И, вероятно так будет долго. Скоро станет 4M FLASH и 256 К SRAM, суть не изменится.
Есть вариант unix идеологии. Когда в памяти живет куча процессов и потоков, различных дискрипторов и структур, и все это в RAM занимает просто мегабайты места. Для однокристальных систем эта идеология слабо подходит.
Пусть есть несколько потков данных. Для каждого из который выделяются некие буфера.
Пусть есть совокупность закоченных процедур, достаточно сложных. Такие процедуры принимают на вход указатель на структуру, что-то там делают (длительное время), активно юзают стек и кучу, но после завершения обработку выдают указатель на выходную структуру, стек на том же самом уровне, и кучу в том же самом состоянии, в каком они ее получили.
Если идти по пути обычных вытесняющих ОСей, и при отсутствии глабального планирования времени, в зависимости от наступления неких критических событий в буферах (близок к переполнению/опустошению) и в окружающем мире (пришло событие, и нам надо срочно его обрабатывать) мы вынуждены будем переключить задачи. Что даст нам неприятность в виде нескольких кадров под стек задач, и бардак в куче, ибо новая задача может затребовать память, ей выделят ее, потом отработает вытесненная ранее задача, она освободит память, но куча уже будет фрагментирована. Дефрагментация кучи - тоска для малоресурсных систем. Для больших, заметим, это тоже фундаментальная проблема.
Если же предположить, что есть некий планировщик, который зная внутреннюю картину системы (сколько чего в буферах, сколько событий ждет обработки), а таже при условии предсказуемости внешнего мира (пример - синхронная система связи, с выделенными кадрами), может более эффективно распределять время.
Типа выбираем блок для обработки, запускаем его с пачкой данных, все остальное копится в буферах. Блок отработал - запустили следующий.
Более того, при запуске такой своебразной задачи, ей можно выделить максимальный квант времени. Она сама смотрит, сколько у нее времени осталось, и если обработка не завершена, она ставит флаг (который ей потом сохранится, он static), чистит стек за собой, и отдает управление системе. Разумеется, алгоритм должен допускать такую возможность дробной обработки.
Также задача может заказать, через сколько ее надо вызвать.
Тогда у планировщика работы системы будет дотаточно данных, чтобы найти оптимальное распределение ресурсов.
Такой подход к работе софтины потребудет специальных тулзов для логического проектирования, ибо прописывать такое все в лоб ручками - это нереально. А вот если использовать некую систему разметки кода, о которых я тут так давно размышляю, это было бы не так уж и сложно.
Комбинация вытесняющего и невытесняющего механизмов была бы, IMHO, очень эффективной.
Вопросы:
* видел ли кто какие наработки по теме? * какие есть ОСьки, гибко использующие вытесняющий и коопреативный механизмы многозадачности? * критика и дополнение моих идей.
|
|
|
|
|
 |
Ответов
|
Jun 13 2008, 08:19
|
Частый гость
 
Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803

|
А что подразумевается под вытесняющей многозадачностью? Если вытеснение одной задачи другой, - тогда понятие "приоритет" теряет смысл, ибо более приоритетная задача должна вытеснять менее приоритетную; так проще применять матаппараты, которые аналитически позволяют строить подобные системы, например, небезызвестный ЧМА (http://mike.qnx.org.ru/files/articles/rms/rms.doc). "Ресурсный" вопрос тоже должен решаться на этапе проектирования (мы же не рассматриваем высоконагруженные сервера или базы данных, верно? хотя тут просто используются другие методы). В идеале, динамической памяти вообще быть не должно, или, на худой конец, должны быть раздельные пулы для задач, причем размер пулов должен позволять обрабатывать данные при заданной их интенсивности и производительности вычислителя. В противном случае система просто захлебнется, и никакие стейт машины не спасут. Так или иначе, возлагать на ОС (планировщик) архитектурные задачи - плохая идея, имхо. Это должен делать человек, в рамках модели ОС, разумеется. Сети Петри - хорошая штука  Жаль, только, задача достижимости в общем случае нерешаема. Плюс разные эффекты, связанные с асинхронностью и недерминированностью.
|
|
|
|
|
Jun 13 2008, 08:59
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vshemm @ Jun 13 2008, 10:19)  А что подразумевается под вытесняющей многозадачностью? Если вытеснение одной задачи другой, - тогда понятие "приоритет" теряет смысл, ибо более приоритетная задача должна вытеснять менее приоритетную А задачи одного приоритета (или разного, но имеющие на данный момент времени одинаковый приоритет) должны выполняться "параллельно". Цитата "Ресурсный" вопрос тоже должен решаться на этапе проектирования (мы же не рассматриваем высоконагруженные сервера или базы данных, верно? Не верно. Мы рассматриваем, например, банальный контроллер, который обслуживает несколько каналов связи имеющих разную и пиковую загруженность во времени и соответственно делящий какие-то (даже не свои собственные!) недостающие ресурсы. Цитата В идеале, динамической памяти вообще быть не должно.. Угу, а чего думать - берешь кувалду побольше и ставишь вместо контролера "невысоко нагруженный сервер"  ...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Evgeny_CD Размышлизма о вреде вытесняющей многозадачности. Jun 12 2008, 13:27 ig_z Цитата(Evgeny_CD @ Jun 12 2008, 16:27) * ... Jun 12 2008, 14:27 zltigo Цитата(Evgeny_CD @ Jun 12 2008, 15:27) * ... Jun 12 2008, 14:54 Evgeny_CD Цитата(zltigo @ Jun 12 2008, 18:54) - Ну ... Jun 12 2008, 15:07 Evgeny_CD Есть еще такая штука, как сети Петри. Мне как-то у... Jun 12 2008, 17:05 Andrew2000 Цитата(Evgeny_CD @ Jun 12 2008, 21:05) Ес... Jun 12 2008, 17:30 rezident ИМХО вытесняющая многозадачность нужна только тогд... Jun 12 2008, 18:11 zltigo Цитата(rezident @ Jun 12 2008, 20:11) В о... Jun 13 2008, 01:09  vshemm Цитата(zltigo @ Jun 13 2008, 12:59) А зад... Jun 13 2008, 10:03   zltigo Цитата(vshemm @ Jun 13 2008, 12:03) К том... Jun 13 2008, 10:41 AlexandrY Чтобы что-то облегчить, надо что-то нагрузить. ;-)... Jun 13 2008, 10:00 Evgeny_CD Цитата(AlexandrY @ Jun 13 2008, 14:00) Че... Jun 13 2008, 12:41  AlexandrY Я как понял эти Петри - просто способ рисовать мо... Jun 13 2008, 12:58   Evgeny_CD Цитата(AlexandrY @ Jun 13 2008, 16:58) Я ... Jun 13 2008, 13:11    AlexandrY Ну и фиг с ними, с этими сетями.
Может они и не бр... Jun 13 2008, 14:37     Evgeny_CD Цитата(AlexandrY @ Jun 13 2008, 18:37) В ... Jun 13 2008, 16:23      zltigo Цитата(Evgeny_CD @ Jun 13 2008, 18:23) А ... Jun 13 2008, 16:42       Evgeny_CD Цитата(zltigo @ Jun 13 2008, 20:42) Корол... Jun 13 2008, 18:10        zltigo Цитата(Evgeny_CD @ Jun 13 2008, 20:10) Ме... Jun 13 2008, 18:42         Evgeny_CD Цитата(zltigo @ Jun 13 2008, 22:42) . Быс... Jun 13 2008, 19:17          _Pasha Цитата(Evgeny_CD @ Jun 13 2008, 22:17) В ... Jun 13 2008, 23:20           Evgeny_CD Цитата(_Pasha @ Jun 14 2008, 03:20) Есть ... Jun 13 2008, 23:29 vshemm Цитата(zltigo @ Jun 13 2008, 14:41) Потом... Jun 13 2008, 16:56 Evgeny_CD Цитата(vshemm @ Jun 13 2008, 20:56) Хотя ... Jun 13 2008, 17:07 zltigo Цитата(vshemm @ Jun 13 2008, 18:56) Почем... Jun 13 2008, 17:21  vshemm Цитата(zltigo @ Jun 13 2008, 21:21) Потом... Jun 13 2008, 17:52 AlexandrY Вы тут концептуально что-то не понимаете или делае... Jun 13 2008, 19:54  vshemm Начали за здравие (см. топик), а кончили за упокой... Jun 14 2008, 16:58   Evgeny_CD Цитата(vshemm @ Jun 14 2008, 20:58) Напри... Jun 14 2008, 17:23    vshemm Цитата(Evgeny_CD @ Jun 14 2008, 21:23) Эт... Jun 14 2008, 17:27     Evgeny_CD Цитата(vshemm @ Jun 14 2008, 21:27) Честн... Jun 14 2008, 17:45   AlexandrY Ну.. , роутеры это не серьезно.
Эт мы проходили, ... Jun 14 2008, 18:30    Evgeny_CD Цитата(AlexandrY @ Jun 14 2008, 22:23) Та... Jun 14 2008, 18:30     AlexandrY Какой там TDD! Разработка роутера это сплошняк... Jun 14 2008, 19:42      Evgeny_CD Цитата(AlexandrY @ Jun 14 2008, 23:42) Да... Jun 14 2008, 20:06       AlexandrY Да чеб об приятном и не поболтать.
Я всегда за ... Jun 14 2008, 21:14        Evgeny_CD Цитата(AlexandrY @ Jun 15 2008, 01:14) В ... Jun 14 2008, 21:31        blackfin Цитата(AlexandrY @ Jun 15 2008, 01:14) В ... Jun 15 2008, 02:40         AlexandrY Вы просто не в контексте.
За топиками Евгения над... Jun 15 2008, 08:11          blackfin Цитата(AlexandrY @ Jun 15 2008, 12:11) Вы... Jun 15 2008, 08:53    vshemm Цитата(AlexandrY @ Jun 14 2008, 22:30) Ну... Jun 14 2008, 19:29 vshemm Атом тут не причем.
Просто лицензия на ХП запрещае... Jun 13 2008, 17:16 Evgeny_CD caxapa::Vit подсказал еще вот какие интересные про... Jun 14 2008, 10:31 Evgeny_CD caxapa:: Рэйлвэй Каген {
При всём богатстве выбор... Jun 14 2008, 13:44 zltigo Цитата(Evgeny_CD @ Jun 14 2008, 15:44) Ил... Jun 14 2008, 15:20  Evgeny_CD Цитата(zltigo @ Jun 14 2008, 19:20) Нет, ... Jun 14 2008, 15:49 blackfin "Остапа несло..." Jun 14 2008, 15:52 Evgeny_CD Цитата(blackfin @ Jun 14 2008, 19:52) ... Jun 14 2008, 15:56  blackfin Цитата(Evgeny_CD @ Jun 14 2008, 19:56) Бы... Jun 14 2008, 16:06   Evgeny_CD Цитата(blackfin @ Jun 14 2008, 20:06) Кст... Jun 14 2008, 16:31 blackfin По существу...
"Суха теория, мой друг, а др... Jun 14 2008, 16:52 733259 ЦитатаПравда, там 8м флеш и 16м RAM, но на менее н... Jun 14 2008, 18:21 733259 ЦитатаМои роутеры вообще Линукса не требуют, имеют... Jun 14 2008, 18:34 AlexandrY Ну собственно наши роутеры и без меня есть кому ре... Jun 14 2008, 19:22 733259 ЦитатаНу собственно наши роутеры и без меня есть к... Jun 14 2008, 20:02 klogg Цитата(AlexandrY @ Jun 14 2008, 21:30) Ну... Aug 7 2008, 20:21
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|