RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : горы зоолтые...


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : valerius
To : SiTLar
Subj : горы зоолтые...

> Вот мне как раз кажется, что после декабря 2006 года IBM отдаст сорцы.

Будем надеяться. Один человек говорил, что он писал в IBM насчет открытия сорцов, ему ответили,
что рассмотрят вопрос, если наберется достаточное количество голосов в предварительном опросе,
в результате опрос состоялся (на os2world), и, может быть, что-то и будет открыто, хотя на 100%
быть уверенным невозможно, ведь до этого уже было несколько петиций, и их не удовлетворили, что ж,
будем надеяться на лучшее...

> Конечно весьма желательно, чтоб это были сорцы OS/2PPC, т.к. там избавились от многих паталогий.
>

Да, там, конечно, все было переписано заново, даже разработаны кое-какие технологии, например GRADD.
Еще кажется, введена 32-битная подсистема VIO, и система стала потенциально переносимой на другие
платформы. Я даже скачал копию os2ppc, пощупать толком не удалось, так как нету соотв. железа, но все
равно интересно было залезть кое в какие файлы. :) Жаль что это не самая последняя версия системы...

> А чем Pistachio лучше MACH?

Прежде всего L4 -- это микроядро второго поколения, а Mach -- предыдущего. Оно (Mach) было хуже преж-
де всего своей тормознутостью. Так, MkLinux, построенный на базе Mach, был процентов на 20 медленнее
обычного линукса. А вот уже L4linux практически так же быстр, как простой, монолитный линукс. (разница в несколько %)
Mach был очень громоздким микроядром, приставка "микро" тут довольно условна, так, я посмотрел, в дистрибу-
тиве OS/2 PPC, само микроядро весит аж 500 килобайт! Хотя тут стоит учесть, что оно в формате ELF и для RISC-
процессора, то есть, должно быть заметно обьемней, чем такое же, но для интела. L4 же (Pistachio) весит (для
интела) 160-190 Кбайт вместе со встроенным kernel debugger'ом, а минимально где-то на уровне 80-100-120 Кбайт.
А вот в памяти оно занимает всего 12 Кбайт! (Объем исходников под все платформы -- около 8 Мбайт вснго) Настоящее
"микро", даже, наверное, "нано"!
Потом, L4 это ядро, реализующее минимальный набор абстракций и функций. Я признаюсь, что все же больше читал про L4,
но немного успел прочитать и в редбуке про OS/2 PPC (называется "OS/2 Warp Connect, PowerPC Edition: first look",
скачать можно на Хоббесе, информация открытая). Так, (может чего путаю, но по памяти) в IBM-овском микроядре
(построенном на базе Mach) были следующие абстракции: 1)тред-единица диспетчеризации процессорного времени.
2)Задача (task) -- единица аллокации ресурсов, имеет адресное пространство и набор прав доступа к портам (port
rights), 3)Порт (Port) -- абстракция канала для взаимодействия процессов. 4) Memory object -- единица выделения па-
мяти.
В L4 3 абстракции: 1)Тред (thread), 2)Адресное пространство (address space) -- единица выделения областей
памяти. Адресное пространство, вместе с работающими в нем несколькими тредами, эквивалентно понятию задачи (task).
3) IPC (Inter-process Communication) -- межпроцессная коммуникация, процесс обмена сообщениями между тредами
Большую роль играет UID -- (Universal Identifier) -- универсальный идентификатор процесса. Он однозначно
идентифицирует тред для ядра. Когда треды обмениваются сообщениями, они идентифицируют друг друга по UID'ам.
Но в Mach есть достаточное количество понятий, от которых можно избавиться для минимизации, что и было сделано в L4.
У L4 очень компактное API, в нем всего 7 функций (но каждая функция объединяет в себе много вариантов ее
использования). -- Это в отличие от Mach, которое более сложно устроено.
Потом, в L4 реализовано сверхбыстрое IPC, которое было достигнуто благодаря особым ухищрениям, типа передачи
маленьких сообщений внутри регистров процессора, копирования больших сообщений между адресными пространствами при
помощи временного отображения адресного пространства передающего процесса в адресное пространство получателя, и др.
В Mach IPC во много раз медленнее, примерно в 200 раз медленнее. Это достигается в L4 за счет новой операции
отображения (mapping) и предоставления (granting) адресных пространств. Причем в L4 эти операции осуществляются
рекурсивно, то есть, процесс A может передать насовсем (grant), или отобразить (map) часть своего адр. пространства
процессу B, а процесс B -- процессу C, и т. д., причем процесс, осуществивший маппинг другому процессу, может забрать
обратно свое адр. пространство, а тот, кто сделал операцию grant -- не может, но может забрать обратно процесс, сделавший map тому процессу, что сделал grant. В общем, эти операции позволяют одним процессам (исполняющимся в user space!) являться пейджерами (pagers), то есть обрабатывать page fault'ы для других юзерских процессов. Эта фича (user space pagers) отличает L4 от Mach и позволяет, в частности, просто реализовать виртуальные машины и такую вещь как
orthogonal persistence (не знаю, к сожалению, русского эквивалента этого названия). Как я это понимаю -- это заключается в том, что система сохраняет свое состояние, причем оно восстанавливается после сбоев (типа трапа и
внезапного нажатия кнопки Reset)(persistence), причем состояние каждого процесса сохраняется независимо от других
(ортогональность) -- сразу скажу, что это только мое понимание, может быть, неполное, или не совсем верное :) На такой
идее основан проект Unununium (unununium.org).
Потом, для L4 разработана интересная технология виртуализации. Называется "Pre-virtualisation with compiler after-
burning", суть в том, что компилятор gcc (а точнее -- binutils, а еще точнее, ассемблер as) патчится специальным
образом, что он создает специальный код для ОС, откомпилированной этим компайлером, и сама ОС тоже патчится. Затем
ОС компилируется (проверялось на Linux 2.6.9) и получается ядро, которое без изменений работает на голом железе,
над виртуализатором Xen, и над L4! И последняя составляющая -- виртуализатор, спец. layer над L4, под названием
wedge, создает спец. виртуальную машину для нашей ОС, ограничивая, например, количество доступной ОС памяти.
Я скачал Линух, wedge и L4, скомпилировал, все даже вроде заработало, только там все собирается с такими параметрами,
что с системой можно взаимодействовать только через com-порт (для кернел-дебуггера), а все это дело у меня под VPC,
так что взаимодействолвать с системой не получилось, не знаю как перенаправить com-порт вирт. машины на терминалку :)
Но система вроде грузится... (Окончательного успеха я пока не достиг).
Эта технология, кстати, позволяет запустить несколько OS Personalities над L4, причем можно сделать так, что одна
ОС может использовать драйвера устройств другой ОС и наоборот, причем сами драйвера не требуют перекомпиляции (например, можно использовать драйвера Linux, поставляющиеся в бинарной форме, в другой ОС). Это позволяет пользовать-
ся драйверами другой ОС, богатой на драйвера (Линукс прежде всего), причем без изменений, в нашей ОС, урезав до мини-
мума ОС-"донор".

Наконец, то, что L4 "минимальнее" Mach, означает, что оно надежнее, так как меньший объем кода исполняется на
высшем уровне привилегий, и, всё, кроме самогО микроядра, исполняется как юзерские процессы, даже Pager'ы и драйвера!
А это значит, что трап или паника в драйвере никогда не вызовет останов системы, драйвер можно просто перезапустить,
как обычный процесс!

Кстати, сейчас IBM занимается разработкой нового мультисерверного (то есть, не монолитного, а модульного) линукса
под названием SawMill над L4. Так что делаем выводы. IBM не принимает поспешных решений...

Наконец, L4Ka::Pistachio -- это только одна из реализаций L4 API, причем реализует самую последнюю версию этого API,
и реализовано на наибольшем числе аппаратных платформ -- Alpha, AMD64, ARM, IA-32, IA-64, MIPS64, PowerPC, PowrPC64,
SPARCv9. То есть, написав ОС над L4, мы получаем автоматически уже готовую поддержку всех этих процессоров и реализа-
цию SMP "Out of the box", и возможность легко строить кластерные системы. (Что, в принципе, умел и Mach тоже).

Так что список преимуществ достаточно большой...

PS:
Полезные ссылки:
l4ka.org -- страница Университета Карлсруэ -- разработчики L4Ka::Pistachio и L4Ka::Hazelnut
www.disy.cse.unsw.edu.au -- Университет Нового Южного Уэльса (Австралия) -- второй разработчик L4Ka
os.inf.tu-dresden.de -- сайт Дрезденского Университета -- разработчики ядра Fiasco (другая реализация L4)
l4hq.org -- Центральная страница сообщества L4

PPS:
Сорри если что не так в этом тексте, я сам только начинаю знакомиться с L4, возможны неточности...

WBR,
Валерий




Mon 18 Jul 2005 20:14 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.4.1) Gecko/20040




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.