LINUX.ORG.RU
ФорумTalks

Еще 1 довод в пользу микроядра


0

3

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

А в монолитном ядре есть специальные интерфейсы для userspace и для kernelspace. И зачастую интерфейсы kernelspace описаны максимум в виде разбросанных по коду комментариев.

И когда требуется обратиться к ним из kernelspace, то происходит приступ нелюбви, особенно если имеешь с ними дело впервые.

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от Stil

нет не из модуля, из юзер спейс, зачем тебе вообще модуль если ты работает с ком портом?

затем, что есть i2c-master, управляемый com портом. B gnu/linux есть много полезных программ для работы с i2c. Но чтобы ими воспользоваться, мне надо сделать драйвер, который будет регистрироваться в системе. И соответственно, мне нужно читать/писать в com порт из этого драйвера

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от cvs-255

И соответственно, мне нужно читать/писать в com порт из этого драйвера

И в чем проблема - что внутриядерный интерфейс модуля serial не документирован? Так это проблема написания документации, которую микроядро не решит.

tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

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

А что, есть репрезентативная выборка?

Чуть ли не единственное микроядро, которое сегодня доведено до промышленного испольования - это QNX. И в плане хорошей работы именно как ядро - оно рвёт все линуксы и бзди как тузик грелку. Жаль, только, оно ректально огорожено.

А говорить здесь, насколько хорошо или плохо работают Hurd и Minix3, бессмысленно - их надо сначала дописать до рабочего состояния.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

И в плане хорошей работы именно как ядро - оно рвёт все линуксы и бзди как тузик грелку.

А можно поконкретнее? Типа «вот ядро Linux не умеет X, а QNX умеет это очень хорошо».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Так это проблема написания документации, которую микроядро не решит.

В микроядре у модуля будет только 1 внешний интерфейс. И его волей-неволей придется документировать. Иначе вообще с модулем не поработаешь - ни из ядра, ни из пользовательского пространства.

С serial я посмотрел, так там драйвер вообще работает только в составе системы TTY.

И это несколько нетривиально.

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А можно поконкретнее?

Можно. Как только домой вернусь и пообщаюсь с нашими QNXниками, напишу поконкретнее (я-то сам в МСВС пишу). Но коллеги-программисты были реально впечатлены.

hobbit ★★★★★
()
Ответ на: комментарий от Deleted

В маке же гибридное ядро.

Похоже да.

http://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg?uselang=ru

Но слово «гибридное» окажется несущественным, если понятие user-space, kernel-space заменить понятием - адресное пространство. Вероятно, дизайн микроядра Mach и ядра Windows NT подразумевает разделение на user/kernel.

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

Если верить Википедии, то священная корова гибридных ядер:

«Гибридное ядро (англ. Hybrid kernel) — модифицированные микроядра (минимальная реализация основных функций ядра операционной системы компьютера), позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра.»

А в чём ускорене работы? Скорость работы процессора вне зависимости от уровня привелегий одинакова. Может быть на обработке прерываний можно чуть съэкономить, но это уже вопрос к авторам микроядра.

alman ★★★
()

А в монолитном ядре есть специальные интерфейсы для userspace и для
kernelspace. И зачастую интерфейсы kernelspace описаны максимум в виде
разбросанных по коду комментариев.

Такое разделение порождает различные pty, loop, tun/tap, fuse, alsa/pulse.

amaora ★★
()
Ответ на: комментарий от amaora

Такое разделение порождает различные pty, loop, tun/tap, fuse, alsa/pulse.

Единственный валидный пример - fuse.

tailgunner ★★★★★
()

довод уровня скучных обоев все же проще задокументировать ядро, даже написать свой манпейджес с интерфейсами драйверов и обязать поставщиков драйверов оформлять метаданные или сопровождать код теми самыми манпейджами, чем реально что-то изменить

Nicholass ★★★
()
Ответ на: комментарий от Deleted

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

Вот это 4.2, современные микроядра хороши. Вот беда что ОС на их основе нету. Почти все кто пытался делать ОС на микроведре упираются в косяки «старой школы» и начинают судорожно бадяжить ублюдковков гибриды. Гибриды в свою очередь тащат недостатки обоих подходов к проектированию. Что мы наблюдаем в тех же (очевидных примерах) офтопе и гомосмакоси. Паравиртуализированное ведро l4linux (ну нифига не оптимальный вариант «нагрузки» для микроведра) даже имеет определённые преимущества (по производительности ну и тоже во вполне определёных условиях, но всё же) перед нормальным.

erfea ★★★★★
()
Ответ на: комментарий от hobbit

Вот в том-то и дело, что микроядро, имеющее реальное применение, пока лишь одно - этот самый QNX. Но он не для персональных компьютеров. Все остальные микроядра - либо недоделки, либо мертвы.

Deleted
()
Ответ на: комментарий от alman

А в чём ускорене работы?

Многие действия в Ring 3 совершать запрещено (за подробностями читай интелловские мануалы). Поэтому нужно запускать части, требующие этих действий, в Ring 0. => Если ты хочешь вынести все драйверы в Ring 3, то ты теряешь в скорости из-за IPC и необходимости переключения контекста.

Deleted
()
Ответ на: комментарий от Deleted

Многие действия в Ring 3 совершать запрещено (за подробностями читай интелловские мануалы).

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

Если ты хочешь вынести все драйверы в Ring 3, то ты теряешь в скорости из-за IPC и необходимости переключения контекста.

Давай рассмотрим Mac OS X из картинки, которую я привёл выше. Файловая система исполняется не в Ring 0. Допустим, драйвер внешнего накопителя выполняется в контексте микроядра. Где профит, если после операции чтения/записи блоков, управление должно быть передано файловой системе, т.е. выход из Ring0 все же происходит?

alman ★★★
()
Последнее исправление: alman (всего исправлений: 1)
Ответ на: комментарий от lenin386

Пичаль в том, что говнокод работает и зарабатывает

Спрос рождает предложение, щито поделать.

SjZ ★★★★★
()
Ответ на: комментарий от Deleted

Многие действия в Ring 3 совершать запрещено (за подробностями читай интелловские мануалы). Поэтому нужно запускать части, требующие этих действий, в Ring 0

Не нужно. Ввод/вывод сейчас - это просто запись-чтение памяти.

tailgunner ★★★★★
()
Ответ на: комментарий от alman

привелегированные команды не нужны в драйверах устройств.

Доступ к портам ввода-вывода - привилегированная операция. Конечно, это не очень частая операция, но все же...

Deleted
()
Ответ на: комментарий от Deleted

Конечно монолит! Ибо только через инвольтацию об него эмергенция неизбежна :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Deleted

Загугли «взнала що внук голосував за регіони переписала хату на кота».

Хорош кот

quest ★★★★
()
Ответ на: комментарий от slackwarrior

Пипл хавает, деньги идут, экономика работает. По определению всё отлично. А закона о 95% никто не отменял.

SjZ ★★★★★
()
Ответ на: комментарий от hobbit

Не трави. Лучше исходники открой :)

Кое-что приотрыть можно. Например драйвер UART 16550

https://docs.google.com/file/d/0Bzo8HAmNqHgATE9CSkJGT3IzVmc/edit

Надеюсь, для описания некоторых принципов вполне сойдёт. Код не «причёсан». Такая вот рабоче-отладочная версия.

alman ★★★
()
Ответ на: комментарий от hobbit

Многие с пеной у рта доказывают, что это неприемлемо

По моим наблюдениям - хоть Си, хоть С++, хоть Паскаль - особой разницы нет. Правда, на Паскале пока примеров нет. Никак не могу себя заставить, хотя наработки присылали.

alman ★★★
()
Ответ на: комментарий от cvs-255

Ирония иронией, но под дос и винду на паскале немало драйверов было написано.

redgremlin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.