|
Размышлизма о вреде вытесняющей многозадачности., Все не так просто, как кажется. |
|
|
|
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, 10:00
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Чтобы что-то облегчить, надо что-то нагрузить. ;-) Чесно не понял как вы Евгений предлагаете облегчить разработку приложения под RTOS. А вообще хотелось бы рассмотреть проблему на конкретных примерах. Действительно ли там такие проблемы с фрагментацией и ресурсами? Сети Петри не рассматриваю серьезно, так как уже давно есть Simulink, LabView , Systemview ... который "рвут" эти сети, как говориться, простым брутфорсом. Плюс в книгах по этим сетям рассматривают такие частные и примитивные приложения, что смешно. А если отключить таймер, то из вытесняющей RTOS сразу получается кооперативка. Цитата(Evgeny_CD @ Jun 12 2008, 16:57)  Есть некий типовой контроллер. 512к FLASH,32к RAM. Такое распределение памяти вызвано объективными технологическими особенностями. И, вероятно так будет долго. Скоро станет 4M FLASH и 256 К SRAM, суть не изменится.
Есть вариант unix идеологии. Когда в памяти живет куча процессов и потоков, различных дискрипторов и структур, и все это в RAM занимает просто мегабайты места. Для однокристальных систем эта идеология слабо подходит.
Пусть есть несколько потков данных. Для каждого из который выделяются некие буфера.
Пусть есть совокупность закоченных процедур, достаточно сложных. Такие процедуры принимают на вход указатель на структуру, что-то там делают (длительное время), активно юзают стек и кучу, но после завершения обработку выдают указатель на выходную структуру, стек на том же самом уровне, и кучу в том же самом состоянии, в каком они ее получили.
Если идти по пути обычных вытесняющих ОСей, и при отсутствии глабального планирования времени, в зависимости от наступления неких критических событий в буферах (близок к переполнению/опустошению) и в окружающем мире (пришло событие, и нам надо срочно его обрабатывать) мы вынуждены будем переключить задачи. Что даст нам неприятность в виде нескольких кадров под стек задач, и бардак в куче, ибо новая задача может затребовать память, ей выделят ее, потом отработает вытесненная ранее задача, она освободит память, но куча уже будет фрагментирована. Дефрагментация кучи - тоска для малоресурсных систем. Для больших, заметим, это тоже фундаментальная проблема.
Если же предположить, что есть некий планировщик, который зная внутреннюю картину системы (сколько чего в буферах, сколько событий ждет обработки), а таже при условии предсказуемости внешнего мира (пример - синхронная система связи, с выделенными кадрами), может более эффективно распределять время.
Типа выбираем блок для обработки, запускаем его с пачкой данных, все остальное копится в буферах. Блок отработал - запустили следующий.
Более того, при запуске такой своебразной задачи, ей можно выделить максимальный квант времени. Она сама смотрит, сколько у нее времени осталось, и если обработка не завершена, она ставит флаг (который ей потом сохранится, он static), чистит стек за собой, и отдает управление системе. Разумеется, алгоритм должен допускать такую возможность дробной обработки.
Также задача может заказать, через сколько ее надо вызвать.
Тогда у планировщика работы системы будет дотаточно данных, чтобы найти оптимальное распределение ресурсов.
Такой подход к работе софтины потребудет специальных тулзов для логического проектирования, ибо прописывать такое все в лоб ручками - это нереально. А вот если использовать некую систему разметки кода, о которых я тут так давно размышляю, это было бы не так уж и сложно.
Комбинация вытесняющего и невытесняющего механизмов была бы, IMHO, очень эффективной.
Вопросы:
* видел ли кто какие наработки по теме? * какие есть ОСьки, гибко использующие вытесняющий и коопреативный механизмы многозадачности? * критика и дополнение моих идей.
|
|
|
|
|
Jun 13 2008, 12:41
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(AlexandrY @ Jun 13 2008, 14:00)  Чесно не понял как вы Евгений предлагаете облегчить разработку приложения под RTOS. Такой задачи не было. Была попытка понять, как максимально эффективно использовать ресурсы контроллера. Цитата(AlexandrY @ Jun 13 2008, 14:00)  Сети Петри не рассматриваю серьезно, так как уже давно есть Simulink, LabView , Systemview ... который "рвут" эти сети, как говориться, простым брутфорсом. Плюс в книгах по этим сетям рассматривают такие частные и примитивные приложения, что смешно. Не понял смысла этой фразы. Сети Петри - математический аппарат. Как его можно порвать тупым перебором - не вкурил. Цитата(AlexandrY @ Jun 13 2008, 14:00)  А если отключить таймер, то из вытесняющей RTOS сразу получается кооперативка. Только вот обычная ОСька малость в осадок выпадет, из-за того что у нее пропадет понятие времени. Цитата(vshemm @ Jun 13 2008, 14:03)  Хмм... Про серверы я специально сказал, чтобы разделить эти классы (см. "вариант unix идеологии" в первом посте). Как правило, в узкоспециализированных девайсах можно (и нужно, имхо) избавится от неконтролирумых malloc/free, особенно когда куча/память общая для задач. Только делать это должна не ОС  Разговаривал я тут по душам с разработчкиком одного телемаического сервака. Который принимает данные от 1к+ GSM девайсиков. Первое действие его сервера при запуске - отожрать у ОСи кучу памяти (задается) и запустить поток собственного менеджера памяти  Приводимые здесь примеры с сервером базы данных тоже не совсем корректны - программа, обслуживабющая эту БД одна, и ничего левого в произвольный момент времени там не стартует. Видимо, ситуация по памяти выглядит так: * при инициализации проиходит обращение к malloc * при норамальной работе задача (задачи) сами занимаются управлением собственной памятью (ОСь не обладает телепатическими способностями, чтобы понять, как и когда можно дефрагментировать память конкретного приложения) * free вызывается только при глобальном завершении процесса на Сервере или типа когда контроллер сдох  Еще есть труды Шалыто А.А., в том числе знаменитый Switch-технология. Алгоритмизация и программирование задач логического управления http://is.ifmo.ru/books/switch/2Есть алгоритм решения задачи. Он живет сам по себе. Есть способы реализации этого алгоритма: структурное, функциональное, логическое, и еще 1001 программирование. Есть железяка, которая, на самом деле, понимает только один язык - машинные коды. И вопрос только в том, как корректно преобразовать алгоритм в машинные коды, чтобы: * машинные коды гарантированно реализовывали тот же алгорим, причем такая верификация должна быть проведена аналитически, без перебора всех состояний кода программы (для сколь-нибудь сложных программ это нереально) * они должны это гарантированно делать за заданное время. Сила "обычных" языков программировнаия в том, что они неплохо ложатся на мозги программеров. Но соотнесение их с алгоритмом не так-то просто. Давайте говорить на чистоту - пока нет способов (точнее, мне они неизвестны), сормальной верификации кода на соотвествие алгоритму. Т.е. есть алгоритм, есть программа, и программе говорит - она реализует этот алгоритм. Проверяем - вроде работает. При этом никакого автоматического способа проверить, соотвествует ли программа алгоритму, нет. И никакой гарантии, что в программе предусмотрена обработка всех состояний, тоже нет. Есть паллиативы. Которые ресурсы среды исполнения разменивают на сложность программирования. Парадигма многозадачности удобная для восприятия человеком. Она позволяте разбить код на куски, и четко отследить связи между этимми кусками. Что и дают все эти потоки, сигналы, семафоры, m-box, пайпы и сокеты. Язк программирования + ОСь гарантируют в таком случае изоляцию этих кусков программ. Это возволяет осуществить декомпозицию задачи. Но плата за это - расход ресурсов среды исполнения. С другой стороны, обычный С компилятор отлажен настолько, что Вы можете иметь миллионы функций, вызывать их согласнов Вашей логики, и компилятор все это отработает корректно. Вот теперь самый главный вопрос - как всю эту систему вызова "миллиона" функций сопоставить с решаемым алгоритмом? В виде написания "линейного" текста программы точно нет. Вопрос закрыт. Только в виде некоего графического представляния составных частей, графа, который нужно корретно отобразить на код. Спопобы такого отображения и есть предмет далеко не оконченных изысканий Шалыто и многих других товарищей. Общепринятого сопосба (каким в своей области стал, например, язык С) пока нет. Хотя теоретические основы вроде как есть. Вопрос - кто какие системы работы с конечными атвоматами знает - кроме iSTATE и Rapsody?
|
|
|
|
|
Jun 13 2008, 12:58
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Я как понял эти Петри - просто способ рисовать модели стрелочками, кружочками и квадратиками. Потом изголяться и искать там какие-то закономерности. Это бред. В ваших же книжках написано, что эти сети в основном только для анализа применяются. Т.е., допустим, уже когда ось готова и хреново работает. В MATLAB SIMULINK более 1000 функциональных блоков на все случаи жизни. И c дискретным времененм, и с непрерывным, и со смешанным и без времени и вообще че хош. Вот там реально сделать модель над осью и сгенерировать исходники действительно оптимизирующие использование сервисов оси. А че мы обсуждаем? Я что-то нить потерял. Наличие каких-либо проблем никто так и не подтвердил. А про ресурсы же мы вроде договорились. Для продвинутой RTOS надо 8 Meг RAM-а и 1/4 от этого для FLASH-а. Для Линукса на порядок больше. Кто-то добрый выложил Integrity от GreenHills. Там лишний раз подтверждается оценка для RTOS. Дальнейшая оптимизация и ужимание особой экономии не принесет. Цитата(Evgeny_CD @ Jun 13 2008, 15:46)  Такой задачи не было. Была попытка понять, как максимально эффективно использовать ресурсы контроллера.Не понял смысла этой фразы. Сети Петри - математический аппарат. Как его можно порвать тупым перебором - не вкурил.Только вот обычная ОСька малость в осадок выпадет, из-за того что у нее пропадет понятие времени.Разговаривал я тут по душам с разработчкиком одного телемаического сервака. Который принимает данные от 1к+ GSM девайсиков. Первое действие его сервера при запуске - отожрать у ОСи кучу памяти (задается) и запустить поток собственного менеджера памяти  Приводимые здесь примеры с сервером базы данных тоже не совсем корректны - программа, обслуживабющая эту БД одна, и ничего левого в произвольный момент времени там не стартует. Видимо, ситуация по памяти выглядит так: * при инициализации проиходит обращение к malloc * при норамальной работе задача (задачи) сами занимаются управлением собственной памятью (ОСь не обладает телепатическими способностями, чтобы понять, как и когда можно дефрагментировать память конкретного приложения) * free вызывается только при глобальном завершении процесса на Сервере или типа когда контроллер сдох 
|
|
|
|
|
Jun 13 2008, 13:11
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(AlexandrY @ Jun 13 2008, 16:58)  Я как понял эти Петри - просто способ рисовать модели стрелочками, кружочками и квадратиками. Потом изголяться и искать там какие-то закономерности. Это бред. Дело Ваше, но называть математический аппарат бредом - себя не уважать. Он может быть простым или громоздким, удобным или неудобным, ошибочным, на худой конец, но не бредом! Сила матлаба не отменяет знание того, что лежит в его основе. Я бы не стал ставить один единственный инструмет во главу угла. Как Вы верно заметили, самый сильный вариант - это комбинация обычной многопоточной ОСи и автоматного подхода.
|
|
|
|
|
Jun 13 2008, 14:37
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Ну и фиг с ними, с этими сетями. Может они и не бред, но к делу их не пришьешь. Ладно, я их уважаю. Моделирование решает задачу когда о среде исполнения известно все и прогнозируете ее поведение при разных воздействиях. А в жизни то решается обратная проблема, вы о своей среде исполнения пратически ничего не знаете и пытаетесь узнать ее проблемы пытая ее разными внешними воздействиями. А вообще обычно толком не известна ни своя среда ни поведение внешнего мира. В свете появления фреймворков как PhoneMy, Android, .Net embedded и т.д. среда исполнения становится полным черным ящиком. Там, кстати, с фрагментацией памяти все схвачено. Т.е. сведения о критичности фрагментации несколько подустарели. Цитата(Evgeny_CD @ Jun 13 2008, 16:41)  Дело Ваше, но называть математический аппарат бредом - себя не уважать. Он может быть простым или громоздким, удобным или неудобным, ошибочным, на худой конец, но не бредом!
Сила матлаба не отменяет знание того, что лежит в его основе. Я бы не стал ставить один единственный инструмет во главу угла.
Как Вы верно заметили, самый сильный вариант - это комбинация обычной многопоточной ОСи и автоматного подхода.
|
|
|
|
|
Jun 13 2008, 16:23
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(AlexandrY @ Jun 13 2008, 18:37)  В свете появления фреймворков как PhoneMy, Android, .Net embedded и т.д. среда исполнения становится полным черным ящиком. Там, кстати, с фрагментацией памяти все схвачено. Т.е. сведения о критичности фрагментации несколько подустарели. То, на чем "крутится" PhoneMy, Android, .Net embedded пока, и еще долго будет так, не является SoC в истинном значении этого слова. Да, вариант проц + внешний флешак + SDRAM 16 мбайт сейча стоит совсем не дорого. Но есть задачи, где SoC должна быть именнно SoC, а не SoB (System on Board). Кроме того, вот смотрю я на всякие современные PIC32, AVR32 и тихо радуюсь за их создателей. Unix style эти чипы не потянут в чистом виде, без внешней памяти (на 64к ОЗУ сильно в "многопоточность" не наиграешься), "примитивное программирование" не позволит использовать эти чипы на всю катушку (вроятность ошибки при ручном описании сложных автоматов будет экспоненциально возрастать), а вот чего-то среднего в виде сформировавшейся идеологии я пока не вижу. Собственно, за это и воюю.  А если посмотреть на сегмент Hi-End Low Power, где ATxmega, несомненно, будет королем, то опять-же разбазаривание набортных 8 или 16К под многопоточность является нерациональным. В этом плане искусство создателей Contiki вызывает уважение, а девайс (условно), который может прожить год на батарейке, и при этом может выполнять функции полноценного сетевого узла (с естественными ограничениями из-за батарейности) - очень даже коммерчески востребованная вещь! Мой сромный опыт построения синхронных радиосетей говорит о том, что при правильном проектировнии таких сетей эффектвиность использования батарей получается просто фантастическая даже на современтной элементной базе (без XMEGA), но сложность алгоритмов там уже требует какого-то системного подхода, хотя бы в виде генератора автоматов.
|
|
|
|
|
Jun 13 2008, 16:42
|

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

|
Цитата(Evgeny_CD @ Jun 13 2008, 18:23)  А если посмотреть на сегмент Hi-End Low Power, где ATxmega, несомненно, будет королем... Королем она будет, когда опубликуют не "типовые" цифири а реальный диапазон потребления, причем не только ядра, но и периферии. Пока есть только preliminary даташиты в котором о потреблении той-же периферии "подлежит определению", а по ядру некие "типовые значения". P.S. В Риге 17 числа семинар Атмеловский, на котором XMEGA гвоздь программы.... Цитата 09.00 - 10.00 ATtiny + ATmega (incl.Picopower) family presentation * 10 00 - 10.30 XMEGA Presentation * 10.30 - 10.45 Coffee Break * 10.45 - 12.00 XMEGA Continued * 12.00 - 13.00 Coffee break * 13.00 - 14.00 AVR32 UC3 Presentation * 14.00 - 15.00 AT91 MPU Family Presentation
--------------------
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 А что подразумевается под вытесняющей многозадачно... Jun 13 2008, 08:19 zltigo Цитата(vshemm @ Jun 13 2008, 10:19) А что... Jun 13 2008, 08:59  vshemm Цитата(zltigo @ Jun 13 2008, 12:59) А зад... Jun 13 2008, 10:03   zltigo Цитата(vshemm @ Jun 13 2008, 12:03) К том... Jun 13 2008, 10:41       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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|