| (Продолжение темы здесь) Версия для печати (дайджест по поиску " xameleon") | |
| Конференция: | Конференция iXBT.com (http://forum.ixbt.com/) |
| Форум: | Процессоры (http://forum.ixbt.com/?id=8) |
| URL: | http://forum.ixbt.com/topic.cgi?id=8:24130 |
| 19. xameleon, 16.01.2013 21:55 |
цитата:Один из возможных вариантов - микропрограмма в ПЗУ процессора. цитата:На самом деле это два вопроса :) Чтобы это объяснить, сначала рассмотрим асинхронный способ передачи сообщений с помощью семафоров: Семафор, это счётчик с блокировокй. Задача с помощью критической секции захватывает ресурс "Список сообщений", затем добавляет сообщение к этому списку, затем с помощью семафора сигнализирует обработчику входящих сообщений о добавлении задачи. После этого, задача источник сообщения не блокируется и продолжает своё выполнение дальше. При синхронной передаче сообщений передатчик всегда блокируется до приёма сообщения удалённой стороной, а приёмник блокируется пока ему не будет передано сообщение. Существует максимальное время блокировки для фазы передачи сообщения и максимальное время блокировки для фазы приёма - это два интервала времени. Временной интервал имеет два граничных значения - "Сейчас" и "Всегда". При асинхронной передаче вероятна ситуация, когда сообещния поступают быстрее, чем могут обрабатываться. В таком случае рано или поздно буфер сообщений переполнится и задаче источнику сообщений придётся заблокироваться. В случае синхронной передачи буфер сообщений не может переполниться по определению, поскольку состоит из единственного сообщения. С прерывания тоже получается интересно. На основании соглашения, что прерывания являются синхронными сообщениями, их можно обрабатывать в одной точке вместе с запросами от других задач. По этой причине отпадает необходимость в критических секциях для защиты данных от одновременного доступа. Побочным, но интересным, эффектом передачи прерываний как сообщений является возможность их гибкого планирования. Это касается как приоритета обработки, так и возможность обработки прерываний процессами, работающими вне контекста ядра системы (пользовательскими задачами). Добавление от 16.01.2013 22:30: цитата:Точкой синхронизации является обмен сообщениями. Планирование осуществляется обходом дерева. В случае, если задача в узле дерева находится в состоянии ожидания обмена сообщениями, её квант времени отдаётся задачам, являющимися ветвями узла ожидающей задачи. Корневым элементом дерева является планировщик, который изначально владеет 100% своего времени и разделяет его между задачами, родительским элементом которых он является. На этом базисе строится любая система приоритетов и алгоритмов планирования. Добавление от 16.01.2013 22:53: цитата:Вы хотели сказать "два камня" или "две клетки"? :)) Синхронизировать два микропроцессора не такая уж сложная задача и и ей практическое решение было ещё до того, как научилсь делать многоядерные процессоры. Основная практическая трудность заключается в переносе буфера сообщения (не более 64 слов) между процессорами. В случае множества физических процессоров, вероятно, наиболее оптимальным будет интерфейс для прямой передачи между кристаллами - захват шины и следом "прямая передача данных CPU2CPU". А если речь идёт о мультиклетке, то проблем почти нет - тот же планировщик делит исполнительные устройства между блоками регистров задач - просто коммутация TCB и иполнительных устройств. Планировщик один на всех. Ранее обсуждалось, что на большинстве задач свободные "клетки" (они же - исполнителные устройства) будут простаивать. Так зачем им простаивать, если есть чем их занять? Причём, занять оптимально. Добавление от 17.01.2013 00:01: цитата: Действительно, микропрограмму ядра прерывать нельзя и не нужно - планировщик это фундамент системы, и если его прервать, то система развалится. Что касается прерывания задачи (прерывания - в смысле termination), то не то, чтобы нельзя, а просто нежелательно по многим причинам. Но если всё же программа зависла, то в кармане у разработчика должна быть возможность управлять задачами. Если обратиться к тезисам аппаратного L4, то один из них гласит:
Теперь обратимся к спецификации L4 X2 и посмотрим, какой же подходящий системный вызов она нам предлагает: цитата: Справедливости ради стоит заметить, что авторы L4-X2 обнаружили в этом подходе проблему, которую исправили в виде недокументированной возможности - если задачи находятся в разных адресных пространствах, то EXCHANGEREGISTERS может быть вызван только из задачи обработчика страниц, указанной в TCB задачи, состояние которой нужно изменить или определить. Таким образом, возможность управления задачей извне - существует. Если некая задача "зависла" в бесконечном цикле, то необходимо выполнить системный вызов EXCHANGEREGISTERS, который управляет состоянием задачи. Таким образом, чтобы остановить или прервать задачу, которая не отвечает на сообщения, другая задача должна послать сообщение EXCHANGEREGISTERS планировщику, который выполнит необходимые операции над задачей. Можно, конечно, ввести инструкцию в систему команд процессора для реализации вызова EXCHANGEREGISTERS, но в данном случае игра не стоит свеч - обмен сообщениями с планировщиком это самое оптимальное решение в данном случае. |
| 33. xameleon, 17.01.2013 15:23 |
цитата: Нет нет. 64 байта - это только (исключительно!) для регистрвого буфера сообщения и без дуплекса - фазы приёма и передачи последовательны. Гигабитный интернет захватывает шину и в режиме DMA раскидывает принятые данные по буферам в памяти. Процессор за приём не отвечает, а в сообщении ему лишь приходит сигнал, что гигабитный контроллер ethernet приянл один или несколько пакетов. По сути - сигналы о прерываниях в L4 приходят пустыми сообщенияим (приходит одно слово - тэг сообщения), а источник прерывания определяется на основе источника сообщений. (Об этом я расскажу в другой раз). цитата: Понимаю проблемы народа. Посмотите на эту проблему с другой стороны и ответьте на вопрос - данные приходят быстрее, чем их успевает обработать процессор или нет? Я имею опыт написания дравйверов для двух контроллеров - DEC-21140 и Intel 8254x Делалось всё руками непосредственно по спецификациям от AMD и Intel, т.ч. некоторое представление о работе ethernet чипов я имею. Что происходит при приёме пакета? Давайте рассмотрим пример на модели OSI. Задача, являющаяся драйвером сетевой карты (канальный уровень), получает сообщение, после чего она анализирует регистры ethernet чипа. Далее, на основании этих регистров происходит разбор дескрипторов в ОЗУ (разумеется, дескрипторы сформированы ethernet контроллером в момент приёма пакетов). Далее задача-драйвер анализириует заголовки пакетов в ОЗУ (их описывают дескрипторы), находит тип пакета и направляет пакет задаче обработчику-сетевого уровня (модель OSI). После этого задача-драйвер помечает принятые дескрипторы как свободные и сигнализирует об этом контроллеру ethernet. Самая длинная операция в этой схеме - передача буфера, содержащего принятый пакет, следующему уровню модели OSI, чтобы его освобдить для приём следующего пакета. Если скорость процессора не позволяет копировать данные из буферов, принадлежащих драйверу сетевой карты, то между слоями OSI надо передавать указатель на заранее выделенный буфер, а не копировать его между задачами и уровнями протоколов. А теперь вернёмся к понятию контекста ядра. Такого понятия на самом деле в L4 не существует. Зато есть понятие адресных пространств. Обратимся к тезисам аппаратного L4:
Нет понятия режима ядра и пользовательского режима, а есть лишь ссылка на таблицу страниц процесса. Т.е. вся задержка, это переключение таблицы страниц. А теперь вспоминаем, что виртуальные страницы L4 являются универсальными - регион памяти описывается гораздо меньшим числом универсальных страниц в виду их природы. Поэтому операция переключения процесса может быть дешевле, чем в системах обычными вирутальными страницами. Наконец, возможность исполнять драйвера в выделенном адресном пространстве - это всего лишь возможность. Если в виду каких либо причин не хватает быстродействия, то и нет смысла такой драйвер помещать в userspace. Разве что для отладки. |
| 66. xameleon, 17.01.2013 23:08 |
цитата:Работа некоторых алгоритмов зависит от частоты. В многозадачных/многопроцессорных системах при смене частоты возникают интересные эффекты. Ошибки в программе, которые не проявлялись на одной частоте, могут дать о себе знать при другой частоте. Имхо, программые ошибки выведут систему из строя быстрее наводок. И это веская причина не делать "тупо апгрейд" на системах с высокими требованиями к надёжности и безопасности. |
| 70. xameleon, 17.01.2013 23:50 |
цитата:При этом полностью проведя весь цикл испытаний системы - от начала и до конца. Оно в принципе и правильно, но если инженеры будут создавать "новую и улучшенную" версию процессора каждый месяц, то всем этим версиям просто физически невозможно будет провести полный тест. |
| 84. xameleon, 18.01.2013 04:33 |
цитата: Это интересный вопрос. Честно говоря, я не совсем уловил нить размышления. Что происходит между версиями Б) и В) мне не ведомо, но у меня немного другое представление. Вот тут надо делать по другому: цитата:Версия Б успешно тиражируется для гражданского сектора и пользователи, сами того не подозревая, активно тестируют эту версию. Военные продолжают использовать версию А. Когда готова версия В, гражданские несут свои денежки для покупки новой железки, а версия Б, проверенная временем и тысячами пользователей, идёт в оборонку. Минус идеи - "враги" и конкуренты могут (попытаться) украсть идеи и технлогии. Плюсы - военные получают надёжное и проверенное временем решение. Компаниям удаётся минимизировать расходы - министерство обороны финансирует разработку, а потом эта разработка ещё и продётся гражданским и на них же обкатывается. Может быть такой подход и не очень защищён от утечки Intellectual Property, но конкурировать с такой схемой практически невозможно - там где тратится рубль на разработку "с обкаткой на гражданских", на той же задаче закрытая разработка потребует десять рублей. Практически любая корпорация выполняет военные заказы. Все знают, что Boeing производит не только гражданские самолёты. Но много ли кто осведомлён, что Самсунг тоже выпускает военную технику и вооружения? Если присмотреться, то можно привести десятки примеров. Подозреваю, что байки об устаревших процессорах в американском вооружении появляются не от того, что Пентагон жадничает, а потому что выбираются провренные временем решения. Кстати, я хоть и осуждаю завес секретности над ЗАО МЦСТ, но понять могу - например, описыая какой либо алгоритм, приходится искать грань, чтобы, с одной стороны, он был понятен, с другой стороны, приходится скрывать важные детали, чтобы никто не смог повторить. |
| 145. xameleon, 24.01.2013 14:23 |
цитата:О чём вообще речь? Спорить можно не о языках, а о компиляторах. Любой язык, чей компилятор может генерировать объектный файл с инструкциями процессора, может использоваться для построения систем. А если система построена на принципах обмена сообщениями, то можно компоновать систему из модулей, реализованных на различных языках программирования. Кстати, систему можно построить даже на интерпретаторе - всякие Java и .NET машины с успехом демонстрируют эту возможность. |
| 236. xameleon, 31.01.2013 02:31 |
цитата:eth.h код:Всё замечательно, однако, что такое - TDP и RDP? Если это "Transmit Descriptors Pointer" и "Receive Descriptors Pointer", то где же описаны структуры TDP_TypeDef и RDP_TypeDef? Если же это просто указатели на буфера, в которые помещаются Ethernet фреймы, то тут угадывается "засада" - медленная передача и высокая вероятность потерь принимаемых пакетов. |
| 241. xameleon, 31.01.2013 13:00 |
цитата: Вот уж простите меня, но есть некоторые сомнения в экспертах РосНано, особенно в области процессоров. Дело в том, что этим "экспертам" просто неоткуда взяться - кто из них участовал в разработке микропроцессоров? Чтобы понять, что я имею в виду, возьмите обсуждение из любой темы этого форума, где обсуждается "какой процессор взять для игры в ..." - вот приблизительно таков уровень экспертов в РосНано. Я конечно могу ошибаться, но судя по косвенным фактам уровень экспертов в плане цифровой электроники весьма низок. Поправьте, если я неправ. Раз уж пошла такая тема, то беда даже не в экспертах, а в количестве компаний, разрабатывающих что-то своё собственное. В развитых странах регулярно создаются и прогорают десятки компаний и лишь немногим удаётся создать что-то конкурентоспособное. Мы не видим лузеров, зато успешные проекты у всех на слуху. Это наглядное подтверждение диалектического материализма - "закона перехода количественных изменений в качественные". То есть для качественного скачка понадобилось бы сотня компаний, типа ОАО Мультиклет. Те, кто пошёл бы по неправильному пути, прогорели бы весьма быстро, а те, кто бы вырвался в гонке, скупили бы на корню идеи и разработки менее успешных конкурентов. За это сообщение сказали спасибо: vss |
| 252. xameleon, 01.02.2013 20:22 |
цитата: Не подскажите, как это реализовано и кого можно почитать на эту тему? |
| 260. xameleon, 02.02.2013 13:35 |
цитата: Разрешите два вопроса. Являетесь ли Вы разработчиком Мультиклета? Имеет ли смысл реализовать в Мультиклете аппаратную поддержку микроядра L4? Добавление от 02.02.2013 13:45: цитата: Давайте не будем столь строгими. Насколько можно понять из обсуждения, то сумма, полученная разработчиками, несколько не дотягивает до 300 миллионов рублей. Но дело даже не в этом - судя по всему, разработка компонентов микропроцессора оригинальная, а значит архитектура имеет шанс вырасти во что-то конкурентоспособное - для этого всего лишь нужны настойчивость, немного удачи, деньги и время. Конструктивная критика помогает разработчикам, огульное охаивание лишает разработчиков энтузиазма. |
| 264. xameleon, 02.02.2013 15:34 |
цитата: Потому что шанс и гарантия - это разные вещи. Архитектуру можно переделать, опыт и команда есть, потому и шанс. |
| 267. xameleon, 02.02.2013 16:20 |
цитата: Каким образом работает Linux - в режиме эмуляции x86 или собран нативно под систему команд Эльбруса? Когда будет статья на Хабре? |
| 325. xameleon, 03.02.2013 13:29 |
цитата: А в конфигурации, с которой Вы знакомились, компилятор был? Что говорят команды cc -v и ld -v? Я ведь к чему клоню, если компилятор идёт вместе c системой, то с можно построить небольшой бизнес, просто собирая программное обеспечение GNU для новой платформы. Большой бизнес на сборке чужих программ вряд-ли можно построить, но небольшой стартовый капитал для какого-либо проекта вполне можно "насобирать". |
| 330. xameleon, 03.02.2013 15:01 |
цитата: При переносе софта на новую архитектуру иногда приходится использовать "напильник". Здесь малый тираж может сыграть и некоторое преимущество - пересечение множеств "владельцы Эльбруса" и "обладатели напильника" - может быть мало. :) Т.е. если "./configure; make; make install" не дало результата, то вот тут появляется некоторая возможность "насобирать на пиво". |
| 354. xameleon, 04.02.2013 14:22 |
цитата: Можно подробнее о контроллере памяти? Будет ли поддерживать страничную память и каков размер страниц? Добавление от 04.02.2013 14:24: цитата: Не подскажите, чем отличается процессор за 39500 рублей от процессора за 665 рублей? |
| 363. xameleon, 04.02.2013 18:24 |
цитата: Большой и перпективный рынок. Прибавьте сюда станки с числовым программным управлением, роботизированные линии и всё такое. |
| 366. xameleon, 04.02.2013 19:13 |
цитата:К сожалению - я также не осведомлён. |
| 504. xameleon, 08.02.2013 12:57 |
Leka, наверное я немного не по теме. Покажите пожалуйста объявление на Verilog большого регистрового файла. Вот чего-то на меня накатило - может буду пилить свой процессор, если не отпустит :). |
| 506. xameleon, 08.02.2013 13:57 |
ElbrusFanV2 Спасибо. Вчера пересмотрел на opencores.org почти все 16-ти и 32-х разрядные процессоры. Более-менее готовых и интересных нашёл штук 5. Не могу остановиться на какой-либо реализации - с одной стороны чувства требуют описать свою систему команд, а разум говорит - даже не думай это делать без компилятора. Причём, чем больше узнаю, тем больше вопросов появляется. |
| 567. xameleon, 11.02.2013 17:35 |
цитата: Зачастую многие хорошие идеи губит требование обратной совместимости с уже существующими решениями. |
| 906. xameleon, 06.03.2013 00:16 |
цитата: Уворуют? Смешно. Кто? Развивайте идею - интересно же. |
| 1065. xameleon, 14.03.2013 15:41 |
Что-то тема заглохла. Одна из немногих тем, которую действительно интересно почитать и приятно поучаствовать. А что будет, если я скажу, что тоже задумал спроектировать микропроцессор? Только... к этой задаче я подошёл с написания компилятора языка Си (Си с классами, но без темплейтов), над котором бьюсь уже почти два месяца. Некоторые подробности о компиляторе можно почитать здесь - http://mandrykin.livejournal.com/16765.html Что касается системы команд микропроцессора, то больше всего это похоже на CISC, но размер команды упакован в нескольких первых битах и уже из первого байта о размере команды известно всё. Ах да, моя цель и мотивы несколько отличаются от целей и мотивов других разработчиков - имееется прототип операционной системы и имеются намерения ввести аппаратную поддержку микроядра в микропроцессор. Кстати, синтаксический анализатор готов где-то на 80% от языка Си. Т.ч. если затея с оригинальным микропроцессором не выгорит, то по крайней мере появится ещё один неоптимизирующий компилятор для 80386, с возможностью быстро и с минимальными трудозатратами "прикрутить" поддержку любого микпроцессора. |
| 1067. xameleon, 14.03.2013 16:18 |
Felid Я пока не выкладывал в общий доступ. Проектировал в MS Excel - вывел в двоичной системе 256 байт, затем с помощью цветов групировал и перегруппировывал. Где-то за пять итераций удалось сгруппировать. В соседний теме, ssvb подсказал: "Попробуйте в качестве источника вдохновения посмотреть на ARM Thumb2. Там можно очень быстро и легко отличить двухбайтные инструкции от четырёхбайтных." В принципе, от этой идеи и отталкивался. Формально описать можно так: Если три старшие бита равны нулю, то это однобайтовая команда. Получилось 32 однобйтовых команды. Иначе, если старший бит равен нулю, то это двухбайтовая команда - 96 двухбайтовых команд. Если старшие три бита равны 1-0-0, то это трехбайтовая команда - 32 трехбайтовых команды Если старшик три бита равны 1-0-1, то это четырехбайтовая команда - 32 четрыхбайтовые команды Если старшие четыре биты равны 1-1-1-1, то это пятибайтовая команда - 16 команд. Кроме этого остался резер - немногим более 50 байт, которые не являются командами и могут быть использованы для дальнейшего расширения системы команд. Документ не выкладываю в публичный доступ не потому что жалко, а потому что он ещё довольно сырой и может дать неправильное представление об идее. Когда всё устаканится - обязательно опубликую. |
| 1071. xameleon, 14.03.2013 16:58 |
цитата:Вероятно Вы правы, я пока не буду ни настаивать на своём решении, ни соглашаться. цитата:Да я как бы не мальчик уже - в январе 40 лет исполнилось. Ну вот хочется мне сделать карманный компилятор - никто же не запретит. А микроядерную ОС я уже лет 11 пишу в свободное время. Почему бы не попробовать силы в написании компилятора? Что касается LLVM, то его не рассматривал из за его громоздкости. Те же два месяца, которые портратил на лексический и синтаксический анализ, ушли бы только на изучение LLVM - из области "день потерять - за час долететь". Приблизительно то же самое можно сказать и о gcc, только ещё лицензия не самая благоприятствующая для коммерции. Что там в остатке? Оптимизация? Оптимизация на уровне синтаксиса - не такая уж и неподъёмная задача - например, сворачивание констант в выражениях проще пареной репы. Вывод инвариантов за пределы цикла - сложнее, но тоже можно осилить. А вот машинно-зависимая оптимизация - не уверен, что все предолженные решения могут сильно помочь при оптимизации кода под конкретную систему команд. Хотя могу и ошибаться. В любом случае - создание компилятора проще по сравнению с созданием микропроцессора, т.ч. если не осилю его, то нет смысла браться за микропроцессор. цитата:Думаю, verilog описание я смогу сделать на энтузиазме, вот насчёт реализации "камня" - идей нет. Как вариант - прийти с поклоном в http://zeptobars.ru и предложить свои наработки и услуги. А что? Тоже вариант. |
| 1073. xameleon, 14.03.2013 17:10 |
цитата: POSIX. Пользовательский интерфейс - командная строка и ANSI графика. |
| 1075. xameleon, 14.03.2013 18:42 |
цитата:Я это знаю и не спорю. Только учтите один момент - для меня важно собрать этим компилятором три вещи: 1) самого себя; 2) код Хамелеона; 3) микроядро L4Ka Pistachio. Собирать Linux и uClinux - такой задачи не стоИт. Поддерживать расширения gnu - тоже задачи нет. По большому счёту, если Pistachio не соберётся, то даже это не проблема, потому что для традиционных платформ gcc никто не отменял, а "L4 микропроцессор" должен аппаратно поддерживать L4-X2 ABI. Вот чего я никак не могу обещать - машинно-зависимой оптимизации. Сейчас мне эта задача представляется совершенно непосильной. Кстати, насчёт "собрать сам себя". Прежде чем приступить к генерации кода, я решил из дерева синтаксического разбора строить обратно исходный код - таким образом можно существенно облегчить отладку, сравнивая/компилируя восстановленный си-код. Генерации ассемблерного кода не появится раньше, чем восстановленный си-код лексического и синтаксического анализаторов соберётся с помощью gcc и msvc. |
| 1078. xameleon, 15.03.2013 01:16 |
BarsMonster Мне особо нечего возразить - разум соглашается с Вашими доводами, а чувства значения не имеют. Если не возражаете, вернёмся к этой дискуссии, когда мне будет что показать. Тем более, что не исключаю возможность, что не осилю эти задачи. |
| 1087. xameleon, 15.03.2013 14:26 |
цитата: Спецификация L2-X2 - http://l4ka.org/l4ka/l4-x2-r7.pdf По моему скромному мнению, это лучшее, что было придумано в области микроядер - L2-X2 предоставляет минимальные абстракции нитей исполнения, адресных пространств и сообщений. Причём, сообщения это база, на которой строится система любой сложности - системные вызовы, прерывания, исключения, таймеры и синхронизация - всё это реализуется на основе синхронных сообщений. Добавление от 15.03.2013 15:18: цитата: Не могу адекватно судить, как не может мать судить своего ребёнка. :) По возможности старался делать красиво. Большое влияние на систему команд оказала PDP-11, например, команды MOV, XOR, AND, OR, CMP, ADDC, SUBC, XCHG имеют одну из форм, в которой можно указывать постфиксный/префиксный автоинкремент/автодекремент, с возможностью указания смещения. Выглядеть это будет приблизительно так: код: Команды в этой форме займут 4 байта. В то время как обычные формы этих же команд займут 2 байта: код: Скрепя сердце пришлось отказаться от CALL/RET - вместо них используется фрейм вызова, как это принято у RISC процессоров. Поэтому возврат из функции вырождается в нечто вроде код:jmp (R15) // Однобайтовая команда Ещё момент - нет команды перехода по адресу, а только по смещению. Т.е. весь код изначально позиционно независим. Смещение может быть знаковым 8, 16, 24 битным числом. Таким образом, максимально можно перескочить на 8 388 607 байт вперёд или назад. Этого вполне достаточно для 32-х битной системы. Что касается DLL, для которых (якобы) может понадобиться переход по адресу, то необходимость в таком переходе отпадает из за механизма сообщений - если нужно вызвать внешнюю библиотечную функцию - посылаем ей сообщение и ждём ответа. Любой обмен между процессами, нитями, динамическими библиотеками осуществляется только на основе Inter Process Communicationы. Если уж возникла острая необходимость перехода по адресу (ну мало ли у кого какой бзик), то адрес заносится в любой регистр, а потом переход по значению этого регистра. При разработке системы команд большое внимание было уделено группировке команд и модификаторов, чтобы упростить HDL реализацию. Добавление от 15.03.2013 15:36: Упс... А ведь смещение и инкремент/декремент в одной команде смысла не имеют. Как же хорошо иногда бывает отвечать на форумах - сразу "выползают" логические несоответствия. Придётся думать ещё. Добавление от 15.03.2013 15:51: цитата: Спасибо. Эх, если бы чуть раньше бы узнать о его существовании. Когда я искал компилятор, сделанный людьми, говорящими по-русски, то нашёл лишь вот это: http://home.perm.ru/strannik/ и вот это http://www.interstron.ru/developers_means2.html Оказывается, есть ещё. |
| 1094. xameleon, 16.03.2013 00:10 |
цитата:Адрес возврата кладётся вместе с аргументами функции в фрейм вызова. Т.е. была идея не использовать определённый регистр для указателя стека, а сделать указатель стека по соглашению. Однако, очень меткий вопрос, спасибо. Попытался привести пример, но обнаружил логическую ошибку в дизайне системы команд - без инструкции CALL появляется необходимость в дополнительных командах, которые кладут адрес возврата во фрейм вызова. Но это пол беды, многие же как-то живут без CALL. Проблема вылезла в другом - я не предусмотрел доступ к счётчику команд, поэтому адрес возврата для фрейма вызова может знать только компилятор, а это уже удар по позиционной независимости кода. В итоге получилось кривое решение, требующее трех операторов вместо единственного CALL. Т.е. заставить работать можно, но было бы неоптимально и криво. В принципе, есть окно неиспользуемых кодов с 0xC0 по 0xEF, можно часть из них использовать для CALL. Пользуясь случаем, хочу спросить мнение уважаемых специалистов - какими мотивами пользуются разработчики микропроцессоров, отказываясь от CALL? Я поддался моде и наступил на грабли. А в чём преимущества фрейма вызова? Какие аргументы за? На самом деле вопросов гораздо больше, например, дилемма относительно указателя стека - использовать ли один из регистров общего назначения в качестве указателя стека или задействовать теневой регистр в этом качестве. С одной стороны, если задействовать один из РОН под указатель стека, то некоторые сочетания потеряют смысл - например, умножение на указатель стека бессмысленно - это уже нарушает стройность системы команд. С другой стороны, доступ к теневому регистру требует новых инструкций и ломает правило "степень двойки". Мне кажется, что в любом случае можно решить проблему с указателем стека. Если поместить его в область РОН, то недоступимые команды можно использовать для каких-то будущих целей - например расширения системы команд. Если задействовать теневой регистр для указателя стека, то хранить его можно в Task Control Block - расширении регистрового пространства, отвечающего за многозадачность и передачу сообщений. Искренне надеюсь, что никого не утомил этим длиинным сообщениеи. Добавление от 16.03.2013 01:55: цитата: Момент в том, что передача сообщений должна осуществляться коммутацией блока регистра сообщений. Отсюда следует два варианта. Первый вариант: Запрашивающая задача и DLL исполняются на одном ядре. Задача, реализующая функциональность динамической библиотеки, находится в "кеше состояния задачи". В этом случае вместо регистров сообщений, исполнительное устройство перекоммутируется на РОНы и Task Control Block (TCB) задачи, выполняющей функции DLL. Второй вариант: Запрашивающая задача и DLL исполняются на разных ядрах. Регистры сообщений перекоммутируются от запрашивающей задачи к задаче, выполняющей функции DLL. "Бутылочное горлышко" данного решения - это случай, когда задача DLL не находится в "кеше состояния задачи". В этом случае может получиться действительно медленно - придётся выгрузить состояние (РОНы и TCB) какой либо задачи из кеша в ОЗУ, а затем подгрузить состояние задачи, выполняющей функции DLL. Нивелировать данную проблему можно увеличением размера кэша состояния задачи, чтобы часто используемые функции как можно дольше держались в нём. Кроме того, не имеет смысла помещать в DLL простые и короткие функции. Имхо, в динамических библиотеках место только полноценным функциям, выполняющим какую либо сложную логическую задачу. цитата: О, Sun! Эти ребята умудрились в Solaris (или это был Sun OS?) на каждый userspace thread создавать kernelspace thread. Хуже придумать нельзя - ведь в таком случае микроядро становится лишним слоем. Я могу это доказать - при таком подходе сообщения вырождаются в системные вызовы (а значить пропадает их суть), но при этом никуда не пропадает необходимость синхронизации kernel threads. Фишка правильного использования синхронных сообщений как раз в том, чтобы обрабатывать сообщения на уровне ядра в одном потоке - необходимость синхронизации отпадает и требования к ресурсам значительно снижаются. Давайте рассмотрим как бы мог выглядеть вызов printf("Hello world!\n"); на примере "L4 процессора". 1. Инструкция блокировки буфера сообщений 2. Инструкиция установки тега сообщения 3. Установка указателя на строку сообщения в регистре 1 буфера сообщений. 4. Команда Inter Process Communications В этот момент происходит передача управления "ядру" системы, которое обрабатывает команду. После обработки команды происходит ответное сообщение. Допустим, нас интерсует, сколько байт вывела команда printf. Продолжаем. 5. Анализ тега сообщения. 6. Переход, если ошибка 7. Выбор регистра 1, хранящего результат выполнения функции printf 8. Разблокировка буфера сообщения. Какой overhead мы получили по сравнению с традиционными методами? Инструкции блокировки/разблокировки буфера сообщений и инструкции работы с тегом сообщения. Т.е. пункты 1,2,5,6,8 - это есть overhead. С первого взгляда это кажется ужасно неэффективным, но чем больше передваемых параметров (максимально - 63 регистра), тем overhead падает. Где же обещанный выигрыш? А выигрыш в том, что при таком подходе отпадает необходимость в синхронизации потоков. "Лишние" пять команд при обмене сообщениями с лихвой компенсируются отсутствием семафоров, защёлок и критических секций на уровне ядра. Если 10 задач одновременно в 10 потоков каждая, будут вместе выводить, например, "Hello world", то "ядру" системы не придётся защищать ресурсы от одновременного доступа. Наконец самое вкусное. Если все вызовы обрабатываются синхронно и последовательно, то откуда взялись заявлени о realtime и почему всё не должно тормозить и блокироваться? Здесь долгая история, начавшаяся с того, что ожидание ввода с клавиатуры блокировало всю систему - все последующие вызовы в конкурирующих потоках/задачах ждали завершения обработки блокирующего вызова. Обратите внимание, что понятие "ядро" я брал в кавычки. Фактически, ядро это множество программ, блокированных в ожидании события. Представьте путь, который проходит системный вызов: Прикладная программа --> файловая система --> драйвер --> файловая система --> прикладная программа. Точка блокировки находится в ожидании файловой системой ответа от драйвера. Решение заключается в том, чтобы в точке ожидния ответа продолжать слушать последующие запросы от других прикладных программ. По формату сообщения всегда можно определить, что это - запрос от пользовательской программы или ответ от драйвера, соотвественно, вводим понятие контекста и переключаем контекст на основе полученного сообщения. В результате получаем неблокирующуюся систему с гарантированным временем отклика. Кто теперь вспомнит о пяти лишних командах, задействованных при передаче сообщения? |
| 1099. xameleon, 17.03.2013 14:52 |
цитата:Да да да. В Хамемелоне printf заработал по стандарту POSIX где-то в 2006-2007 году. Просто в пылу спора я привел неудачный пример. В моём случае printf выделяет буфер на стеке, вызывает vsnprintf, а сконструированную в буфере строку выводит с помощью write в дескриптор, который соотвествует stdout (кажется единица, надо в сырцы глянуть). Каюсь, в горячке спора привёл неудачный пример. В потдтверждение своих слов код из libc Хамелеона. Старый добрый printf код:А это puts. Он простой как три копейки. код:Логика работы fputc зависит от того, пишем в символьное устройств или в файл. Размумеется, буферизируем всё как умеем. код:Обращение к ядру происходит только в функиции write. код:Собственно функция L4_Call и есть та функция, которую я предлагаю заменить инструкцией "Inter Process Communication". А структура L4_Msg_t - это буфер сообщений, который предлагаю разместить в процессоре и коммутировать при передаче сообщений. Функция L4_Load заменяется инструкцией захвата буфера сообщений, функция L4_Store - заменяется инструкцией освобождения буфера собщений. L4_Set_Label - установка регистра 0 буфера сообщений. L4_Append - установка любого регистра буера сообщений. L4_Get - чтение регистра буфера сообщений. Конечно, я не могу и не имею права сказать, что Хамелеон полностью поддерживает POSIX, но к примеру, Demos Commander (собранный для POSIX) and Almquist shell он исполняет. Можно, конечно, побить меня за качество кода, но пусть бросит в себя камень тот, кто скажет что первые 5 лет жизни Линукса его код был красивым и стройным. Добавление от 17.03.2013 15:11: цитата: Вы меня окончальельно убедили. Инструкции CALL - быть. Тем более, что с учётом различной разрядности сещения 8/16/24 бита, надо ещё знать, на какое значение увеличить Instruction Pointer. цитата: Очень интересная идея c RP. Насолько я понимаю, таким образом Вы разделяете код и данные? Так сказать - дополнительный уровень защиты? А можно ли чуть подробнее об этом? Используется ли в каких либо процессорах отдельный стек для адресов возврата? Если не затруднит, хотелось бы больше информации о преимуществах и недостатках разделения стека по данным и вызовам. цитата:Для упрощения адресации, чтобы исключить сложную арифметику, заменив её сдвигимами. И чтобы не было "дырок" в битовых полях, указывающих индекс регистра. Что касается "теневого" регистра, то виноват. С терминологией у меня часто бывают казусы, но я работаю над собой, чтобы не словоблудить. |
| 1120. xameleon, 29.03.2013 05:27 |
Новости с выставки будут, или информация только для избранных, кто может себе позволить посещение выставки? |
| 1151. xameleon, 01.04.2013 20:25 |
Упс. Простите, я как-то не учёл, что сегодня день хохм и шуток. Со всей серьёзностью заявляю - это сообщение не шутка и вообще "насрать на первое апреля". Пусть дети и дураки веселятся, а адекватные и целеутремлённые люди продолжают заниматься серьёзными вещами. А слышали ли вы об оригинальном микропроцессоре на основе платы Марсоход-2 (FPGA based)? Один весьма скромный человек, который называет себя Николай, разработал RISC микропроцессор и даже научил компилятор LCC генерировать код для него. Вот что говорит автор: цитата:Удивительно, но автор совершенно не пропагандирует своё творчество. Насколько мне известно, единственное место, где он рассказывает о своей разработке, это форум марсохода: http://marsohod.org/forum/index.php?option=com_kunen…1419&Itemid=2 Если пойдёте по ссылке, то обнаужите описание, исходный код на VHDL, ссылки на демонстрационное видео (весьма убедительное, имхо) и патчи к компилятору LCC. Каюсь, я засветился в той теме, агитируя автора реализовать расширение процессора для микроядра L4. Мои коментарии можете смело пропускать. Одного не пойму, почему автор настолько скромен? Может быть это хитрый план? Насолько я могу судить, он проделал огромную работу и во многом даже обогнал конкурентов. Что вы думаете о его разработке? |
| 1157. xameleon, 02.04.2013 16:17 |
цитата: Возможно я упустил. И всё же меня приятно удивляет это человек - сумел в одиночку сделать процессор, ассемблер, доработать компилятор и написать несколько демок, это очень круто. А ещё меня удивляет "холодность" специалистов - создаётся впечатление, что всем пофигу. Хотя бы кто-нибудь высказал своё мнение - хоть критику, хоть дифирамбы. Отсюда можно сделать вывод, что разработка хороша, потому что народ, который в своё время тоже хотел сделать нечто подобное, но не осилил, старается не замечать того, кто смог. Тем более что электроники весьма специфичные люди, с очень высокой самооценкой, которая не позволяет признать чужие заслуги. |
| 1163. xameleon, 02.04.2013 20:42 |
цитата: Ага. Видел Вашу переписку в обсуждении "Свои процессоры". Ну так с тех пор "много воды" утекло - тогда компилятора не было и исходники, которые он выкладывал, устарели. На форуме Марсоход более свежие версии. Добавление от 02.04.2013 20:44: цитата: Так это даже больше чем процессор. |
| 1168. xameleon, 03.04.2013 01:21 |
alpha, ну так больше, за счёт дополнительного обвеса. Т.е. формально - просто процессор с некоторыми контроллерами. цитата: Наверное сам по себе этот процессор мало кому нужен. Хотя, если постараться, то применение найти можно. Интересен потенциал разработчика. Я хоть и не большой специалист в HDL, но с точки зрения программиста оценить могу. На мой скромный взгляд, процессор где-то на уровне ARM2-ARM3 (могу ошибаться). Ниже я написал о-о-о-о-очень дли-и-и-и-и-нный ответ, а потом... стёр его. Всё равно никто не оценит. Добавление от 03.04.2013 02:14: цитата: Я заранее прошу прощения за отклонение от темы и за мнение, идущее вразрез с мнением большинства участников, но есть один момент - целеустремлённость автора. Тот же Эльбрус (который не SPARC, а который оригинальный) не имеет "отца", а если и имеет, то его детище ему не принадлежит. В то время как разработчик, который владеет своим детищем, имеет колоссальную мотивацию. И эта мотивация способна сдвинуть горы. "Выстрелит" ли Эльбрус? Не знаю, но если бы Борис Бабаян имел контрольный пакет акций, то судьба у Эльброс была бы другая. А ещё лучше, если бы Всеволод Бурцев был отцом и владельцем компании (да, я понимаю, что при социализме частная собственность на средства производства невозможна, просто мысли). Что касается трудозатрат, то мало кто может представить, сколько энергии может потратить "фанатичный разработчик" - отдых, семья, развлечения - всё это может уйти на второй план когда автор одержим идеей. Нет другого стимула заставить человека выложиться на 100%, кроме как одержимость своей собственной разработкой. А если добавить к этому финансирование и наёмный труд, то автор вполне сможет мотивировать работников. Практически любая современная успешная корпорация выросла из таких вот одержимых авторов. цитата: Интересно и познавательно, жаль что VHDL - мне Verilog нравится больше. |
| 1182. xameleon, 03.04.2013 23:31 |
цитата:Суперзвёзды, это скорее Intel, AMD, ARM и MIPS. Более корректное сравнение ЗАО МЦСТ - футбольный клуб при (крупном) заводе. Неееет. В этой игрё всё не так. Бабаян грозился сделать "убивцу Интела". Сделал? Нет. Наоборот, часть разработчиков перешло под крыло Интела. Что может потерять руководитель ЗАО МЦСТ? Самое страшное - понизят в должности и урежут госфинансиование, плюс свернут какие либо разработки. А что бы было, если бы МЦСТ таки заборола Интел? Премия разработчикам, медалька на шею генеральному конструктору и хвалебные передачи по Первому каналу. Профит в случае удачи невелик, как и невелики потери в случае поражения. А если бы это была действительно частная компания? В таком случае совсем другая игра - проигравший может лишиться всего - дома, семьи, друзей и закончить свою жизнь в картонной коробке на улице. Но в случае успеха всё становится наоборт - яхты, спортивные автомобили, самолёты и дворцы - всё к ногам победителя. Разумеется, я утрирую. Но общий смысл понятен - играешь по-мелкому - мало теряешь и мало приобретаешь. Играешь по-крупному - всё или ничего. Так какой смысл напрягаться и напрягать других, если разница между успехом и поражением условно говоря ничтожна? цитата:1. Демонстрируют прототип, а не мотивацию. 2. Удачный прототип может заинтересовать инвесторов. 3. $100 000 000 - ни один инвестор не даст. Такую сумму можно попытаться собрать только выпустив акции. И то не факт, что в России это возможно. После МММ, "Хопёр Инвест" и прочей шелупони - ни один здравомыслящий человек не понесёт свои кровно заработанные деньги в команию, которая может оказаться очередным лохотроном. Для производства 20нм действительно нужно 100млн или сумма с потолка? Кстати, я сейчас использую довольно старый AMD Athlon 64 3000+. Если Интернет не врёт, это техпроцесс 90нм. Этого камня мне вполне хватает для РАБОТЫ, тем более что я его не покупал, а работодатель любезно предоставил мне компьютер. Поймите меня правильно - я ничего не имею против команды, разрабатывающей различные семейства Эльбрусов и ничуть не сомневаюсь в их компетентности, но если бы эта команда работала на "капиталиста", то я уверен, она бы смогла показать лучший результат. Добавление от 04.04.2013 00:02: цитата:Если вспомнить Open Office, то он устанавливается почти везде, где можно запустить X Window System. А это практически любая POSIX совместимая система. цитата: Я согласен с Вами, но только отчасти. Не согласен с подходом. Если взять любой современный микропроцесоор, то все возможности он приобрёл в результате эволюции. Отрицая отечественных "кулибиных", Вы автоматически ставите крест на эволюции. Невозможно на пустом месте сделать совершенный процессор, способный конкурировать с лидерами индустрии. Взять, к примеру, "Мультиклет" - несмотря на заявления разработчиков, мы все понимаем, что в нынешнем виде его нельзя ставить в один ряд даже с младшими моделями лидеров. Но "Мультиклет" имеет шанс вырасти во что-то серьёзное, если продолжит развиваться и пройдёт такой же путь, который прошли 8086, ARM и MIPS. |
| 1185. xameleon, 04.04.2013 12:02 |
цитата:Да я всё понимаю - перестройка, развал Союза, перманентный кризис. Мой посыл в другом - если бы лидер этого коллектива, который стоял у истоков компании, владел бы (именно владел, а не был назначен по указке сверху) контрольным пакетом акций предприятия, то история бы развивалась иначе. Всё-таки частная собственность делает чудеса. Не верите? Загляните в историю любой известной западной компании - практически все они выросли из нескольских инженеров-энтузиастов или учёных. Но Вы не найдёте ни одной успешной компании, которая была создана решением правительства или богатым дилетантом. цитата:С этим совершенно согласен, но тут ничего удивительного нет. Не может маленькая компания конкурировать с крупной корпорацией. Единственный путь для "Мультиклета" - развиваться быстрее лидеров. Тот путь, который прошёл Интел за 30 лет, пройти за 10. цитата:Не хочу спорить об эффективности государства. Вероятно, государтсво может быть эффективным, но частный бизнес БОЛЕЕ эффективен. "Жажда наживы" более сильный стимул, чем похвала. цитата:В классическом "капиалистическом обществе равных возможностей" игроки могут организовать свой клуб. Имхо, мы слишком углубились в аллегории. Считаю, что сравнение наукоёмкого бизнеса некорректно с бизнесом на нефти и мелкооптовой торговлей. Я всё же прошу обратить внимания на истории создания корпораций, производящих высокотехнологичную продукцию. Причём, что характерно, частная инициатива движет не только микроэлектроникой, но и автомобилестроением и другими отраслями. Прошу понять меня правильно - я не утверждаю, что любой инженер может создать успешную компанию. И дело даже не в том, что хороший инженер может быть плохим бизнесменом. Для успешного бизнеса нужна конкуренция. Но конкуренция не с корпоративными монстрами, а с такими же маленькими компаниями. Например, можно было бы говорить о перспективах отечественной электроники, если бы таких компаний как "Мультиклет" было бы пару сотен. Рынок вскоре отсеет слабых, а те, кто смог удержаться на плаву, конкурировали бы между собой. Более сильные компании поглотили бы слабых. Затем идёт насыщение внутреннего рынка и выход на международный. Вы легко найдёте подтверждение моих слов, изучая истории создания успешных западных и дальневосточных компаний (Япония и Корея). В озвученной выше концепции есть один недостаток - как многие заметили, рынок микроэлектроники уже насыщен дешевой и качественной продукцией зарубежных компаний. И этот факт ставит крест на надежду становления микроэлектронной промышленности России. В таких условиях развиваться невозможно. Возможно, решение проблемы есть, только мне оно неизвестено. Может быть создание искусственого спроса на такие изделия? Но как? |
| 1187. xameleon, 04.04.2013 12:27 |
цитата:Ну дык, Вы же знаете - думаю, аппаратное микроядро L4, внятная система команд, хороший С/С++ кросс-компилятор и хотя бы 500 Мгц. (не, лучше гигагерц) вызвали бы желание сменить процессор. Только... я ведь всё же программист - новый процессор, это новый хлеб для программистов. ой, немного не так. Я бы не менял текущий процессор, потому что "сижу на игле" MS Visual Studio. Это самая главная причина. Если кто-нибудь создаст сравнимую среду разработки, то ничего меня не будет держать на x86/amd64. Более того, даже когда пишу что-либо под Linux, всё равно прототип делаю в MSVS. И даже при после переноса прототипа на POSIX своместимую платформу, использую MSVC как редактор кода (слава создателям Samba). И если на целевой платформе вдруг обнаруживается баг, то с помощью #ifdef код возвращается обратно в MS Visual C и отлаживается как консольное приложение Windows. Это самый оптимальный вариант для отлаживания низкоуровневых вещей и протоколов. Добавление от 04.04.2013 12:31: цитата:Ага. Нефть в обмен на продовольствие. Ключевое слово - зарубежные. Туземцы тоже меняли золото на бижутерию, и где теперь эти дикари? |
| 1189. xameleon, 04.04.2013 13:36 |
MIC user, корень проблемы в менталитете граждан. Но раз уж Вы высказали своё мнение, то предложите Ваш вариант решения проблемы, а именно - вывода российской микроэлектроники на мировой уровень. Или предлагаете смириться и "забить"? |
| 1244. xameleon, 05.04.2013 13:12 |
Хе-хе. Весёленькое обсуждение. После вчерашнего спора и испорченного настроения, хотел опубликовать здесь черновик системы команд с аппаратной поддержкой микроядра L4. Ну то есть то, что обещал месяц назад. Так сказать - вынести на суд общественности, похвастаться, учесть критические замечания и позаимствовать ваши идеи. В результате день ушёл на доработку документа. В результате "доработки", как обычно, велезла масса ошибок, мелких проблем и мест, которые срочно требуют оптимизации. Поэтому публикация системы команд в очередной раз откладыается. Чтобы сконцентироваться на оптимизации наиболее часто используемых инструкций, в процессе переработки решил очередной раз глянуть статистику - какие команды гененрирует (из моих исходников) компилятор gcc для amd64. До этого тысячи раз пристально вглядывался в ассемблерный код, но никогда особо не задумывался, какие команды используются наиболее часто. Результат обескуражил - безусловный лидер - различные формы команды MOV, на втором месте команды сравнения и условных переходов, третьи по частоте - арфиметические команды, сдвиги и логические операции. Команды вызовов подпрограмм занимают четвёртое место. Причём, методы С++ классов активно используют адресацию от регистра со смещением (this + смещение функции). Отдельно стоят операции работы со стеком - пролог и эпилог функции - push и pop соотвественно. Пожалуй, большую часть инструкций x86 компилятор не использует вообще! За всю практику ни разу не видел, чтобы компилятор использовал инструкции LOOP, SCAS, STOS и им подобные, а префикс REP видел только во вручную написанных библиотечных функциях. Тут следует оговориться - я практически никогда не использую операции с плавающей запятой, потому что в системном программировании они нужны очень очень очень редко. Кстати, о математическом сопроцессоре. В соседней теме, где сравнивают x86 c конкурентами, в процессе обсуждения родилась идея, использовать "интеллектуальный" сопроцесср, который с помощью CPU "кормится" сложными математическими выражениям в форме Обратной Польской Записи, а ответ возвращается так же в виде сообщений. Имхо, удачная идея - потому что можно получить профит на числодробильных задачах, посылая математическому сопроцессору на последующих итерациях только изменённые коэффициенты, если каким-то образом сказать сопроцессору помнить выражение с предыдущей итерации. Кроме того, такой подход позволяет иметь неограниченное число сопроцессоров, управляемых центральным процессором - это свойство сообщений. Однако, в этом случае появляется новая неприятная проблема - эту стройную идею ломают циклы с итераторами с плавающей запятой. Например, вот такой: код:Хотя... если подумать, то можно, наверное, ввести в систему команд математического сопроцессора поддержку выражений для циклов. В этом случае вместе результатами расчёта математического выражения в ответном сообщении можно возвращать и логическое значение условия выхода из цикла.for ( double f=0.0; f <= 1.0; f += 0.01) Т.ч., уважаемые господа, очередные вспышки на Солнце или следующий спор о мироустройстве, могут сподвигнуть меня на публикацию "идеальной системы команд" для "идеального микропроцесора". |
| 1246. xameleon, 05.04.2013 13:57 |
цитата: Так это же отлично! Это лишнее подтверждение того, что x86 содержит в себе массу legacy функциональности, которая лишь занимает площадь на кристалле. Требование совместимости - хороший якорь, который тормозит любую разработку, будь то железка или софт. цитата:Мы это уже обсуждали :) x87 не умел оперировать сложными выражениями, поэтому и преимуществ не было. Разве он мог хранить инвариантное выражение? Кроме того, если не ошибаюсь, команды для x87 располагались в той же области памяти, где и команды CPU. Я же имею несколько другое - не располагать в программном коде команды сопроцессору. С точки зрения процессора, арифметические выражения и сами числа - это просто набор байт, который с помощью сообщения передаётся сопроцессору. Если провести очень грубую аналогию, то с точки CPU, математический сопроцессор, это "чёрный ящик", которому что-то передаётся и в отвеет что-то возваращается. Микропроцессор вообще ничего не знает о семантике команд сопроцессора. Фактически, даже нет необходимости использовать ОПЗ, например, сопроцессор может быть настолько интеллектуальным, что будет сам переводить из привычной человеку нотации в ОПЗ. Т.е. использование ОПЗ удобно и оптимально, но совсем не принципиально с точки зрения организации взаимодействия устройств. |
| 1249. xameleon, 05.04.2013 14:30 |
цитата: Признаюсь, я не силён в операциях с плавающей запятой - они вне области моих интересов. А по основной работе, за счёт которой и существую, просто использую не задумываясь, как оно устроено на низком уровне. Однако, есть подозрение, что на тестах именно предложенный подход покажет исключительную производительность. Дело как раз в том, что вычисляемое выражение после первой итерации _уже_ расположено в сопроцессоре. Что проще? Каждый раз заново выбирать полностью математическое выражение или просто обновить несколько коэффициентов? Думаю, ответ очевиден. И распараллеливание. Не зря же сейчас используют видеокарты для тяжелых вычислительных задач. Это очень близко к проповедуемой мной идее. Отличие лишь в том, каким образом происходит взаимодействие CPU и вычислительного устройства. |
| 1255. xameleon, 05.04.2013 16:53 |
цитата:А это уже интересный вопрос. Очень любопытно, на каком классе задач встроенный сопроцессор имеет преимущество перед GPU? Подкину дровишек в тему. Серверные примемения легко обходятся без плавающей запятой. Имхо, транзисторы, занятые сопроцессорм, в серверных конфигурациях гораздо оптимальнее задействовать для аппаратного ускорения TCP/IP - аппаратно считать контрольные суммы, считать/хранить хэши таблицы маршрутизации и т.д. Для физических, химических и биологических расчётов, а так же для компьютерной графики GPU - лучшее решение. Что остаётся на долю FPU? Вопрос без иронии, на самом деле интересно. |
| 1405. xameleon, 08.04.2013 12:40 |
цитата: Не на Linux, а на Xameleon. За это сообщение сказали спасибо: vss |
| 1408. xameleon, 08.04.2013 13:38 |
цитата:MMU активно используется для вызова sbrk (который меняет размер кучи (heap)) - системный вызов sbrk в Хамелеоне подгружает виртуальные страницы к адресному пространству процесса, если при выделении памяти (malloc) не находится "дырки" достаточного размера. Здесь ничего нового, так поступают все известные мне системы. Второе место, где активно используется виртуальная память - область данных процессов и нитей. Сделано это через "page stream", область памяти которая растёт по мере увеличения числа задач/потоков. Этот код легко заменяется на статически выделенную область памяти под заранее заданное количество процессов/потоков. Подход "пула виртуальных страниц" для хранения свойств процессов выбран для увеличения быстродействия. Таким образом максимально быстро происходит выборка соответствующей структуры по номеру задачи - номер задачи является индексом массива, а вся работа по организации плоской линейной структуры приходится на MMU. В принципе, можно сделать версию без MMU, но при этом потеряется некоторая функциональность. Т.е. для встраиваемых применений вполне реально сделать версию без MMU. А вот для систем общего назначения без MMU никак. |
| 1492. xameleon, 09.04.2013 21:30 |
цитата: Новое и интересное это аппаратный планировщик, регистры сообщений и MMU с поддержкой flexpages. Причём, эти новшества никак не отменяют и не (сильно) противоречат модным тенденциям - конвеерам, предсказателям и Out of Order execution. Наоборот, с ростом числа ядер растут преимущества от модели взаимодействия через синхронные сообщения. |
| 1498. xameleon, 09.04.2013 23:05 |
цитата:На практике этим серьёзно не занимался никто. Изначально был такой миф, над которым долго смеялись немцы: "Ваше микроядро потому быстрое, что маленькое и помещается в кэше процессора". Из ответов на такие утверждения развился целый фольклор. Очень интересно слушать о хреновой производительности того, чего ещё не существует. Имею в виду именно аппаратную поддержку. Что касается прототипа системы, то если есть интерес можете потестировать версию "Concept", которая, собственно, доказывает реальность использования микроядра. Для начала история мифа о "хреновой производительности". Его истоки лежат в организации взаимодействия ядра и прикладного кода. Если "тупо" переложить системные вызовы на синхронные сообщения, то получаются бло-ки-ров-ки. С этим сталкивается абсолютно каждый разработчик. Это природа синхронных сообщений. И решают это проблему в лоб - на каждую пользовательскую задачу/нить создают нить в ядре. Иногда делают сериализацию вызовов, что несколько улучшает производительность. Именно отсюда растут ноги "хреновой производительности" - никаких преимуществ в добавлении лишней абстракции к существующей парадигме обработки системных вызовов. А на уровне ядра, нити, выполняющие всю низкоуровневую работу, так же как и в монолитных системах, продолжают конкурировать за ресурсы и блокируют друг друга. При таком подходе преимущества от реализации системных вызовов через сообщения не может быть в принципе. Т.е. вообще. Интересно, найдётся ли хоть один человек в мире, кто в здравом уме это оспорит? Добавляйте хоть тысячу процессорных ядер, но при таком подходе монолит окажется более оптимален. Решение лежит на поверхности - сколько бы исполнительных ядер не поддерживала система, задачи надо распределить таким образом, чтобы каждая задача, владеющая каким либо ресурсом, исполнялась только на одном ядре. Сложную задачу можно разбить на несколько более простых, но основополагающий принцип - любым ресурсом владеет только одна единственная задача. Таким образом исключаются блокировки, защищающие ресурс от одновременного доступа. цитата:При традиционном подходе, с увеличеникм количества ядер, растёт и конкуренция за ресурсы, а тут уже два варианта - или тупо греть процессор, накручивая спинлоки, или переключать контекст, ломая кэши. Сейчас считается, что покрутить спинлок, это меньшее из зол. А теперь сравните со спокойным последовательным исполнением задачи, где точки блокировки строго определены, а сама блокировка возможна только при ожидании передачи или приёма сообщения. В итоге имеем отказ от спинлоков и детерменированное количество переключений контекста, которых по определению меньше, чем при конкурентной борьбе за ресурсы. |
| 1518. xameleon, 10.04.2013 13:40 |
Boris Usievich Таки непонятно, убедили ли Вас мои аргументы о премуществе аппаратного микроядра или нет? К предыдущему посту хочу добавить, что в случае аппаратной реализации микроядра как части процессора, накладные расходы на обмен сообщениями сравнимы с обычным вызовом CALL. Ценой нескольких дополнительных тактов на процедуру "Inter Process Communication", которая реализуется как новая инструкция в системе команд, мы исключаем потери на синхронизацию и полуаем массу новых возможностей. К сказанному выше, а именно отказу от объектов синхронизации на уровне ядра ОС, можно добавить следующее:
Команда запрета прерываний не нужна в виду того, что обработчики прерываний - такие же задачи, как и любые другие. Достаточно дать наивысший приоритет задаче, которую по какой-то причине нельзя прерывать, и уже ничего её не остановит, пока она не войдёт в фазу обмена сообщениями или не совершит какое либо недопустимое действие. Инструкция HALT становится попросту не нужна. Процессор сам переходит в режим низкого энергопотребления, если все задачи находятся в состоянии ожидания входящего сообщения или в ожидании готовности приёмника. Инструкции инициализации не нужны по простой причине - поскольку задачами управляет аппаратный планировщик, то начальная установка счётчика команд, указателя стека, регистра флагов, таблицы страниц, приотритета задачи и любая другая информация - это всего-лишь сообщение аппаратному планировщику. |
| 1521. xameleon, 10.04.2013 14:39 |
цитата: Спасибо, что на этот раз не проигнорировали. Первое, что я хочу возразить - в мире нет разработок, в которых бы попытались разместить микроядро на кристалле. Если я не прав - буду благодарен, если покажете таковые. А теперь расспотрим предыдущие попытки: Система Minix от Таненбаума. Благо, код первой версии Minix целиком опубликован в его книге о построении операционных систем. Анализируя код первой версии Minix можно с уверенностью сказать, что он и не мог отличаться высокой производительностью - Minix писалась для студентов, большинство мест делались понятными в ущерб производительности. Помимо этого Таненбаум был пионером в микроядерном подходе, многие вещи были реализованы для обкатки идей. С таким же успехом можно сравнивать Windows 95 c Windows 7, как сравнивать Minix с L4 Pistachio. В первом случае мы сравниваем Windows, во втором случае сравниваем микроядра. Теперь посмотрим на GNU Hurd. Я не знаю, но каким-то образом эти ребята умудрились релизовать некоторые вещи через опрос в цикле. Около десяти лет назад я запускал Hurd на Compaq Presario. Как результат - бешенные вой кулера и зависание от перегрева. Как надо реализовать ОС, чтобы в режиме ожидания выжимать 100% процессорного времени? Дальше хуже - один из энтузиастов решил перенести Hurd на микроядро L4. Помню как сейчас его разочарование от результата - Hurd/L4 скушал всю память. А это именно подход, когда микроядро использовалось в виде прослойки для организации системных вызовов. Теперь Solaris от Sun. Эта мысль кажется крамольной, но есть подозрение что Sun сдулся как раз из за огрехов проектирования этой операционной системы. Всё тот же подход - нить в userspace порождает нить в kernelspace. Остаётся только догадываться, как процессоры Sparc и Java помогали держаться компании "на плаву". А теперь более удачный пример - Mac OS X на микроядре Mach. Что бы там не говорили маркетинговые лозунги о гибридном ядре, но Mach это всё же изначально микроядро. А вот гибридный подход, это костыли. Обычные костыли, вызванние недостатками Mach и необходимостью совместимости с предыдущими версиями. Тем не менее ни один маковод не согласится с Вами, что Mach это тормоза. Следующй пример очень удачный и не в Вашу пользу - это микроядро Neutrino и основанная на нём QNX - оно не тормозит и даже realtime. Наконец, микроядро L4 - это абсолют, это квинтэссенция всего лучшего, что было исследовано и открыто в области микроядер. В L4 существует только одна проблема - это перестройка мышления разработчиков, которые собрались его использовать. Чтобы оптимально испльзовать L4 - нужно мыслить категориями синхронных сообщений, а это очень трудно, если всю жизнь использовал асинхронные или не использовал сообщения вообще. цитата: Всё лежит в несколько другой плоскости. У меня есть разработка ядра операционной системы. Микроядро L4 это разработка не моя, а покойного Jochen Liedke, Технического Университета города Karlsruhe, Дрезденского Технологического Университета и Университета Нового Южного Уэльса в Австралии. Я лишь использую их разработки и активно продвигаю идею аппаратного микроядра. |
| 1525. xameleon, 10.04.2013 15:27 |
цитата:Вот картинка, демонстрирующая монолоит, микроядро и гибрид: http://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg Вероятно, Вы её уже видели. Вот именно она и даёт мне право кинуть камень в огород Mach - не надо мыслить категориями kernel space и user space - микроядро L4 предоставляет другую абстракцию - address space. И всё! Только адресные пространства. Только адресные пространства. Только адресные пространства. Это мантра. Адресное пространство - это понятие, реализованное c помощью MMU процессора, а именно таблицы страниц. Нужна максимальная производительность - поместите всё всё всё в единое адресное пространство - и ядро и драйвера и пользовательские задачи. Единственное, что может этому помешать, отсутствие команды относительных условных и безусловных переходов и вызовов. Иными словами, позиционно независимый код может целиком исполняться в едином адресном пространстве. Никаких накладных расходов на поддержку виртуальной памяти. В противовес - можно каждую каждую задачу, каждый драйвер, каждый модуль ядра - всё всё всё поместить в своё собственное выделенное адресное пространство. При этом просядет производительность, но можно доверить писать драйвера школьнику с семью классами образования - его драйвер никогда не повалит операционную систему, не приведёт к kernel panic, не покажет синий экран смерти. И самое вкусное - можно произвольно комбинировать любые сочетания прикладных программ, драйверов и модулей ядра, например, сделав "кривую" схему, расположив все пользовательские задачи в одном адресном пространстве с ядром, а каждый драйвер вынести в отдельное адресное пространство - глупо, но возможно. Более того, можно ключом указывать загрузчику, где размещать каждый модуль - в выделенном адресном пространстве или в контексте другого процесса. Такой гибкости не предоставляет никто. Пора уже, пора отказаться от разделения kernel space/user space - из этого подхода уже выжат максимум и никих революционных изменений уже не будет. Будущее за понятием "Адресные пространства". цитата:Наверняка Вы используете Windows. Нажмите Ctrl+Alt+Del, затем "Запустить диспетчер задач" и Вы увидите, что 99% времени загрузка процессора равна ~0. Подавляющее большинство компьютеров, планшетов, телефонов и даже серверов, большу часть времени заняты выполнением команды HLT. |
| 1533. xameleon, 10.04.2013 17:23 |
цитата:Моя падать не будет, ибо пользовательские задачи и ядро исполняются в различных адресных пространствах. Между тем, подход "всё в едином адресном пространстве" вполне оправдан для встраиваемых приложений. цитата:Ну вот с чего Вы сделали такой вывод? Напротив, я прошу поддержку универсальных виртуальных страниц, чей размер определяется следующей формулой 1024 * 2 ^ N, где N находится в диапазоне от 0 до значения, покрывающего всё адресумое пространство. Микроядро L4 Pistachio эмулирует такие страницы программно, на основе физически поддерживамых архитектурой страниц. цитата:Ага. И начинать с самого начала объяснять народу что такое flexpages, адресные пространства, синхронные сообщения и вообще проводить полный ликбез. Зачем? Кому надо - и так знает/узнает. Вообще-то я Вас хорошо понимаю - это большая психологическая ломка, когда приходится пересматривать традиционные решения - всё внутренне естество сопротивляется, используя при этом накопленные знания. Однако, если хорошо рассудить, то понятие kernel/user space лишь частный случай адресных пространств. Только при использовании адресных пространств у программиста появляется больше степеней свободы. 99% защиты обеспечивается разделением адресных пространств. Что там у нас в остатке kernel space - привелегированные команды? А вспомните - пару ответов выше я предложил напрочь отказаться от таких команд - любое управление процессором должно осуществляться через передачу сообщения аппаратному планировщику. А тот минимум, который необходим для управления процессором - это всего лишь сообщения аппаратному планировщику. Создание или уничтожение адресного пространства, создание, инициализация или уничтожение нити исполнения, привзяка нити к адресному пространству, управление любым режимом работы микропроцессора - всё это реализуется через сообщения аппаратному планировщику. Разумеется, не каждая задача имеет права на управление процессором - если будет интерес, то я расскажу как выстроены привелегии в L4-X2. |
| 1538. xameleon, 10.04.2013 19:47 |
цитата:В этой теме есть надежда, что кто-нибудь из причастных к разработке CPU заинтересуется. Тем более, что запрос на что-нибудь революционное давно читается в глазах участников. :) За это сообщение сказали спасибо: vss |
| 1608. xameleon, 12.04.2013 04:30 |
цитата:Не скажу, что мне легко далось это сообщение, но я разместил его на форуме Мультиклета. Основной документ, описывающий все аспекты микроядра L4-X2, находится здесь: http://l4ka.org/l4ka/l4-x2-r7.pdf На основе более чем 10 летнего опыта использования микроядра L4 Pistachio, появилось представление о том, каким образом аппаратно реализовать спецификацию L4. В результате было создано описание аппаратного планировщика: https://docs.google.com/file/d/0Bzo8HAmNqHgAQ1BJeEc5…/edit?usp=sharing В настоящий момент мы работаем над новой расширенной и исправленной ревизией этого документа. Говоря простым языком, необходима возможность синхронно передать 64 машинных слова между задачами. В данном случае под задачей подразумевается последовательность инструкций процессора, использующая регистры общего назначения, счётчик команд, указатель стека и флаги. Заранее прошу прощения у разработчиков процессора Multiclet, если в этом посте продемонстрирую непонимание приниципов его работы. Рассматривая процессор Multiclet, самым простейшим решением будет передача блока регистров сообщений между клетками. В таком случае получим схему, где каждая клетка выполняет одну единственную задачу. Однако, это простейшее решение не будет оптимальным в виду синхронности. Поясню на простом примере - допустим, пользовательская задача выполняется на одной клетке, а ядро системы на другой. Простейший системный вызов, например чтение данных, в виду свойства синхронности сообщений, заблокирует пользовательскую клетку до получения ответа - таким образом получаем простой пользовательской клетки во время выполнения операции чтения клеткой, выполняющей функции ядра. Решением проблемы "простоя в ожидании" может быть переключение контекста, то есть всякий раз, когда клетка блокируется в ожидании какого либо события, её можно использовать для выполнения другой задачи. Для этого необходимо каким-то образом переключить контекст - сохранить регистры текущей задачи и загрузить регистры другой задачи, незаблокированной в ожиданнии, имеющей наивысший приоритет и имеющей неиспользуемый квант времени. Частный случай такой схемы - задача инициатор сообщения и задача приёмник сообщения выполняются на одной и той же клетке. Для переключения задач могут быть задействованы различные способы, это могут быть блоки регистров, которые коммутируются к клетке, это может копирование регистров в какой либо внутренний кэш или во внешнюю память, а так же может быть комбинация различных методов - с точки зрения программы это несущественно, а важно лишь то, что операция переключения задач может произойти лишь во время обработки сообщения. С точки зрения L4, принципиальный момент в том, что внешние прерывания и аппаратные исключения - это тоже сообщения. Таким образом сообщения являются базовым принципом взаимодействия задач и основным инструментом управления процессором. Свойство синхронности сообщений описывается следующим правилом: "Сообщение может быть передано тогда и только тогда, когда принимающая задача находится в состоянии ожидания сообщения". В противном случае передатчик сообщения блокируется до готовности приёмника сообщения или до истечения таймаута, указанного в сообщении. Для приёмника сообщения действует то же самое правило - он блокируется до приёма сообщения или до истечения указанного таймаута. Время тайматуа задаётся логарифмической величиной с граничными значениями "не ждать" и "ожидать сообщение". В случае нулевого таймаута ("не ждать"), сообщение может быть передано только при условии, что приёмник уже находится в состоянии ожидания, в противном случае команда передачи сообщения вернёт ошибку "Превышено время ожидания ответа". Эта же ошибка будет возвращена, если за время таймаута сообщение не было принято или передано. Оригинальный документ (l4-x2-r7.pdf) определяет три типа данных, которые могут быть переданы в сообщениях - простые нетипизированные слова, строки (в том числе составные) и универсальные страницы памяти.
Что касается возможности портирования на процессор без MMU, то это возможно, но с уходом от POSIX совместимости. Существет главный системный процесс Supervisor, который на основе примитивов L4 реализует управление процессами и виртуальной памятью, попутно реализуя часть стандарта POSIX (fork, exec, sbrk, signal и т.п.). Без виртуальной памяти о POSIX совместимости можно забыть - и копию процесса не создать, и кучу не увеличить. Супервизор сильно завязан на "универсальные виртуальные страницы" и в полную силу использует возможности витуальной памяти. Гораздо оптимистичнее обстоят дела с файловой системой, сетевым стеком и драйверами устройств - они минимально зависимы от виртуальной памяти, а если где и используют динамическое выделение памяти, то практически всегда имеют альтернативную реализацию аллокаторов памяти из статического пула. Т.е. запустить операционную систему на процессоре без MMU возможно, но при этом будет нарушена POSIX совместимость. В настоящий момент система по функциональности лишь приближается к раннему стандарту POSIX, а отстутствие виртуальной памяти ещё дальше отодвинет систему от этого стандарта. |
| 1995. xameleon, 06.05.2013 16:54 |
цитата:Производительность, производительность. А всем ли нужна производительность? Более 15 лет наблюдаю картину, когда обновляешь систему и она начинает тормозить - как минимум больше и больше уходить в SWAP. Доходит до того, что работать становится невозможно. Это касается не только ОС, но и софта, в т.ч. сред разработки. Затем следует апгрейд железа и всё повторяется снова. И таких метаморфоз уже около десятка. Кому нужна производительность? Для каких-то расчётных задач и для игр. Большинству офисных задач достаточно одной десятой от производительности Эльбруса. Не хватает памяти и мегагерц? Пишите оптимальный код, используйте продвинутые алгоритмы, оптимизируйте "узкие места" вручную, считайте такты. Добавление от 06.05.2013 17:01:
Добавление от 06.05.2013 17:06:
|
| 2031. xameleon, 07.05.2013 15:30 |
цитата: Будьте добры, скажите, что за системы пишут для военных? Назовите хотя бы одну, не основанную на Linux/BSD. Может быть Вы имели в виду PTS DOS? Добавление от 07.05.2013 15:36: цитата: Комфортабельные условия, это удобная среда разработки и кросс-компиляция. Ядро операционной системы обычно предоставляет интерфейс для управления памятью и задачами. Чуть выше, но тоже в ядре операционной системы, находится уровень файловой системы. Сетевой стек - тоже часть ядра, но это не обязательно - во времена, когда сетевая карта и модемы были экзотическимим устройствами, сетевой стек устанавливался отдельно от операционной системы. |
| 2196. xameleon, 17.05.2013 23:50 |
цитата:И тут на помощь должны прийти синхронные сообщения в стиле L4. |
| 2221. xameleon, 19.05.2013 03:12 |
цитата: Если несколько ядер/процессоров используют общую память, то необходимо защищать эту память от одновременного доступа, чтобы не повредить структуру. Синхронные сообщения позволяют отказаться от использования объектов синхронизации, потому что синхронизация достигается самими сообщениями. Т.е. задачу, которая хорошо распараллеливается, но требует общей памяти, на 100 процессорной системе можно считать на 99 процессорах, а один процессор задействовать для управления и распределения ресурсов. Блокировки вычислительных задач будут происходить только при взаимодействии с управляющим поцессором. Код управляюещго процесса реализуется таким образом, чтобы максимально быстро обслуживать сообщения от вычислительных процессов. Это принцип. Предложите реальную задачу и её традиционное решение, я предложу её решение с помощью синхронных сообщений. |
| 2229. xameleon, 19.05.2013 13:18 |
цитата:Отнюдь. Я на синхронизации "собаку съел", поэтому знаю, о чём говорю. цитата:Я же просил Вас привести пример расчётной задачи. Тогда можно говорить предметно. цитата:В процессе спора Вы забыли, что речь шла о задачах, которым нужна разделяемая память. Это подразумевает, что они исполняются локально на многопроцессорной машине. В этом случае понятие "дальше" не имеет значение. цитата:Ещё раз: Приведите пример хорошо распареллеливаемой задачи, требующей разделяемой оперативной памяти. цитата:Я не предлагал использовать синхронные сообщения для обмена служебными сообщениями между нодами. Только в пределах процессоров/ядер одной ноды. цитата:Речь об обмене сообщениями между нодами не идёт. (Повторюсь, речь шла о расчётных задачах, которым необходима разделяемая память). Т.е. синхронизация исключительно внутри ноды. Понятие "скорость" в данном случае бессмысленно, поскольку синхронизация происходит исключительно между источником и приёмником сообщения - тот, кто не готов, тот блокируется. Итак, о какой расчётной задаче мы говорим? |
| 2275. xameleon, 20.05.2013 05:26 |
цитата:Похоже, я готов съесть свой галстук. Мне не удалось придумать оптимальное использование синхронных сообщений для Linpack. Но это не значит, что это невозможно - просто я не осилил. цитата:Подразумевалось, что 99 процессоров не только считают, но и общаются с памятью, а сотый процессор это координирует, например, разделяя матрицу на логические сегменты. При этом управляющий процессор следит, чтобы у каждого сегмента был лишь единственный владелец. При таком раскладе большую часть времени будет простаивать именно управляющий процессор, а не вычислительные. Впрочем, судя по коду Linpack, Вы были правы - в случае общего адресного пространства при увеличении числа процессоров узким местом станет быстродействие памяти. |
| 2374. xameleon, 24.05.2013 14:32 |
цитата:Вот оно. Вот! Это же решение. Решение для отечественных процессоров - тонкий клиент. Аппаратный X-терминал со специализированным процессором, выполняющим функции X-сервера. Всего-то надо - поместить на кристалле видеоадаптер, сетевую карту, аппаратный IP/TCP/UDP стек, аппаратный X-сервер с рендерилкой фонтов, USB для клавиатуры и мышки. Возможны расширения для будущих версий кристалла - подсистема Audio, XRender, Shape, Xinerama, Xv - всё в камне. Сложно? Да. Возможно? Да. Конкуренция есть? Нет. Востребовано? Конечно! Преимуществ великое множество. Вот некоторые из них: 1. Рынок сбыта почти неограничен - начиная от учебных заведений и заканчивая режимными предприятиями. Добавьте сюда "линуксоидов", кто захочет по цене монитора обзавестить ещё одним компом для жены, детей, родителей. 2. Тонкий клиент - один мощный компьютер способен обслужить несколько десятков терминалов. 3. Упрощенное администрирование - гораздо проще сконфигурировать и легче защитить от вирусов один сервер приложений, чем следить за десятком персоналок. 4. Решается проблема охлаждения - греться особо нечему. 5. Решается проблема свободного места - всё устройство реализуется в виде моноблока. 6. Минимальная конкуренция на рынке аппаратных Х-терминалов - во-первых, они вышли из моды, во-вторых, сейчас "днём с огнём" не отыскать аппаратный X-терминал. Предвижу возражения скептиков, мол, зачем изобретать то, что уже отжило. Так оно "отжило" по нескольким причинам - во первых, маркетинговые ошибки - эти терминалы были дороже "писишек", при том, что любую писишку можно легко превратить в X-терминал. Во вторых, X-протокол постоянно расширялся, а X-терминалы плохо поддавались апгрейду. (Доказательство - найдите среди X-терминалов устройство, поддерживающее, например, протокол Xinerama). В третьих, отрасль постепенно отворачивалась от протокола X11 в сторону RDP. Обсудим идею? Какие будут аргументы против? Что скажут Verilog/VHDL программисты? |
| 2376. xameleon, 24.05.2013 14:40 |
цитата: Наверное, интересная штука, а где кнопка "Купить"? А где ссылка "Технические характиристики"? Почему бы не сделать это в виде SoC? |
| 2378. xameleon, 24.05.2013 14:43 |
цитата: Linux, BSD, (вероятно) Mac OS X - уже готовые серверы. |
| 2381. xameleon, 24.05.2013 15:22 |
цитата: Хех. Разве я отрицал необходимость быстрых процессоров или сравнивал быстродействие систем? Нет, я просто предложил направление, где конкуренция минимальна и которое востребовано. Фишка ведь в том, быстродействие современных компьютеров с лихвой покрывает 90% задач. К примеру, компьютер, который можно сейчас собрать за 15 тыс. рублей, вполне способен обслужить класс в кабинете информатики. Или, к примеру, АСУ на производстве. Разве там нужны большие вычислительые мощности? В большинестве случаев хватило бы мощного сервера и множества теримналов. Среднестатистический офис тоже не требует больших вычислительных мощностей. Почта, WEB, текстовый редактор, да электронные таблицы - суперкомпьютер не нужен. Хотя, OpenOffice ещё тот монстр - способен сожрать любые ресурсы, ну дык это проблема не системы/железа, а проблема рук программистов - если перед программистами поставить задачу, чтобы программа могла обслуживать больше число клиентов и не тормозила и не жрала память, то, я верю, - программисты справятся. Другое слабое место - если пользователи рабочих станций повадятся одновременно смотреть видеоролики в интернете. Вероятно, система просядет. А вот нефиг в рабочее время лазить по youtube - пущай работают, а не глупостями занимаются. |
| 2383. xameleon, 24.05.2013 15:49 |
цитата:Если разобраться, то компьютеры вообще не многим нужны. Просто это модно и интересно, а вот необходимости нет. цитата:Откуда цена больше? Вот с чего Вы взяли? Просто история имеет свойство повторяться на новом витке - современные компы мощнее мэнфреймов тридцатицатилетней давности. Используется эта современная мощь весьма тупо - большую часть времени она _не_используется_. Ниша тонких клиентов сейчас пуста. Особенно с уходом с рынка Sun, которая пыталась играть на этом поле. Самое время прийти и захватить рынок. цитата: В свете этой темы - нынешний локальный тренд российской микроэлектроники - радиационно стойкие чипы. На следующей неделе или месяце (здесь) будут обсуждать другие вещи - вот и другой тренд. :) |
| 2386. xameleon, 24.05.2013 16:07 |
цитата:Спорное утверждение :) цитата: Да вот сходу. Старенький AMD Athlon 64 Processor 3000+ 1.8 GHz и 6Гб ОЗУ. Сравним с классом на "Электроника БК-0010Ш" - такие стояли в моей школе в 1990 году. Поделим 1.8 GHz на 30 рабочих мест - получаем 60 Мгц на рабочее место. Это даже быстрее большинства персоналок того времени. Поделим 6Гб озу на 30 рабочих мест - получаем 204 Мб. Сравним с "Электроника БК-0010Ш", которых вполне хватало, чтобы получить азы компьютерной грамотности? Итого, каждое рабочее место школьника в 20 раз быстрее рабочего места школьника в 1990 году. Каждый школьник имеет доступ к оперативной памяти в 196 тысяч раз больше, чем мог бы получить в 1990 году. Т.ч. я бы не был столь категоричен. Да и вообще, когда ресурсов мало, это дисциплинирует, заставляет включать мозг и писать оптимально. Добавление от 24.05.2013 16:09: цитата: Облака - это нечто другое. Я имел в виду старый добрый протокол X11. За бренды не скажу, но думаю в России не мало умельцев, которые при желании могли бы создать аппаратный X-терминал на основе FPGA. Был бы интерес. |
| 2388. xameleon, 24.05.2013 16:15 |
цитата: Не то, чтобы не нужны, просто те, кто мог бы использовать тонкие клиенты, не имеет о них представления. Дешевые аппаратные X-терминалы вполне бы могли захватить рынок. Давайте спросим, кто из здесь присутствующих запускал X-сервер не локально, а по сети. Добавление от 24.05.2013 16:20: цитата: Со своей задачей они таки неплохо справились. А самые любытные даже в машинных кодах чего-то программировали на факультативах. цитата: Так FPGA нужен лишь как макет, для демонстрации и отладки. А затем в кремний. Насчёт впарить - это другой разговор. Премущества я уже озвучил выше - компактность, малое энергопотребеление, отсутствие движущихся частей, централизованное администрирование, более высокая защита, дешевизна. |
| 2400. xameleon, 24.05.2013 22:50 |
цитата:Office Open XML хоть и проприетарный, но весьма неплохо документирован. Если нужно принять данные из 7-го офиса - написать парсер. цитата: Протокол X11 был опубликован в 1987 году, не считая более ранних ревизий. Для "иксов" написаны тысячи программ. В простейщем случае программы, написанные 10-15 лет назад, на современнном железе можно запускать десятками. В смысле по десять копий. Добавление от 24.05.2013 23:10: цитата: Себестоимость железки. При массовом выпуске стоимость чипа относительно стоимости монитора очень мала. Т.е. в идеале чтобы чип встраивался в каждый монитор вне зависимости от необходимости. |
| 2403. xameleon, 25.05.2013 00:48 |
Ben Laden А чем в данном применении Эльбрус будет лучше Атома или ВИА Наверное тем, что можно сделать специализированный чип, который функционально будет проще Атома или VIA, с более простым техпроцессом, а потом поставить производство на конвеер, по типу билетов на метро, чтобы себестоимость была менее 100 рублей. Кроме того можно изначально адаптировать схему под TFT матрицу, упростив обвязку. |
| 2405. xameleon, 25.05.2013 03:35 |
цитата:Так я нигде и не утверждал, что это должен быть Эльбрус. |
| 2414. xameleon, 26.05.2013 04:15 |
цитата:В школьных кабинетах информатики? |
| 2471. xameleon, 30.05.2013 03:57 |
цитата: Разумеется - нужен. Если бы не закрытый софт, всякие фрюниксы выглядели бы сейчас приблизительно так: ![]() Утрирую конечно, но мешок аргументов под рукой. |
| 2478. xameleon, 30.05.2013 13:42 |
цитата:На картинке дедушка оконных менджеров - twm. Я к тому, что без коммерческого софта на Эльбрусе будет как-раз таки Убунта (или нечто уровня Убунты). И через год, и через 10 лет. Особенно в России. Современные Linux и его производные выросли вот из этого - https://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz - если почитать исходники, видно что это примитивная студенческая поделка. Причём, формат файловой системы "подсмотрен" у Minix. А вот здесь небольшой анализ на тему "Кто пишет ядро Linux" - http://www.pcweek.ru/foss/article/detail.php?ID=109200 Кстати, Intel предоставляет несколько другие данные - http://software.intel.com/en-us/blogs/2009/08/24/who…-the-linux-kernel, но тенденция просматривается. И что мы видим? Лидирует "Красная Шапка" - для которой Linux это хлеб и которая двигает его в корпоративный сектор. Рядом идёт Novell, основной продукт которой - NetWare, был убит не без помощи Linux. Следующими идут компании производящиее железо - IBM, Intel, MIPS. Причём, у Intel никогда и не было своей ОС, а вот у IBM в кармане кое-что имеется - http://www-03.ibm.com/systems/z/os/zos/ и http://www-03.ibm.com/systems/power/software/aix/ А теперь собственно ответ, почему нужен коммерческий софт - без коммерческого софта все потуги приведут лишь к появлению "принципиально новых" BolgenOS. Открытый софт хорош в странах, где существует сильная IT индустрия, представленная крупными корпорациями. В этом случае свободный и открытый софт дополняют друг друга и создают конкуренцию. В развивающихся странах открытый софт это необходимость, но в то же время он препядствует становлению коммерческих продуктов. |
| 2482. xameleon, 30.05.2013 18:55 |
Ben Laden Отечественные процессоры тут при том, что запускать на них кроме свободных клонов юникса - нечего. Альтернативы попросту нет. Поэтому разработчики процессоров общего назначения и молятся на Линукс. Кстати, я тоже не понял Ваши сомнения относительно необходимости закрытого софта - он _уже_ не нужен, не везде нужен или не нужен вообще? А моё мнение простое - без отечественных компаний, пишуших коммерческий софт, отечественные процессоры особого смысла не имеют. |
| 2573. xameleon, 03.06.2013 16:11 |
цитата: Если компилятор и линкёр знают, что есть раздельные стеки для аргументов и для вызова функций, то с некоторым усилием можно "заточить" ядро для этой фичи. С прикладным софтом полегче - во многих случаях достаточно просто скомпилировать его под Эльбрус, даже не используя "напильник". Только... приём с разделением стека на код и данные не даёт стопроцентной защиты. Он лишь закрывает одну большую дыру в защищенности. Однако, если долго и внимательно медитировать над исходным кодом ядра Линукс, то наверняка можно найти ещё сотню дырок поменьше, от которых разделяемый стек не спасёт. |
| 2605. xameleon, 04.06.2013 13:55 |
цитата: По каким причинам? Вот, скажем, если бы в России была компания, производящая закрытую коммерческую операционную систему, то чем использование Linux будет лучше, чем использование коммерческого продукта c закрытым исходным кодом? |
| 2612. xameleon, 04.06.2013 16:37 |
цитата: Не понимаю. Если бы Вы 10 лет писали какой-то продукт, вкладывали деньги в разработку, а потом его взяли китайцы и модифицировали под себя, Вам бы от этого лучше стало? Они ведь, китайцы, могли бы купить Ваш продукт, Вы бы заработали денег и вложилил бы их в дальнейшее улучшение продукта. А так - Вы просто подарили китайцам плоды своего труда. Где профит? Верну Вам пример с LibreOffice - эти все свободные Wysiwyg офисы появились не вдруг, а как замена (ЗАМЕНА!!!) коммерческим продуктам. Заглянем в историю? (http://en.wikipedia.org/wiki/Comparison_of_word_processors) Очевидно, что до появления первого свободного текстового процессора EZ Word (1985), на рынке уже были четыре коммерческих продукта - WordPerfect (1980), Ichitaro (1983), Microsoft Word (1983), AppleWorks (1984). Как видно - временной промежуток между первым коммерческим продуктом и первым свободным - 5 лет в пользу коммерческого. Сравните качество продуктов самостоятельно. Что Вы хотите доказать? Что индустрию двигают свободные продукты? Это смешно. Опять же, больший профит от СПО пока что поимели корпорации, используя его как инструмент конкурентной борьбы. А ещё некоторым из них СПО сильно сэкономило расходы на R&D - возмите для примера хотя бы Android. Прошу понять меня правильно - я не против свободного ПО и Linux использую с 1995 года. Но конечному потребителю польза от СПО в том, что, во первых, он может выбирать между условно-бесплатным и коммерческим. Во вторых - СПО заставляет напрягаться коммерческие компании, делая свои продукты лучшего качества, чтобы их продукцию продолжали покупать. Итог в том, что если в вашем палисаднике нет компании, которая бы производила коммерческий продукт, то она и не появится, пока существует условно-бесплатный аналог. Т.ч. приходится кушать то, что дают. Наконец, возвращаясь к процессорам. Иногда недостатки архитектуры можно компенсировать алгоритмом. Например, поиск перебором на быстром железе проиграет поиску через хэш-функцию на медленном железе. Но если все будут пользовать единый открытый код, то нивелировать недостатки железа более продвинутым алгоритмом будет проблематично. Впрочем, закрытый код так же работает и для защиты Intellectual Property - http://ru.wikipedia.org/wiki/Блоб |
| 2688. xameleon, 10.06.2013 16:57 |
цитата: Какой-то странный вопрос. Существует полторы альтернативы прервыаниям - опрос в цикле и сообщения. Опрос в цикле греет процессор, жрёт батарейку и вообще отнимает время от полезных задач. А вот передача прерываний сообщениями требует чтобы процессор аппаратно поддерживал такой механизм. |
| 2692. xameleon, 11.06.2013 13:54 |
А вот вопрос ко всем - есть ли в этой теме читатели/писатели, относящиеся к руководству (люди принмающие решения) названных компаний? МЦСТ, Ситроникс, Ангстрем, Микрон, Миландр, Мультиклет и др. Если такие люди здесь присутствуют, то второй вопрос - не желаете ли создать консорциум? Цель консорциума весьма простая и понятная - разработка и принятие стандарта, совместимого с L4 eXperimental Kernel Version X.2. |
| 2696. xameleon, 11.06.2013 14:51 |
цитата: Организовать сложно, с этим не спорю, а вот заставить работать будет проще. Собственно, участников и не нужно будет заставлять работать - когда дело дойдёт до обсуждения стандарта, участники сами будут продвигать выгодные им решения и критиковать решения конкурентов. Добавление от 11.06.2013 14:56: цитата: Идея не моя, а покойного Jochen Liedke. Я лишь жрец этой религии :) Зачем всё бросать? Есть немало наработок, которые не отрицают существующие решения, но дополняют их. Участие в консорциуме ни к чему не обязывает, но даёт возможность коомпаниям протолкнуть свои идеи и стоять у истоков спецификации, что теоретически может дать конкурентные преимущества. К примеру, конкретно по аппаратному микроядру или к спецификации L4X2 у Вас замечания или претензии имеются? |
| 2707. xameleon, 12.06.2013 13:33 |
цитата: Преумещства возникают на многопроцессорных/многоядерных конфигурациях. Попытаюсь в очередной раз объяснить идею на простейшем примере - КР580ВМ80 (аналог 8080). Для начала сделаем его "многозадачным" - введём понятие Блок Описания Задачи - TCB (Task Control Block). Для простоты ограничим максимальное число задач 64 задачами. Под каждую задачу отведём 64 байта и расположим массив блоков описания задач по адресу 0x1000. Таким образом для получения TCB задачи по её номеру используем простейшую формулу TCB = 0x1000 + 64 * Task_ID. Так же используем аппаратный таймер, который будет вызывать процедуру, последовательно выгружающую текущее сотояния задачи в текущий TCB и восстанавливая следующую задачу из следующего TCB. TCB "закольцованы", поэтому после последней задачи переключаемся на первую. Некоторым аналогом TCB в процессоре i386 является TSS (Task State Segment) В результатет получается "многозадачный" процессор без приоритетов и распределния времени. Имеет ли он смысл? Возможно, если напрячь мозги, можно найти область применения, но для реальных задач необходимо предусмотреть возможность синхронизации. Умышленно выбрав 8-ми битный процессор, мы получаем проблему доступа к 32-х битным значениям. А что если таймер сработает в момент записи младших байт 32-битного слова? Это лишь половина "беды", другая проблема - доступ к видеопамяти. Если одна задача пишет на экран слово "Привет", а другая задача слово "Пока", то в такой схеме возможно получить вывод "ПрПоивекат" - вывод от двух задач перемешается. Одно из оптимальных решений этих проблем - использование сообщений. Из 64-х доступных задач выделяем одну, отвечающую за вывод на экран и посылаем ей сообщения. Мы подошли к самому интересному - для реализации сообщений вводим дополнительную инструкцию - EXCHANGE_MESSAGE. У неё есть два аргумента - номер задачи приёмника и номер задачи источника. Если аргумент приёмника равен нулю, значит задача не посылает сообщения, если аргумент источника равен нулю, значит задача не слушает сообщений. Если аргумент источника равен 0xff - задача слушает собщение от любой задачи. Итак, задача, владеющая экраном, блокирована в инструкции EXCHANGE_MESSAGE и слушает сообщения от любых задач. Задачи, выводящие сообщения на экран, посылают данные с помощью инструкции EXCHANGE_MESSAGE сообщения задаче владельцу экрана. В случае, если какая-то задача не готова - например, задача владелец экрана ждёт данные для вывода на экран, или задача, выводящая данные, ждёт готовности владельца экрана, в TCB ожидающей задачи помечается её состояние и при переключении задач она пропускается. В самом простейшем случае, команда EXCHANGE_MESSAGE всего лишь помечает состояние в TCB и переключает задачу, отдавая свой квант времени следующей задачи. На самом деле всё где-то в сто раз сложнее и оптимальние, но на этом простом примере я попытался показать принцип. К сожалению мне необходимо убегать, продолжу в другой раз. |
| 2711. xameleon, 13.06.2013 01:51 |
цитата:При наличии средств разработки и development board - я и мой компаньон могли бы попытаться перенести систему на мультиклеточный процессор и предоставить команде разработчиков бинарный образ системы. Пока что мы не в том положении, чтобы предоставить исходный код даже при условии Non Disclosure Agreement. Но мы не просим устройство и средства разработки "на халяву" и готовы их купить. Если Вас такие условия устроят, то можно поговорить о проблемах переноса - прежде всего это механизм передачи сообщений. Для быстрого портирования на новую платформу необходим L4-ABI, поскольку аппаратно он не предусмотрен, то его программная реализация на новом железе - это вполне объёмный и самостоятельный проект. Впрочем, сама идея L4-ABI настолько универсальна, что даже без операционной системы это вполне самодостаточная вещь. Попробую пояснить - если бы мы писали систему не на микроядре L4, а на микрояде Neutrino, то всё равно первоначально понадобилось бы переносить микроядро Neutrino, а уже затем систему. цитата:Думаю, на данном этапе более оптимальным решением будет программная реализация MMU. Если разрабатывать его наспех, то в результате получится стандартный MMU как и во всех других процессорах - с поддержкой виртуальных страниц фиксированного размера. В таком случае, при реализации L4 Flexpages их придётся эмулировать на основе стандартных страниц. Поэтому лучше сделать программную эмуляцию - при этом возникнет понимание и опыт, необходимые для реализации аппаратных L4 Flexpages. А если по каким-то причинам flexpages не понадобятся, то традиционные виртуальные страницы являются частным случаем flexpages. Отличие flexpages от обычных виртуальных страниц можно увидеть на вложенном рисунке - поле S определяет размер страницы, который равен 2s. Т.е. для привычных страниц размером 4кб значение S будет равно 12. Программный MMU мог бы выглядеть так - несколько байт в TCB зарезервированы под виртуальны и физические адреса нескольких активных страниц. При любом обращении к памяти происходит сравнение адреса, попадает ли он в диапазон текущей страницы, т.е. анализируется начало страницы и её размер. Если нет выхода за границы активной страницы, то происходит трансляция виртуального адреса в физический. Поскольку TCB активной задачи находится во внутренней памяти процессора, то накладные расходы близки к нулю. С учётом больших страниц, мы даже получим выигрыш в скорости по сравнению с 4-х килобайтными страницами - меньше выходов за границы. Если адрес не попадает в диапазон активной страницы, то происходит обращение к таблице страниц и поиск страницы наименьшего размера для трансляции физического адреса. Если соответствия не найдено, т.е. адрес не попал в диапазон таблицы страниц процесса, то происходит аппаратное исключение. Программный анализ таблицы страниц процесса для поиска пары трансляции виртуального адреса в физический я называю "программный MMU". Очень важный момент в различии реализации исключений в традиционных микропроцессорах и в L4 совместимом микропроцессоре. В традиционных микропроцессорах при невозможности транслировать виртуальный адрес в физический, происходит аппаратное прерывание, котрое обрабатывает операционная система. В случае L4 исключение страницы обрабатывается иначе - микроядро посылает сообщение специальному процессу, называемому Pager (обработчик сообщений страниц). Причём, у каждой задачи может быть свой собственный Pager - идентификатор задачи обработчика страниц хранится TCB процесса. Таким образом, помимо регистров общего назначения, включающих счётчик команд и указатель стека (или фрейма вызова, как это сделано в Мультиклете), необходимо добавить регистр, хранящий идентификатор задачи обработчика исключений страниц, и несколько пар трансляции виртуального адреса в физический - одна пара для счётчика команд и две пары трансляции для обращения к данным. На основе этой схемы вполне возожно реализовать программную реализацию обработки исключений страниц (MMU) в стиле L4. Разумеется, следующим шагом будет логично реализовать этот MMU-алгоритм аппаратно со всеми возможными оптимизациями. Возможно это явно не следует из моего поста, поэтому хочу подчеркнуть, что "пользовательский" обработчик страниц (Pager), получает информацию об исключениях страниц посредством фазы приёма сообщений инструкции EXCHANGE_MESSAGE. Таким образом можно создавать очень гибкие системы с различными алгоритмами организации виртуальной памяти. p.s. Даже сейчас я описал менее одной десятой от идеологии и возможностей микроядра L4. К сообщению приложены файлы: 1.png, 736x563, 84Кb |
| 2728. xameleon, 14.06.2013 15:23 |
цитата:Верно. В текущей версии системы Xameleon своп не поддерживается. цитата:Тоже верно, только сначала идёт страница большего размера, а затем меньшего - так проще выравнивать - т.е. 512 Мб и 1 Мб. Т.е. страница 512 Мб должна размещаться с адреса, кратного 512 Мб. Это обязательное условие и оно всегда выполняется. цитата: Наверное так, но есть один момент. Сегмент кода свопировать смысла нет, а даже где-то вредно. Если код программы занимает 513Мб, то с очень большой вероятностью это плохая программа. С трудом могу представить даже статически слинокванную программу, в которой код будем занимать пол гигабайта. В общем, предлагаю отказаться от свопа исполняемого кода. Что касается данных, то вытеснять на диск имеет смысл лишь динамически аллокируеумую память. А теперь вспомиинаем, что в L4 каждый процесс может иметь свой обработчик исключения страниц, посему алгоритм вытеснения памяти на диск можно поместить в user space и держать его в libc. Более того, можно иметь несколько алгоритмов своппинга для разных требований и классов задач. Такие возможности не предоставляет ни одна из существующих систем. |
| 2730. xameleon, 14.06.2013 16:39 |
цитата:Сразу только могу сказать о регистрах для эмуляции ММU. Чтобы сформулировать остальные пожелания, понадобится некоторое время на повторное и более глубокое изучение процессора - системы команд, способов адресации и т.д. Что касается MMU, то необходима следующая стуктура Старший регистр: | Виртуальный адрес страницы | Размер страницы | Права доступа | Младший регистр: | Физический адрес страницы| При обращении к памяти происходит проверка на попадание адреса обращения к памяти в диапазон, заданный старшим регистром. Если условие удовлетворено, то физический адрес вычисляется по формуле: Физический_адрес = Виртуальный_адрес - Виртуальный_адрес_страницы + Физический_адрес_страницы. Это должна быть аппаратная проверка и подстановка. Чем-то напоминает сегментную модель, за исключением трансляциии физичесого адреса. Таких структур должно быть несколько - одна для выборки команд, и несколько для остальных типов обращений к памяти. Эти регистры должны обновляться при переключении задач. В случае, если при выборке команд адрес не попадает в диапазон текущей страницы кода, или при обрщении к памяти адрес не попадает ни в одну из активных страниц, должен происходить переход на подропрогамму эмуляции MMU. Этой подпрограмме необходимы следующие данные - номер задачи (для выборки таблицы страниц соответствующей задаче), адрес счётчика команд для возобновления исполнения программы, адрес и тип обращения к памяти. Эмулятор MMU ищет соответствие в таблице страниц задачи и если находит, то обновляет соответствующую пару регистров и рестартует исполение команды. Если страница не отображена в адресное пространство задачи, то эмулятор посылает сообщение задаче Pager. Здесь возникает много вопросов и сопутствующих инженерных задач. Например, достаточного ли одной пары трансляции для сегмента кода? Что если тело небольшого цикла будет на границе двух страниц и захватит обе? В этом случае на каждой итерации будет происходить обращение к эмулятору MMU и производительность упадёт в десятки раз. Другая инженерная задача - если держать две пары трансляции для обращения к памяти, то какую из пар обновлять данными новой страницы? Не получится ли так, что каждое обращение к памяти будет затирать нужную пару трансляции. Например: mov ax, [si] mov [di], ax Уже понадобится некоторая эвристика, чтобы сбаланисровать обращение к страницам, на которые указуют регистры SI и DI. Наконец, эмулятору MMU понадобится некоторый механизм для обращения к регистрам задачи, хранящим пары трансляции. Как это реализовать - расширением системы команд или каким либо другим способом? И несколько встречных вопросов - какие инструменты Вы предлагаете для многозадачности, синхронизации задач и обмена сообщениями? |
| 2775. xameleon, 17.06.2013 17:18 |
цитата: Я не уверен, что способен сделать это на энтузиазме. Перечитал "РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ПО ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ" и "МП MCp0411100101 Руководство по экплуатации". Первое, что пришло в голову - можно лишь использовать некоторые элементы и идеи из микроядра L4. Как сделать полноценнюу реализацию - идей нет. Затруднение вызывает регистровое пространство, общее между четырьмя процессорными блоками. Идея, раскидать задачи между процессорными блоками мне кажется Таким образом первой и основной задачей мне видится реализация многозадачности, а именно возможность сохранения текущего состояния регистрового пространства в какой либо памяти и загрузка регистрового пространства из памяти. Т.е. распараллеливание на уровне команд это абстракция более низкого уровня и мы её не рассматриваем - она просто работает на другом уровне, не интересном в обсуждаемом контексте. Вот в этом месте, при попытке реализовать многозадачность программно, появляются "грабли" в виде регистра IRETADDR, который доступен только для чтения. Т.е. можно было бы попытаться реализовать многозадачность используя обработчик прерывания, сохраняя в обработчике текущее состояние процессора, затем восстанавливая состояние процессора данными другой задачи, наконец, подменяя значение регистра IRETADDR на адрес другой задачи, тем самым производя переключение задач. Но IRETADDR доступен только для чтения! Переключение задач - базовая возможность, без которой нет смысла говорить о сообщениях, синхронизации задач и прочих вещах. |
| 2777. xameleon, 17.06.2013 17:47 |
цитата:MMU - это страничная организация памяти. При активном выделении/освобжении памяти организуются дырки. В случае страничной организации памяти, всегда можно выделить непрерывный кусок памяти, который собирается из множества кусков (страниц). В случае managed приложений непрерывные блоки памяти точно так же придётся собирать в непрерывные блоки из кусков, только реализовывать это уже придётся программно. А иллюзия у людей в том, что managed код это решение всех проблем. Пока что не видел ни одной системы, ядро которой реализовано на типобезопасных языках. Видел лишь надстройки поверх существующих решений. цитата:Стоит принять во внимание, что подсчёт ссылок это несколько из другой оперы. Этот механизм помогает от утечек памяти и реализован ещё в Component Object Model технологии. Сборщик мусора позволяет снизить латентность программ - блоки памяти лишь помечаются как "готовы для освобождения", а в момент простоя системы или при нехватке ресурсов начинается процесс "сборки мусора". |
| 2786. xameleon, 18.06.2013 17:13 |
цитата:Да, я имею в виду именно это. Не могу понять, каким образом можно раскидать задачи по клеткам. И не вижу возможности синхронизации задач между клетками. В случае переключения задач в прерывании - сообщения и синхронизацию можно реализовать программно. цитата:Я пытался представить, как можно организовать переключение задач на существующем базисе (на основе документации), поэтому и зацепился за IRETADDR. В идеале, конечно, лучше раскидать задачи по клеткам, но это не отрицает необходимсть переключения задач. Иначе четыре клетки придётся поделить пополам межу системой и пользовательскими задачами - одну на ядро, одну для драйверов устройств и две на пользовательские задачи. цитата:Если на автомобиле, то приблизительно 2200 км. В Ростовской области живу. |
| 2826. xameleon, 21.06.2013 17:42 |
Как бы могла выглядеть закладка в процессоре? Ну, к примеру, в x86 совместимом. Некоторые инструкции процессора не имеют смысла, например сочетание LOCK NOP вызовет аппаратное исключение. А что если встроить проверку и, к примеру, задать определённую достаточно длинную последовательность команд, которая будучи вставленной перед LOCK NOP, не вызовет исключения, а войдёт в некий недокументированный режим. Как воспользоватся такой закладкой? Самое простое - превратить процессор в нагревательный элемент - вместо исполнения кода заставить крутиться в бесполезных бесконечных циклах. Можно что-нибудь закоротить для пущей надёжности - это довольно просто. Гораздо сложнее, я бы даже сказал невозможно, сделать закладку, способную украсть данные или передать управление извне - для этого аппаратная закладка обязана взаимодействовать с программной закладкой. Смысла в такой затее не так уж и много, а сложнось очень высока. Как вариант закладки, вносить искажения - в режиме атаки добавлять случайные коэффициенты к арифметическим операциям - будет веселуха. И немного прозы - http://habrahabr.ru/post/168607/ |
| 2861. xameleon, 24.06.2013 15:07 |
цитата: Это смотря что понимать под термином "закладка". Можно назвать это недокументированной возможностью для отладки. |
| 2922. xameleon, 24.06.2013 22:38 |
цитата: Соглашусь в том, что приёмники и антенны на материнской плате это чушь. А вот зря Вы упускаете возможность доступа "изнутри". Можно представить ситуацию, когда достаточно повысить уровень привелегий с "гостя" до "администратора". Я утрирую, но с таким инструментом уборщица или ночной сторож теоретически могут получить доступ к информации, закрытой сильными паролями. Можно на это посмотреть и с другой стороны - сами по себе "теории заговора с закладками" хороши уже тем, что служат стимулом производства "железок" у себя, соответственно дают некоторый шанс производства высокотехнологичной продукции, вместо скатывания до уровня банановой республики. Перефразирую известную поговорку: "Если закладок не существует, то их следует придумать". |
| 2978. xameleon, 25.06.2013 18:39 |
цитата:Судорожно вспомнию спецификацию различного PCI железа и вспоминаю, что же может запретить PCI устройству в режиме Bus Master записать в любую память. Не припоминаю ограничений, но единственной проблемой может быть выравнивание и размер записываемых данных. Что касается "что угодно", то возьмём для примера сетевую карту. Если есть доступ к её регистрам, то можно включить режим loopback и заворачивать обратно передаваемые пакеты. Какой либо дескриптор приёмного буфера можно указать на системную память и рассчитать так, чтобы часть пакета легла в аккурат в нужное место. Задача весьма нетривиальная, но для пытливых умов ничего невозмжного нет - мне это не интересно, Вам это не интересно, а хакеру Васи или хакеру Джону может быть интересно и он сможет этим воспользоваться. Кстати, проблему выравнивания достаточно просто решить, предварительно вычитав весь блок памяти, а затем переписав часть блока памяти, вернуть его назад. Разумеется, это всё досужие домыслы, поскольку не существует известного способа писать в регистры сетевой карты из userspace. |
| 3044. xameleon, 26.06.2013 20:55 |
Доргой matik, не боитесь проспорить? У меня за плечами опыт написания нескольких драйверов для разных систем, последнее, что припоминается - DEC21140 и Intel8254x. цитата:Правильно, это область регистров сетевой карты. Пользовательскому приложению туда писать невозможно. цитата:Ну дык, почитайте же, куда пишутся принятые сетевые пакеты и откуда читаются передаваемые сетевые пакеты. В сетевой карте есть регистр, который указывает на таблицу дескрипторов приёмника, которая описывает блоки памяти, в котоорые происходит приём пакетов. Так же в сетевой карте есть регистр, который указывает на таблицу дескрипторов передатчика, которые указывают на блоки памяти, откуда сетевая карта выбирает передаваемые пакеты. Обе таблицы находятся в оперативной памяти, соответственно, в случае наличия прав доступа к регистровому пространству сетевой карты, можно подсунуть любые таблицы дескрипторов. Стоит ли упоминать, что буфера, на которые указывают дескрипторы, могут распологаться по любому (выровненному) адресу в пределах разрядности шины адреса? цитата:Я об этом сразу честно сказал. цитата:Такой способ мне неизвестен. Скорее всего такого способа вовсе не существует. цитата:Закладка бы пригодилась, чтобы получить доступ к управлению устройствами на PCI шине из пользовательской задачи. Причем, даже свой обработчик прерывания не нужен - вполне достаточно было бы читать статусные регистры в цикле. (На самом деле я ненавижу опросы в цикле, но мы же говорим о гипотетической возможности распоряжаться памятью из userspace) цитата: С этим утверждением не буду спорить, поскольку в целом оно верное, но если кому-то дать инструмент с помощью которого легко и безнаказанно читать/писать любой регион доступной физической памяти, то есть ненулевая вероятность, что этот "кто-то" вполне сможет воспользоваться этой возможностью. Кстати, при таком раскладе не спасёт программное обеспечение с открытым кодом, поскольку даже верифицированное и сертифицированное ядро не смогло бы противостоять таким атакам. |
| 3050. xameleon, 26.06.2013 21:22 |
цитата: Я не знаю ответ на этот вопрос. Возможно, репутация разработчиков? |
| 3053. xameleon, 26.06.2013 21:30 |
цитата: Скажу честно - не знаю. Я так глубоко не копал. |
| 3140. xameleon, 28.06.2013 12:12 |
цитата:Ну вот с чего бы это микроядро неэффективно? Потому что так Торвальдс сказал? |
| 3146. xameleon, 28.06.2013 13:16 |
Кстати, как сторонникам, таки противникам возможности наличия закладок, предлагаю почитать эту сказку - http://lib.ru/INOFANT/BISHOF/wargames.txt Фантастика полная, но чертовски интересно написана и сюжет хороший. Про мальчика, который влез в Сеть Пентагона и чуть было не начал тотальную атомную войну. Что касается ведомственных сетей, то хоть они и не подключены к интернету, но всё равно это компьютерные сети. Наверняка большинство из них основано на протоколе X.25. Те, что поновее, скорее всего используют Frame Relay, а самые старые качают данные на чём либо вроде v32bis. Похоже, такие сети лучше защищены от атак со стороны, поскольку в общем случае создают лишь "тупой" виртуальный канал между двумя точками. В порядке стёба можно рассмотреть возможность закладок в коммуникационном оборудовании. Около 15 лет наззад мне довелось пользовать (не адмиистрировать) X.25 маршрутизатор. Было очень забавно вводить случайные адреса и коннектится к различным ведомственным серверам. Разумеется дальше логина пробраться не доводилось, да и цели такой не было, но было реально интересно. Правда, в случае чего и по рукам (и по голове) могли надавать. |
| 3148. xameleon, 28.06.2013 13:36 |
цитата: Уже 10 раз обсуждали. :) Результат не понравился тем, кто пытался тупо переложить монолитный подход на микроядро, тем самым создавая лишний уровень абстракции. Кстати, вот есть такое субъективное мнение, почему QNX не пошёл на десктопы - отличный дизайн и реализация ядра, но графическую подсистему писали "в лоб". Последний раз я смотрел на QNX очень очень давно - впечатление, что GUI делали топором на коленке. И дело было не во внешнем виде, а в очень неоптимальной отрисовке виджетов. Это было первое и сильное впечатление, с тех пор больше никогда не смотрел на QNX. Может быть сейчас всё поправилось. |
| 3155. xameleon, 28.06.2013 13:51 |
цитата:Как по мне, то разнесение модулей ядра по разным адресным пространствам, это интересная, но не обязательная возможность микроядра. С моей точки зрения, методика взаимодействия модулей через сообщения более важная и характерная особенность микроядер. А когда мы взаимодействуем через сообщения, то где находятся модули - в едином адресном пространстве или в различных, это уже вопрос второстепенный. Например, как вариант - решение о том, в каком адресном пространстве исполнять сервис файловой системы, может принять администратор, явно указав тип запуска в конфигурционном файле. |
| 3199. xameleon, 28.06.2013 17:39 |
цитата:А вот и не согласен. Это именно тот путь, по которому идут 90% разработчиков - меняют системные вызовы на сообщения и получают те же самые проблемы, что и в монолите, только отягощённые ещё лишним слоем в виде сообщений. В случае микроядра необходимо переосмыслить способ обслуживания системных вызовов. Попробую пояснить на простом примере. Вот, мы смотрим статистику процессов в монолитной системе и видим у каждого процесса два параметра - сколько он использовал времени в User Space и сколько времени в Kernel Space. Т.е. обслуживание системных вызовов в монолитной системе есть в некотором роде продолжение пользовательского процесса в режиме ядра системы. В то же время различные системные вызовы, порождённые пользовательскими процессами, продолжают конкурировать в контексте ядра. В случае же микроядра, ядро системы это один или несколько процессов, которые в общем случае можно сделать единственными для всех пользовательских задач. Т.е. понятие Kernel Time это время системнго процесса, обслуживающего определённую категорию системных вызовов. Иными сломами, у пользовательских процессов нет понятия времени, проведённого в контексте ядра. Вместо него используется понятие времени проведённого _всеми_ процессами в модуле, обслуживающем вызовы файловой системы, точно так же есть понятие времени, проведённого всеми процессами в модуле, обслуживающем сетевые функции, и т.д. по аналогии. Вот в этом месте сразу возникает проблема блокировки пользовательских процессов, стоящих в очереди на выполнение. В монолитах такой проблемы нет, поскольку процессы продолжают конкурировать в контексте ядра - если какой-то процесс ждёт данные или событие, то его время отдаётся соседу, данные для которого могут уже лежать в кэше. Именно в этом моменте микроядра упираются в свою эффективность и каждый разработчик решает эту проблему по-своему. Многие разработчики идут по пути создания на каждый пользовательский процесс ещё один процесс в контесте ядра, а уже в ядре работают так же, как если бы это была монолитная система. Профит отрицательный - микроядро при таком раскладе только жрёт ресурсы и при том не даёт никаких явных преимуществ. Чтобы получить преимущества от микроядра, необходимо все системные вызовы одной категории обслуживать в одном потоке, а в случае блокировки сохранять состояние вызова и переходить к обслуживанию следующего. В случае снятия блокировки любого из предыдущих системных вызовов, мы об этом узнаем в одном из двух случаев - в случае завершения или блокировки текущего вызова. В случае снятия блокировки, восстанавливаем состояние и выполняем вызов до завершения или следующей блокировки. Таким образом эффективность микроядра зависит во многом от организации обслуживания вызовов. Я не буду подсказывать, но есть способы очень эффективно сохранять и восстанавливать состояние текущего вызова - он настолько прост, что тот, кто поймёт способ, будет уверен что он всегда это знал или сам придумал. ;) Добавление от 28.06.2013 17:46: цитата:Надеюсь, это был упаковщик Алексея Бабушкина? А если серьёзно, то какая к чёрту разница, откуда человек? Хорошую разработку любой может украсть, т.ч. пора самим научиться секреты фильтровать. |
| 3397. xameleon, 02.07.2013 21:43 |
цитата:Сам принцип передачи сообщений располагает к надёжности - задачи могут быть изолированы различными аппаратными способами - сегментам, страницами, задачи даже могут быть разнесены на различные исполнительные устройства, но при этом все задачи взаимойдествуют исключительно через обмен сообщениями. Других точек входа в модуль может просто не быть. цитата:Вот именно поэтому процессоры без MMU не выдерживают конкуренции. Можно сделать быстро, используя общую память и указатели, при этом не использовать защиту памяти вообще. Можно сделать медленно, копируя блоки памяти между изолированными процессами. С учётом требований к защите, которую Вы ставите во главу угла, отображение страницы из адресного пространства вызывающего процесса в адресное пространство вызываемого процесса, будет самой быстрой защищенной операцией, не требующей копирования. А по другому - наверное никак. По большому счёту, проблемы изоляции процессов универсальны, только микроядра предоставляют более гибкие и широкие возможности. цитата:Производительности и уменьшения энергопотрбления и тепловыделения. :) цитата:Если защищённо, медленно и без MMU, то остаётся сегментная адресация, но при этом придётся копировать данные между сегментами. Или расшаривать некоторые сегменты между несколькими процессами. При этом сегменты будут похожи на "универсальные виртуальные страницы" - тот же MMU, только программный.. Опять же, в пользу микроядер - правильные микроядра предоставляют абстракцию адресных пространств, скрывая детали реализации. С помощью концепции адресных пространств можно сделать мощную и гибкую модель защиты памяти. Не только модули ядра защищены от прикладных задач, но и прикладные задачи могут быть защищены от модулей ядра. Наконец, аргумент надёжности мироядер по сравнению с монолитом никто не оспаривает - изначально, когда пошла первая волны моды на микроядра, сторонники микроядер использовали надёжность как аргумент против быстродействия, которое противопоставляли сторонники монолита. Но я хочу сказать, что с помощью механизма сообщений можно реализовать более оптимальную и равномерную загрузку процессоров, а так же уменьшить количество переключений контекста, по сравнению с монолитными ядрами. |
| 3408. xameleon, 03.07.2013 04:49 |
цитата: Да ну? Возможно, я отстал от жизни. Какой-такой SIP? Неужели компьютерная революция мимо прошла? Давайте подробности. |
| 3436. xameleon, 03.07.2013 20:55 |
цитата: Singularity почти целиком поместится в один процесс L4. То есть в одну пользовательскую задачу, состоящую из одного адресного пространства и нескольских сотен или тысяч нитей исполнения. Кто-то считает это преимуществом Singularity, но есть мнение, что это преимущество микроядра L4. Добавление от 03.07.2013 21:05: цитата: "Хром ОС"? Это такой навороченный процесс init над ядром Linux? |
| 3440. xameleon, 04.07.2013 01:28 |
цитата:Потому что L4 это минимальная прослойка между железом и виртуальной машиной. цитата: А виртуальная машина может работать на системе без MMU? Да даже если и так, давайте сравним способы синхронизации и обмена сообщениями в L4 и Singularity? цитата:У Вас календарь испорчен - микроядро L4 намедни в кристалл просилось. |
| 3443. xameleon, 04.07.2013 05:34 |
цитата: Любая? Не любая. MS-DOS нативно не умел многозадачности/многопоточности. RT-11 умел только с версии RT-11TS. цитата: Если в L4 несколько программ выполняются в едином адресном пространстве, то при передаче сообщения переключения контекста не происходит. В случае аппаратного L4 всё ещё более просто - буфер сообщения коммутируется от одной задачи к другой задаче, если задачи выполняются на разных ядрах, а если на одном, то перегружаются регистры общего назначения, а блок сообщений не перегружается. цитата:А тут ничего революционного нет - в соообщении L4 точно так же можно использовать расшаренную память и перекидываться указателями.цитата:Сообщения делаются очень просто, через расшаренную память, в юзер спейсе. Это еще один бесплатный бенефит от управляемой памяти. А в юзер спейсе они всяко быстрее чем в ядре, даже если это L4. А если понадобятся Software Isolated Processes, то вместо указателей можно обмениваться дескрипторами, описывающие структуры и блоки памяти. Только... сдаётся мне, что при большой фрагментации памяти, поддержка неперывных блоков управляемой памяти потребует больше процессорного времени, чем страничная организция памяти. цитата:цитата:Да нет все правильно написано, особенно в контексте затрагиваемой "безопасности". Безопасность L4 по сравнению с управляемыми средами - детский лепет. Это разные типы безопасности и одна не исключает другой. Безопасность L4 основана на понятии адресных пространств, безопасность SIP достигается за счёт управляемого кода. Теоретически ничто не мешает запустить управляемую среду поверх микроядра. цитата: Насчёт возможности выключения опкода в VM не спорю, но аргумент с файловой системой неудачный - управляемый код в данном случае не даёт никаких преимуществ. цитата:Это философский вопрос. С таким же успехом я могу заявить, что выполнение кода в программной виртуальной машине - бесполезная трата электроэнергии. Но я не буду столь категоричен. Кстати, x86 Task State Segment и инструкция "lock cmpxchg" это тоже в некотром роде механизмы ОС на кристалле, но весьма примитивные. |
| 3606. xameleon, 09.07.2013 16:16 |
цитата:Неужели в 227 строчек поместился эмулятор 1801ВМ1? К сообщению приложены файлы: 1.jpg, 400x473, 82Кb |
| 3621. xameleon, 11.07.2013 13:47 |
цитата:Угу. Например у меня RT-11SJ сильно ассоциируется с ДВК-2 и пятидюймовыми дискетами. А в ДВК как раз стоял К1801ВМ1, по системе команд совместимый с PDP 11/03. цитата: А как Вы реализовали устройства ввода/вывода? |
| 3629. xameleon, 12.07.2013 12:49 |
цитата: Это какая такая операционка есть у Эльбруса? |
| 3633. xameleon, 12.07.2013 14:43 |
На мой скромный взгляд, никто не сможет сказать о "русских линуксах" лучше автора сего произведения: http://ilibrary.ru/text/986/p.12/index.html |
| 3651. xameleon, 15.07.2013 20:04 |
цитата: Гарантированный реалтайм можно получить лишь запустив ядро Линукса под каким либо планировщиком как задачу с наименьшим приоритетом. Только в этом случае конкурирующие с линуксом задачи будут realtime, а само ядро к режиму реального времени не очень располагает. Расширенные средства защиты от несанкционированного доступа - Access Control List. Я бы даже сказал "POSIX Access Control Lists". |
| 3666. xameleon, 16.07.2013 16:20 |
цитата: Если ничего не случится, то может быть через год или два я покажу кое-что, что может оказаться не менее интересным, чем VxWorks. А может быть и не покажу. Есть намерение написать на Verilog свой микропроцессор с поддержкой аппаратных синхронных сообщений и многозадачности. Модифицировать какой-либо существующий микропроцессор с открытым исходным кодом не интересно, но интересна своя собственная система команд. Для процессора нужен компилятор, иначе процессор гарантированно не будет никому интересн. Если уж делать новый процессор, то логично делать к нему и компилятор. Если кто-то не осилит написание компилятора, то создание процессора уж и подавно. Можно взять готовый компилятор и дописать к нему генерацию кода для новой системы команд. А можно попробовать написать компилятор "с нуля". В общем, получается пока так: http://l4os.ru/download/compare/regenerated.html Так что, господа, если затея с компилятором выгорит, то я подкину вам пищу для обсуждений. За это сообщение сказали спасибо: vss |
| 3673. xameleon, 17.07.2013 00:22 |
цитата:Угу. А ещё Сергей Вакуленко давным давно написал Demos Commander, который работает на любых юниксах и даже под ДОС. Более того - несколько лет назад deco запустился даже поверх микрояда L4. (с небольшой posix прослойкой:) Не понял Вашего наезда. Я подписан на "Живой Журнал" Сергея Вакуленко, регулярно читаю и иногда комментирую. Вроде бы в курсе всех новостей. Что Вас смутило в моём комментарии? |
| 3675. xameleon, 17.07.2013 00:42 |
Ратибор Алиен Ну я же не прошу у Вас денег, так какая Вам разница? |
| 3908. xameleon, 24.07.2013 13:58 |
цитата: Бедный бедный Intel - скоро длина некоторых инструкций будет сопоставима с размером подпрограмм, выполняющих аналогичную функциональность. Однако, я полностью согласен с Вами, что сокрытие описания системы команд Эльбруса - это неправильно. Вот вопрос к тем, кто утверждает, что знание системы команд не нужно: если компиляторы такие умные, то почему в коде ядра Linux столь много ассемблерных всавок? |
| 3911. xameleon, 24.07.2013 14:31 |
цитата:Никакой революции в компиляторах/оптимизации Си кода за последние 20 лет я не заметил. Эволюция - да, была. Пассаж о бесконечном перепесывании исходного кода я не понял. Наоборот, с усовершествованием процессоров некоторые инструкции можно заменить другими, более оптимальными. Т.ч. Ваш аргумент о "бесконечном переписывании" исходного кода говорит против использования директивы asm в Си коде, но тем не менеее - ассемблерные вставки активно испльзуются в коде ядра Linux. Опять же, практически любой современный С/C++ компилятор умеет генерировать ассемблерный код - ключ /Fa для MS Visual C, ключ -S для gcc. Будет очень удивительно, если тщательно скрываемый компилятор для Эльбруса не умеет генерировать ассемблерный код. |
| 3927. xameleon, 26.07.2013 20:16 |
цитата:Трудно возразить. Только работа с аппаратуртой через регистры c помощью in/out практически ушла в прошлое. Современное оборудование отображает порты устройств на шину адреса. К портам большинства современных устройств можно обращаться через указатели. цитата:Это ядро Linux не использует стандартные библиотеки, а на какой-нибудь микроядерной операционной системе такое вполне возможно. В любом случае - стандартные библиотеки завязаны не только на систему команд, но и на ядро. Например, чтобы реализовать библиотечную функцию код:- понадобится знание ассемблера, поскольку реализация архитектурно зависима. В то же время понадобится знание системных вызовов ядра, чтобы отдать ему время, проведённое в блокировке.int pthread_mutex_lock (pthread_mutex_t *mutex); цитата:Даже при написании прикладных программ необходимо знать систему команд. Это очень помогает в разработке, оптимизации и в отлове ошибок. В этом bess на 100% прав. |
| 4195. xameleon, 02.08.2013 00:27 |
цитата: L4Ka::Pistachio/x86-x32 (http://www.l4ka.org/94.php) на нём запустится? |
| 4197. xameleon, 02.08.2013 00:51 |
Вести речь об абстрактных офисах некорректно. Имхо, даже у текстового процессора, электронной таблицы и почтового клиента различные требования к производительности. Причём, у текстового процессора большую часть процессорного времени займёт рендеринг шрифтов и отрисовка. У электронной таблицы к этой задаче добавится динамический пересчёт ячеек, а у почтового клиента сортировка и архивация почты. |
| 4200. xameleon, 02.08.2013 04:03 |
цитата:Если пользователь не может набирать в редакторе vi документ в формате TeX, то ничего удобнее MS Word для него ещё не придумали. Продвинутый рядовой пользователь может использовать стили, создать оглавление, проверить правописание, пронумеровать страницы, создать колонтитулы, вставить картинку. Если "пользователь" не в состоянии выполнить эти операции, то офис не для него - стране нужны рабочие руки. OpenOffice хорош тем, что его код открытый и тем, что собирается практически под любую платформу. Но эта мультиплатформенность имеет и обратную сторону - большое количество зависимостей и требуемых библиотек. Например, если заглянуть репозиторий проекта (https://svn.apache.org/repos/asf/openoffice/trunk/main/), можно ужаснуться от огромного количества зависимостей. Навскидку - boost, cairo, i18n и т.д. И весь этот зоопарк работает тормознее MS Office. Я не хочу сказать, что все эти библиотеки неоптимально написаны, но кроссплатформенность требует дополнительного слоя абстракции от API системы, а дополнительный слой это бОльшие накладные расходы. Наконец, если мы говорим об Эльбрусах, то подразумеваем Linux, а это значит, что офисное ПО исполняется поверх X Window System, которая, как ни крути, в силу архитектурных особенностей более медленная чем Windows GDI. Ну и собственно пример проблемы с OpenOffice, который наверняка поставит в тупик рядового пользователя: http://web.archiveorange.com/archive/v/hhSc5KOL1h5nLH2zQkJE |
| 4213. xameleon, 02.08.2013 14:59 |
kayleth, таки Pistachio x86-32 запустится на МВ3S1/C или нет? Если запустится, то дайте две. Это принципиальный вопрос. |
| 4548. xameleon, 03.09.2013 03:28 |
Ох уж эти FPGA. Недавно приобрёл плату Марсоход-2 (http://marsohod.org/index.php/howtostart/marsohod2) в надежде сделать ещё один "Отечественный микропроцессор" Мечты ударились о суровую реальность - "команду за один такт" можно сделать используя RISC, а вот CISC уже необходимо реализовать через конечные автоматы (state machines), что рушит идею выполнять команду за такт. Пайплайны и хитрые конвееры тоже (пока) не получились - 10320 логических элементов и отсутствие знаний и опыта программирования на Verilog не позволяют реализовать задуманное. Ежели кто из уважаемых участников конференции готов безвозмездно помочь советами или даже поучаствовать в создании ещё одного ни-с-кем-не-совместимого "отечественного микропроцессора", то дайте знать. Раз уж отвечаю в эту тему, то пользуясь случаем хочу задать вопрос: "Имеет ли смысл регистры "Счётчик команд", "Указатель стека" и "Регистр флагов" помещать в общее регистровое пространство?" Т.е. решил я адресовать регистр 4-мя битами - получились регистры от R0 до R15. Первая идея была такая: R15 -Instruction Pointer, R14 - Stack Pointer, R13 - Flags. Но потом эта идея перестала нравиться - во первых, если разместить их отдельно, то будет на три регистра общего назначения больше, во вторых, обращение к регистрам флагов, IP и SP, помещенных в общий регистровый файл - на Verilog это выглядит не очень красиво и не оптимально. Ещё плюсы в том, что команды переходов вырождаются в операции MOV и ADD, а флагамии можно управлять операциями OR и AND. Но появляются и бессмысленные комбинации, типа использования регистра флагов или счётчика команд в оперции сдвига - то, что не может пригодиться в принципе. С другой стороны - общее число регистров ну просто обязано быть степенью двойки, потому что это решает множество проблем. Ну и как быть? Как бы вы реализовали эти регистры? |
| 4747. xameleon, 20.09.2013 14:52 |
цитата: Проект «Во́яджер» как бы опровергает это утверждение. Вроде бы связь с аппаратами до сих пор сохранилась? Это ли не чудо? цитата: |
| 4824. xameleon, 23.09.2013 15:42 |
цитата:Вполне можно уложиться в 16 байт. Дело в том, что эта последовательность не просто должна появиться на шине данных, а должна быть подмешана в инструкции. Для этого достаточно взять любую из несуществующих инструкций, которые вызывают исключение "неправильный код команды", и задержать это исключение до следующего байта. Далее задерживать исключение до конца последовательности. Вряд ли кто-то будет разбираться, почему исключение пришло на такт или несколько тактов позже. Вероятность случайного срабатывания близка к нулю. Для пущей надёжности можно включать детектор последовательности только при определённом состоянии флагов Z,C,O,D. Заметьте, я не рассуждал о том, каким образом эта последовательность попадёт в исполняемый файл и что должно произойти после активации последовательности, а лишь ответил на вопрос о длине последовательности. Более того, вроде бы современные процессоры имеют микрокод, который якобы можно перепрошить. Почему-то никто не боится, что в исполняемом коде случайно встретится последовательность, которая включит режим обновления микрокода. И вообще, "закладки", это жупел, который просто необходим некоторым людям, которые не понимают, что отечественную микроэлектронику необходимо развивать. Не каждому дано понять, какова пропасть между лидерами отрасли и российскими разработчиками. Зато угроза "закладок" понятна нетехническим специалистам. Повторюсь: "если закладок нет, то их необходимо придумать". |
| 4830. xameleon, 23.09.2013 16:23 |
цитата:Да, мой промах. Сначала написал, а потом уже осознал. Но это не отменяет факт, что 16 байт будет достаточно для практически недоказуемой активации чего-нить эдакого скрытого. |
| 4839. xameleon, 23.09.2013 17:18 |
цитата: В качестве возможного сценария - получить привелегии администратора через какой-нибудь пасьянс или "злых птичек". Фишка в том, что такую дыру никакими обновлениями системы не закрыть, а обнаружить на порядки сложнее, чем дыру в софте. Но если рассудить, то в сетевую карту поместить закладку более целесообразно, чем в процессор. |
| 4877. xameleon, 25.09.2013 16:53 |
Дилетантский вопрос про радиационную стойкость. Если поместить чип под излучение и он даст сбои, то восстановится ли его работоспособность после прекращения излучения? |
| 4927. xameleon, 26.09.2013 14:50 |
цитата:Именно это я и имел в виду. О других способах закладок я рассуждать не буду, поскольку слаб в электронике. цитата:Не представляю. Пусть несуществующая команда займёт пять байт. И ещё одинадцать байт для защиты от случайного срабатывания. 2 в степени 88 весьма большое число. Вероятность случайного срабатывания равна 1 / 485 009 821 345 068 724 781 056. С учётом того, что вся последовательность может оказаться в кэше, то задержки исключения может и не быть. Единственной видимой реакцией на хитрую последовательность может быть лишь отсутствие исключения по неправильной команде. А результатом успешного детектирования последовательности - повышение привелегий userspace задачи. Хочу обратить внимание - я не утверждаю, что такая закладка существует. Я лишь рассуждаю, как бы реализовывал закладку, если бы такую задачу поставили передо мной. :) цитата:Выше описал. В аналоговой части и radio-frequency мои познания чуть более чем ничего. цитата: Ну может быть кто-то и врёт, а я лишь допускаю такую возможность. Это как в гостиницах, где у горничных есть универсальный ключ от всех дверей. :) цитата:Камень в огород МЦСТ? Я бы с удовольствием продолжил этот разговор, но сказать больше нечего. Ну разве что в очередной раз крикнуть, что будущее за процессорами с аппаратной поддержкой микроядер. :) |
| 4930. xameleon, 26.09.2013 14:59 |
цитата: Спасибо. Выше кто-то сказал, что данные от спутников "Вояджер" (как и высадка человека на Луне) это фейк. Не буду спорить, а лишьь поинтересуюсь - советская программа «Венера» и данные переданные с этой планеты - тоже фейк? И если не фейк, почему космическим аппаратам 40 летней давности не помешали излучения Солнца и звёзд? |
| 4949. xameleon, 26.09.2013 19:13 |
цитата: В принципе, и сейчас ничто не мешает вынести сторожевой таймер в отдельное устройство и реализовать его на лампах. Схема будет не очень сложная - периодически через какое-то количество тактов должен прийти фронт сторожевого сигнала, а затем спад этого сигнала. Разумеется, формировать сторожевой сигнал должна полупорводниковая микросхема. Программно. Что будет означать её работоспособность. Если сторожевой сигнал не пришёл, то обрубается питание полупроводниковой системы, задержка, включение питания, устанавка сигнала сброса, задержка, сброс сигнала сброса. Наверное несколькими десятками радиоламп можно обойтись. Вот только энергопотребление такой схемы будет велико. |
| 4986. xameleon, 27.09.2013 16:22 |
А вот скажите, уважаемые, какие есть способы превратить IP core в микросхему? Если вдруг доделаю прототип процессора с поддержкой микроядра и на руках будет его Verilog код и софт-модель на языке Си, моделирующая поведение этого процессора, что делать дальше? Вот лично вы, участники этой темы, готовы будете потратить своё время на ознакомление или даже каким-то образом поддержать проект? |
| 4993. xameleon, 27.09.2013 20:09 |
цитата:Пока от компилятора только лексический анализатор и ~85% процентов от синтаксического анализатора языка Си. |
| 5020. xameleon, 03.10.2013 14:32 |
цитата:Предложите маленьким компаниям следующее
Пофит! |
| 5022. xameleon, 03.10.2013 14:52 |
цитата:Какая территория? ssh elbrus1.mcst.ru и вперёд. Или вам нужно глянуть в глаза человеку, чтобы определить, что он не американский/китайский шпион? У ЗАО "МЦСТ" нет, не было и, вероятно, не будет своей операционной системы, а значит что там крутится какой-нибудь Linux или в лучше случае BSD. А это значит, что дать удалённый shell можно всем, кому это действительно нужно. А если страх утечки сильно велик, то ведите полный лог каждого сеанса. Таким образом вы не только сможете опередилить "потенциального шпиона", но и найти слабые места железа и софта. |
| 5028. xameleon, 03.10.2013 16:44 |
цитата:Это самый простой способ, согласен. Но тем самым вы (ЗАО МЦСТ) сужаете круг желающих прикоснуться с отечественному процессору. цитата:Простите, очень может быть Вы не с теми общались? Crusoe от Transmeta тоже исполнял x86 в эмуляции и кому он нужен теперь. Всё уже забыли и о Crusoe и о Transmeta. цитата:Вот вот вот - отвечаю ниже как раз после "паяльника" :) цитата:Если мы говорим о клонах Юниксов, то защитить довольно просто. Дайте человеку shell, vi и сс. Я так понимаю, что ассемблерный код, сгенерённый компилятором, вы (МЦСТ) показывать не хотите. Решается довольно просто. Во первых, аттрибут -r на все исполняемые файлы, чтобы пользователь даже заглянуть в них не смог. Во вторых, асемблеру as и линковщику ld можно назначить права запуска от специального пользователя, а сс установить suid бит, чтобы при старте он работал от этого пользователя. И самое главное правило - не храните ничего секретного на машине, доступ к которой открыт из Сети. Дополнительная защита - файрволл, который разрешает доступ к машине по ssh только из списка разрешённых IP-адресов. Любая компания, которая претендует на звание серьёзного разработчика, может позволить себе статический IP адрес. Понимаете, уважаемый KT, если пользователь без прав может что-то утянуть, чего он не должен, то нужна ли такая система и есть ли в ней смысл? Даже для /etc/passwd уже десятки лет существует /etc/shadow Ну и немного помечтать о том, что можно сделать, имея shell, vi и cc. В редактор vi можно закопиастить исходный код протокола Z-modem, собрать его компилятором в домашней директории и использовать для передачи исходных текстов непосредственно через ssh. А дальше уже дело техники - из GNU/BSD исходников в домашней директории вполне можно собрать работоспособную и удобную консольную среду. При этом сетевые интерфейсы системы могут быть закрыты для пользователя. |
| 5030. xameleon, 03.10.2013 17:39 |
цитата: Первональную инфраструктуру создают гики. Без инфраструктуры производители паровозов даже не заметят нового процессора. |
| URL: | http://forum.ixbt.com/topic.cgi?id=8:24130 |