dz ([info]dz) wrote,
@ 2009-08-31 13:15:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Phantom - looking around half-a-year later
Съездив в Питер и рассказав про/показав там Фантом я, конечно, поинтересовался, как изменилась за полгода молва о нём.

Ну что - интересно. Во-первых, как выясняется, нормальным людям концепция Фантома вполне понятна - вот, например, набрёл недавно на апрельскую аж статью, в которой всё очень адекватно изложено: Статья в PcMag/RE про Фантом

Во-вторых, за это время я несколько раз в том или ином виде рассказывал о Фантоме на семинарах, и более чем доволен результатом - приходят весьма вменяемые люди, задают крайне адекватные вопросы, видно, как в зале работает коллективная мысль. Я даже подумал, что можно попробовать на какой-нибудь из таких семинаров выкатить одну из имеющихся у нас непродуманных до конца проблем, с тем, чтобы порешать её коллективным разумом. Не очень понимаю, как это организовать (какой-то mind-mapping tool на проектор вывести?), но хочу.

(Кстати, был на CC отличный (в смысле - новый и интересный) вопрос про GC на мелких девайсах - хватит ли памяти между полными циклами GC. Не понимаю, почему он поставил меня в тупик на семинаре: ответ очевиден - на небольших устройствах можно тупо делать полный GC на живой системе.)

В-третьих, начинают появляться люди, заинтересованные в соучастии. (И реально способные к нему.) Без community effort эту гору нам, наверное, не свернуть, так что она из топовых задач - организовать среду для коллективного творчества.

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

Почему это важно? Потому, что до сих пор перед нами стояли проблемы РЕАЛИЗАЦИИ ядра ОС, а теперь появляются проблемы, связанные с жизнью в новой парадигме - они куда более интересны и - новы. Собственно, решение этих проблем и есть движение вперёд - то, что было до сих пор - более-менее банально. Ну - или кажется таковым с позиции человека, в основном их победившего.

Бесит долбаный GC, из-за которого мы не можем двигаться, но это, всё же, частная, и однозначно разрешимая проблема. Ужасно не хочу за неё браться, всё жду, что найдутся герои. Уже, впрочем, нашёлся [info]lpauzner , который занимается refcount алгоритмом, и там есть определённый прогресс. Ура. :)


Пара слов о коллегах.

1. Послушал про ReactOS. Очень большой и серьёзный проект, хорошо организован, довольно многого достиг. Конечно, хочется сказать "мужики, айда к нам в фантом, врага надо опережать, а не догонять" :), но, наверное, "кому поп, кому попадья". Удивило, что мужики не пробовали отладку ядра с помощью gdb под qemu - многое реально упрощается. Тем более, что toolchain там GNUсный. Несколько разочарован тем, что не было рассказа про архитектуру, но какое-то впечатление составил. Хотел с разработчиками пересечься, да как-то не сложилось.

А - и ещё меня удивило то, что FreeBSD NT subsystem разработчикам реактоса незвестна - казалось бы, в отношении драйверов оба решают одну задачу, и можно бы взаимодействовать.

Но - ещё раз - в целом я только упрочил своё представление об этом проекте: один из самых серьёзных на поляне.

2. OS/2 живее всех живых - оказывается, есть проект микроядерной OS/2 - http://ru.wikipedia.org/wiki/OsFree

Тут интереснее всего http://en.wikipedia.org/wiki/L4_microkernel_family - я не знал про этот проект, а то бы, наверное, воспользовался как основой для Фантома. Посмотрим - может быть, ещё и не поздно.







(41 comments) - (Post a new comment)


[info]dmzlj
2009-08-31 10:37 am UTC (link)
(Кстати, был на CC отличный (в смысле - новый и интересный) вопрос про GC на мелких девайсах - хватит ли памяти между полными циклами GC. Не понимаю, почему он поставил меня в тупик на семинаре: ответ очевиден - на небольших устройствах можно тупо делать полный GC на живой системе.)

У меня, кстати, есть реализованный живой пример мелкой системы с GC --- MCU: MSP430, размер хипа --- 1 - 2 килобайта, можно больше. Там исполняется байткод некоего скриптового языка, работает GC. Это реализовано, реально работает, есть всякие интересные наблюдения относительно сложности/памяти и т.п. Вся основная логика, кроме ядра, реализуется на языке высокого уровня.

(Reply to this) (Thread)


[info]dmzlj
2009-08-31 10:39 am UTC (link)
так вот, на таком размере хипа можно делать GC за O(1) (а фактически - 0) памяти, ценой ухудшения асимптотики, которое не чувствуется при малом количестве хипа, а вообще при некоторых допущениях при дизайне VM зачастую можно чистить память за O(C) времени в некоторые моменты. Т.е. очень быстро.

(Reply to this) (Parent)


[info]dz
2009-08-31 11:25 am UTC (link)
а код закрытый? Интересно бы посмотреть.

(Reply to this) (Parent)(Thread)


[info]dmzlj
2009-08-31 11:33 am UTC (link)
Ну код рантайма в целом пока закрытый, но отдельно gc я могу скинуть при условии нераспространения.

Но: это пока тупой консервативный сборщик, без всяких откровений, ориентированный на очень маленький хип -- он не жрет дополнительную память / стек, но и асимптотика в худшем случае около O(N*N).

Но вполне работает. Надо? Куда слать? d z at d z dot ru ?

(Reply to this) (Parent)(Thread)


[info]dz
2009-08-31 05:21 pm UTC (link)
Туда. естественно, "на посмотреть". Прочитаю и убью.

(Reply to this) (Parent)


[info]dz
2009-08-31 05:25 pm UTC (link)
PS: а не хочешь посмотреть на фантомный bytecode interpreter, и поругать способ применения там refcount-а?

(Reply to this) (Parent)(Thread)


[info]dmzlj
2009-08-31 07:58 pm UTC (link)
Я могу попробовать, но идею refcount-а я как-то вообще не одобряю.

Там наверняка много кода... но попробую, почему нет.

(Reply to this) (Parent)


[info]levgem
2009-08-31 11:52 am UTC (link)
L4 — прекраснейшая концепция, пускай и далековата от жизни.
Одна из основных идей в её разработке была та, что она полностью влезает в верхний кеш процессора. IBM платила бабло какое-то время в Карлсруе на это, а чего дальше было не знаю.

(Reply to this) (Thread)


[info]dz
2009-08-31 11:56 am UTC (link)
а почему далековата от жизни?

(Reply to this) (Parent)(Thread)


[info]levgem
2009-08-31 12:05 pm UTC (link)
Насколько я понимаю, особо широкого распространения она не получила, хотя конечно технология виртуализации могла бы хорошо на этой концепции развиться (только подумать: ОС может пережить даже крах шедулера)

Но проблемы прежде всего в производительности (по крайней мере были раньше, когда я активно следил за ней). И помимо просто накладных расходов на передачу сообщений, ещё немало отжирает механизм слежения за тем, кто кому может слать сообщения.

Кстати, в одной из концепций начала десятилетия была ещё хорошая идея: всё адресное пространство плоское, т.е. адрес 0x3245535552 уникален на все программы, просто есть защита. Соответственно, передать страницу и данные на ней в другую программу становится ощутимо проще: пойнтеры везде в одно и тоже место ведут.

(Reply to this) (Parent)(Thread)


[info]dz
2009-08-31 12:13 pm UTC (link)
"всё адресное пространство плоское" - Фантом, ага.

А от микроядра мне нужно только управление хардвером и thread switch, собственно.

(Reply to this) (Parent)(Thread)


[info]levgem
2009-08-31 12:20 pm UTC (link)
Собственно, L4 занимается тем, что
1) держит фиксированное количество слотов тредов (типа по количеству ядер)
2) трансформирует прерывания в сообщения
3) умеет передавать страницы в сообщениях
4) имеет загрузочный код в котором он стартует того, кто поднимет драйвера системы и т.п.
В идеале хорошо, что бы аппаратурой можно было бы рулить через DMA, который адресуется постранично. Т.е. что бы какой-то менеджер решал кому можно рулить железкой, кому нельзя, но тут я уже деталей не знаю.

Если требования от неё небольшие, то обязательно посмотрите на L4. Опять же, ненулевой шанс запуститься вместе с тем же линуксом на одном компьютере.

(Reply to this) (Parent)

Приветствую Дмитрий!
[info]oxyd
2009-09-19 04:02 am UTC (link)
Кратенько но увлекательно об особенностях L4 у Валерия Седлецкого. одного из наших основных разработчиков и автора FreeLDR: http://ru2.halfos.ru/core/articles/core003.html
управления хардвером от самого микроядра? Нее, это противоречит идеологии. Все драйвера в Userspace! Даже менеджер железа сидит в юзерспейсе! В статье Валериуса всё очень подробно описано. А по поводу реализации например POSIX API на фантоме... Кесарю Кесарево - пусть этим L4Linux занимается, если фантом, вдруг тоже переползёт на микроядро. ;)
Кстати. рекомендую пару книжек: Книга Френка солтиса "Основы AS/400" Тут весь букет прелестей: И плоская память и "байт-код" и независимость от железа и постоянные и временные объекты... Там очень и очень много интересных и полезных идей.
И вторая книга которая подтолкнуло нас к микроядру... Во времена Warp 3 была такая штука как OS/2 Warp connect PowerPC edition (Часть не состоявшегося проекта WorkplaceOS). Разработана была под модифицированное микроядро mach на архитектуре PowerPC. Вот что было у ней внутри. Мы во многом повторяем идеи. но и очень много и привносим своего ибо прогресс на месте не стоял. ;) Ну и ещё раз, будет время, заходите на IRC, пообщаемся, обменяемся идеями.

(Reply to this) (Parent)


[info]madfire
2009-09-01 10:26 pm UTC (link)
Я немного удивился, узнав что Pebble тоже SASOS (ну, разновидность).

(Reply to this) (Parent)


[info]tobotras
2009-08-31 12:38 pm UTC (link)
Извини, а в чём проблема с GC, я пропустил? Вроде, их человечество изобрело примерно миллион, в том числе, несколько наверняка успешно отчуждаемых?

(Reply to this) (Thread)


[info]dmzlj
2009-08-31 12:44 pm UTC (link)
На памяти размером 2**64 или тем более 2**128 любой текущий GC умрет. Если я правильно понимаю проблему.

(Reply to this) (Parent)(Thread)


[info]permea_kra
2009-09-04 05:46 am UTC (link)
есть dinamic region inference - модификация рефкаунтеров под ловлю циклических ссылок. Есть мнение, что от безысходности оно подошло бы.

(Reply to this) (Parent)(Thread)


[info]dz
2009-09-04 09:36 am UTC (link)
вот я тоже посматриваю в эту сторону. что почитать?

(Reply to this) (Parent)(Thread)


[info]dmzlj
2009-09-04 03:40 pm UTC (link)
А может, стоит каким-то образом разбить память на несколько пространств, и там собирать память по-отдельности?

(Reply to this) (Parent)(Thread)


[info]dz
2009-09-04 06:38 pm UTC (link)
толку-то? ссылки извне... конечно, можно все ссылки извне такого пространства проксировать и явно перечислять "на входе", но как-то совсем злобно получается

(Reply to this) (Parent)


[info]permea_kra
2009-09-05 12:29 pm UTC (link)
Я оригинальную статью читал: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.12.2797

Мне кажется, что ничего сильно лучше и не сделать.

(Reply to this) (Parent)


[info]dz
2009-08-31 12:52 pm UTC (link)
http://groups.google.com/group/phantom-os/browse_thread/thread/16b5cd81e7a78f2e?hl=en

рефкаунт сделать - день работы. а вот правильно врезать его в vm с первого захода не получилось. :(

(Reply to this) (Parent)


[info]d_zh
2009-08-31 03:07 pm UTC (link)
А я правильно понимаю, что апофеоз --- реализовать JVM на уровне ОС и радоваться жизни? Или я не правильно понимаю?

(Reply to this) (Thread)


[info]dz
2009-08-31 03:36 pm UTC (link)
Ну - к этому описание Фантома тоже можно свести, при желании. Но лучше сразу сказать, что он состоит из единичек и нулей.

(Reply to this) (Parent)

l4.verified
[info]runnig
2009-09-01 12:59 am UTC (link)
кстати, зацените, проект: парни математически доказывают, что L4 нету багов:
http://ertos.nicta.com.au/research/l4.verified/

(Reply to this) (Thread)

Re: l4.verified
[info]dz
2009-09-03 06:09 pm UTC (link)
В наш век экстремального программирования и тест-драйвен разработки это реально впечатляет. Респект и уважуха.

(Reply to this) (Parent)(Thread)

Re: l4.verified
[info]runnig
2009-09-03 11:56 pm UTC (link)
там конечно мильоны американских денег вложены в эти доказательства, но все равно потрясает

(Reply to this) (Parent)


[info]q4a
2009-09-01 09:38 pm UTC (link)
Позвольте представиться - Комаров Алексей aka q4a. Я помогал основному докладчику ReactOS на СС.

>Конечно, хочется сказать "мужики, айда к нам в фантом, врага надо опережать, а не догонять" :), но, наверное, "кому поп, кому попадья"
В общем да: по поводу ОС - хочется прежде всего стабильности - чтобы текущие дрова и приложения работали "искаропки", чтобы не было извращений с бинарной несовместимостью как в линуксе и пр. WinAPI уже неплохо реализовали WINE-овцы, а для совместимости по дровам проще всего реализовать ядро с nt-архитектурой, чем придумывать навесы над linux-ядром. А вот дальше можно уже будет с ReactOS-ом экспериментировать - портировать его под ядро L4, придумывать как его можно скрестить с Фантомом - главная идея в том, чтобы обычного пользователя-домохозяйку это не затронуло.

>Удивило, что мужики не пробовали отладку ядра с помощью gdb под qemu - многое реально упрощается. Тем более, что toolchain там GNUсный.
Собственно, я по отладке режима ядра не спец - мне как-то сказали топ-кодеры, что он не подойдет, но хотелось бы узнать по подробнее как это у вас организовано?

>Несколько разочарован тем, что не было рассказа про архитектуру, но какое-то впечатление составил.
Предполагалось, что основы NT архитектуры - самой распространенной на сегодняшний момент - известны, хорошо описаны и могут быть легко найдены в соотв. литературе.

>А - и ещё меня удивило то, что FreeBSD NT subsystem разработчикам реактоса незвестна - казалось бы, в отношении драйверов оба решают одну задачу, и можно бы взаимодействовать.
На самом деле на СС не было ни одного настоящего(имеющего доступ в svn на запись) разработчика. Может быть кому-то из топ-кодеров известно об этом проекте, но код от туда не заимствуется, на сколько я знаю.

>Хотел с разработчиками пересечься, да как-то не сложилось.
Собственно, если есть желание - это проще всего сделать в irc:
irc://irc.freenode.net:6667/reactos - англоговорящий чат, там всегда много разработчиков.
irc://irc.freenode.net:6667/reactos-ru - русскоговорящий чат, разработчиков там всего 2-3, но один из них - координатор проекта ReactOS, наш соотечественник - Алексей Брагин aka Fireball, да и комьюнити у нас неплохое. Меня, и докладчиков от ReactOS на СС в этом и прошлом году можно найти тут.

(Reply to this) (Thread)

osFree
[info]oxyd
2009-09-19 02:52 am UTC (link)
Присоединяюсь к последнему замечанию, нас тоже можно найти в IRC: irc://efnet.demon.co.uk/#osfree или любой другой сервер efnet'a. Исторически сложилось так, что на полуосных каналах кодировка KOI-8 ;) Вообще, пора уже начинать переходить на Google Wave. IRC тесновата стала, для общения территориально разнесённых разработчиков. ;)

PS: и к первому замечанию тоже присоединяюсь! Ибо я сегодня своими глазами увидел самолично откомпилированный LX-экзешник, который одинаково хорошо "Hello World'ит" как под IBM'овским ядром, так и под L4/Fiasco! Оно живое, мы на верном пути! (я надеюсь ;) )

(Reply to this) (Parent)


[info]n0xi0uzz
2009-09-02 11:53 am UTC (link)
http://jarios.org/

(Reply to this)


[info]tooheavymental
2009-09-08 07:58 pm UTC (link)
А сморите ли вы в сторону поддержки Phantom'ом STM(Software Transaction Memory)? Мне кажется, что кроме пользы от STM как таковой, через нее можно будет разрулить такие концептуальные проблемы Phantom'ы как "увязка с внешними состояниями" и перенинлицация драйверов при рестарте.

(Reply to this) (Thread)


[info]dz
2009-09-08 08:28 pm UTC (link)
как STM помогает со внешним состоянием, я не вижу, а с драйверами решение проблемы - по крайней мере, умозрительное - существует.

STM нужна для другого, и, наверное, могла бы быть уместна как замена классическим "семафорным" методам синхронизации, но в настоящий момент я её не рассматриваю.

(Reply to this) (Parent)


[info]lpauzner
2009-09-09 10:36 am UTC (link)
Привет,

сегодня прикрутил GC к фантому и оно работает. Уже пару часов работает и никуда падать не собирается :)

Единственный корень - это root. После нескольких часов упражнений наконец выяснилось что ты забыл оживить pvm_root.threads_list
и этот список был всегда девственно пустой, а я на него так надеялся... Когда починил pvm_root.threads_list остальное было просто.

Бодаться с твоим кодом GC не захотелось - написал простенький GC с нуля: он рекурсивный, но содержит около сотни строк (в основном пустых) и для целей поиска течей более чем сойдет.

Успехов.

Л.

(Reply to this) (Thread)


[info]dz
2009-09-09 11:28 am UTC (link)
супер!

старый GC всё равно, наверное, придётся оживить, но это уже отдельный этап. в принципе, если найдена такая серьёзная ошибка с pvm_root.threads_list, он тоже должен заработать нормально.


PS: Главная проблема с GC в том, что он будет вызывать полный обход памяти и, значит, полный pagein/pageout. То есть гонять его нужно редко.

(Reply to this) (Parent)(Thread)


[info]lpauzner
2009-09-09 09:32 pm UTC (link)
Старый GC прямо из коробки вел себя очень странно - после некоторой части работы начинал выдавать в stdout бинарные данные и уже не выходил из этого режима

Собственно и этот GC, и старый, и алгоритм подсчета ссылок - очень завязаны на устройство внутренних классов фантома, чтобы правильно обойти всех детей системных объектов нам приходится использовать этот внутренний слой системы (с точностью до багов, которые безусловно еще есть т.к. кое-где течет). Но вроде удалось прорубиться и как бы понятно что где и как.

Пока надо пооптимизировать код аллокатора и подправить утечки памяти, особенно в районе фреймов стека. Это самый ближайший горизонт.

Кстати, а почему фреймы стека - это двусвязный список? Казалось бы, достаточно иметь вершину стека и ссылки назад - чтобы вернуться вниз или прыгнуть эксепшном, или расти вверх от вершины, вроде больше ничего и не надо.

Выбрать схему аллокатора которая не будет меняться годами и переживет разные версии системы пока преждевременно.

(Reply to this) (Parent)(Thread)


[info]dz
2009-09-09 09:48 pm UTC (link)
стек двусвязный потому что есть прямая адресация в нём для "авто"-переменных

(Reply to this) (Parent)(Thread)


[info]lpauzner
2009-09-09 10:04 pm UTC (link)
все равно я не понял. зона видимости авто-переменных она же в одну сторону только.

(Reply to this) (Parent)(Thread)


[info]dz
2009-09-09 10:12 pm UTC (link)
доступ - по абс позиции в стеке. от "пустого". для этого нужны пойнтеры "вперёд"

(Reply to this) (Parent)(Thread)


[info]lpauzner
2009-09-09 11:53 pm UTC (link)
последняя страница стека всегда известна, в ней можно хранить абс смещение от начала, и потом отматывать "назад".

(Reply to this) (Parent)(Thread)


[info]dz
2009-09-10 06:32 am UTC (link)
тоже вариант, конечно

(Reply to this) (Parent)(Thread)


[info]lpauzner
2009-09-10 11:23 am UTC (link)
тогда не потребуется хака и особого случая, код будет единообразным и содержать потенциально меньше ошибок. Ну и доступ к авто-переменным будет чуть-чуть быстрее.

(Reply to this) (Parent)


(41 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…