<fat>
Потому что ещё не растолстело. Вот добавят в него поддержку СТОЛЬКИХ устройств - будут ругать. И настанет тогда linux-капец, и будут на Земле властвовать программы Корпорации.
</fat>
Нет, не гибрид. Гибрид - это чуть-чуть расширенное микроядро, включающее только базовую поддержку некоторого функционала для увеличения скорости работы. Например, ядро может предоставлять объекты для зашаривания памяти, а в классической микроядерной системе для этого придётся обратиться к специальному серверу. Далее, в микроядерной системе даже обработка юспейс фолтов может роутиться в юзерспейс, в гибридной - все фолты целиком обрабатываются в ядре. Ну и т. д. Наличие в линуксовом ядре виртуальной файловой системы, TCP/IP стека, прочих подсистем, драйверов не позволяет его отнести к гибридным системам. В них это всё должно работать в юзерспейсе.
> Гибрид - это чуть-чуть расширенное микроядро, включающее только базовую поддержку некоторого функционала для увеличения скорости работы.
Зашибись определение.
> Например, ядро может предоставлять объекты для зашаривания памяти, а в классической микроядерной системе для этого придётся обратиться к специальному серверу.
Как назывался этот сервер в классическом Mach?
> Далее, в микроядерной системе даже обработка юспейс фолтов может роутиться в юзерспейс
Ну ты системы-то называй, не стесняйся. Заодно и объясни, что такое "юспейс фолт" и что значит "роутится в юзерспейс"
> Наличие в линуксовом ядре виртуальной файловой системы, TCP/IP стека, прочих подсистем, драйверов не позволяет его отнести к гибридным системам.
А наличие всего этого в ядре Macos (ядро - это то, что тработает в режиме ядра) позволяет отнести ядро Macos к гибридным?
Вообще микроядерность/гибридность/монолитность — понятия размытые, ибо фактически чистых представителей того или иного вида нет. Тот же Darwin обладает признаками и микроядра, и гибридного. Точно так же в зависимости от выбранных признаков и нужного результата Linux относят то к гибриду, то к монолиту.
А если правильно выбрать признаки, то можно и NT назвать гибридом.
По сабжу — потому что солярис и бздя не сильно угрожают винде, вот GTF для них и не выпускается.
Во-первых 4.2, у нее обычное монолитное ядро (ФС и подсистема BSD там в режиме ядра, все сервисы ядра в одном контексте). Во-вторых макось при ошибке в драйвере (например разыменование нулевого указателя) паникует. А линукс делает oops и продолжает работать. Чему завидовать-то?
Укажи на неточность, если такая есть, или дополни, если определение неполное. > Как назывался этот сервер в классическом Mach?
В mach это делается в ядре. Mach вообще не микроядро, даже на гибрид не претендует, это недомонолит. Там block layer и куча драйверов находятся в ядре. Вместо этого Minix3 хотя бы смотри (servers/vm). >> Далее, в микроядерной системе даже обработка юспейс фолтов может роутиться в юзерспейс
> Ну ты системы-то называй, не стесняйся.
В L4 именно так и делается. > Заодно и объясни, что такое "юспейс фолт"
Фолт, который произошёл, когда процесс работал в пространстве пользователя. > и что значит "роутится в юзерспейс"
Ядро вызывает обработчк (если таковой был зарегистрирован), который будет работать в режиме пользователя. > А наличие всего этого в ядре Macos (ядро - это то, что тработает в режиме ядра) позволяет отнести ядро Macos к гибридным?
> Укажи на неточность, если такая есть, или дополни, если определение неполное.
Вот правильное определение: "Гибридное ядро - маркетинговый термин, популяризованный в начале 90-х Microsoft для продвижения своей ОС Windows NT. Кроме желания использовать в рекламных целях популярную тогда идеологию микроядерных ОС, смысла не имеет. Позднее использован в рекламе Mac OS X".
> Mach вообще не микроядро, даже на гибрид не претендует, это недомонолит.
Как интересно.
>>> Далее, в микроядерной системе даже обработка юспейс фолтов может роутиться в юзерспейс
>> Ну ты системы-то называй, не стесняйся.
> В L4 именно так и делается.
То есть Mach, Chorus и прочие - это не микроядра? Интересно было бы услышать твое определение микроядра.
>> Заодно и объясни, что такое "юспейс фолт"
> Фолт, который произошёл, когда процесс работал в пространстве пользователя.
Мде. Поглядев в магический кристалл, прозреваю, что имеется в виду page fault.
>> и что значит "роутится в юзерспейс"
> Ядро вызывает обработчк (если таковой был зарегистрирован), который будет работать в режиме пользователя.
Ты описал SIGSEGV, для которого микроядро нафиг не нужно. И который, кстати, использовался для реализации VM в userspace.
> Укажи на неточность, если такая есть, или дополни, если определение неполное.
Попробую сам уточнить: вся работа с устройствами (кроме базовых компонент типа контроллера прерываний), различные протоколы, файловые системы и т. п., как и в микроядре, выносится в юзерспейс. Но в ядро, как я уже упомянул, может быть добавлен некоторый минималистичный функционал для повышения производительности серверов.
Если располагаете более точным определением, по-прежнему, будет интересно с ним ознакомиться.
> Вот правильное определение: "Гибридное ядро - маркетинговый термин, популяризованный в начале 90-х Microsoft для продвижения своей ОС Windows NT. Кроме желания использовать в рекламных целях популярную тогда идеологию микроядерных ОС, смысла не имеет. Позднее использован в рекламе Mac OS X".
Ну, мысль понятна: ОС, в которой системная часть распределена между ядром и юзерспейсом. Только такое определение черезчур уж размыто. А уж в windows NT так вообще гуйня в ядре находится, а это исключительно пользовательский функционал. > Интересно было бы услышать твое определение микроядра.
Посмотри лучше Танненбаума, что ли. Не собираюсь я копипастом заниматься. И посмотри код L4, ядра minix3, coyotos. > Мде. Поглядев в магический кристалл, прозреваю, что имеется в виду page fault.
> Ты описал SIGSEGV, для которого микроядро нафиг не нужно. И который, кстати, использовался для реализации VM в userspace.
Обращение по неправильному адресу - это лишь небольшая часть. Сюда также относятся и замапленные страницы файла, которые ещё не прочитаны с диска, страницы, скинутые в своп и т. д.
>> Вот правильное определение: "Гибридное ядро - маркетинговый термин, популяризованный в начале 90-х Microsoft для продвижения своей ОС Windows NT. Кроме желания использовать в рекламных целях популярную тогда идеологию микроядерных ОС, смысла не имеет. Позднее использован в рекламе Mac OS X".
> Ну, мысль понятна: ОС, в которой системная часть распределена между ядром и юзерспейсом.
Замечательная мысль, только не имеет отношения к определению гибридного ядра..
>> Интересно было бы услышать твое определение микроядра.
> Посмотри лучше Танненбаума, что ли. Не собираюсь я копипастом заниматься. И посмотри код L4, ядра minix3, coyotos.
А ты посмотри что-нибудь еще, кроме Танненбаума. И будь поосторожнее с терминами, а то получится, что нет бога, кроме Танненбаума, а до L4 микроядер и не было.
> Обращение по неправильному адресу - это лишь небольшая часть. Сюда также относятся и замапленные страницы файла, которые ещё не прочитаны с диска, страницы, скинутые в своп и т. д.
>почитай сначала про отличия класических монолитных ядрер которые нафиг устарели и современных модульных
>Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными.
> Замечательная мысль, только не имеет отношения к определению гибридного ядра..
Ошибься, да, уже заметил. Давай тогда определимся с понятием ядра вообще. Я придерживаюсь трактовки, что это весь код работающий с CPL=0. Не согласен? -- Приведи формальное, полное определение ядра (ну или ткни носом в ресурс, в котором я такое правильное с твоей точки зрения определение смогу прочитать сам), опираясь на которое, можно провести чёткое отличие между монолитным ядром и гибридным. Определение, озвученное тобой, не делает этого. Друзья, запостившие в en.wikipedia.org статью "Hybrid kernel", кстати говоря, этого не делают так же. Разница всего навсего в терминологии (обозвали компоненты ядра серверами, работающими в пространстве ядра, взаимодействующими через определённый протокол), а суть не изменилась ни разу. Монолитом было -- монолитом и осталось. Весь код, имеющий пользовательскую семантику -- по-прежнему в просранстве ядра, и при падении любого из компонентов систему в большинстве случаев придётся перезагрузить полностью. > А ты посмотри что-нибудь еще, кроме Танненбаума
Читал. Ещё много чего. Хочешь, чтобы перечислил? И опыт в разработке и микроядерных, и монолитных (здесь не очень большой, в виде linux) систем имею. А пост был к тому, что я не предлагаю своих определений, а придерживаюсь классических и копипастить их смысла не вижу. > до L4 микроядер и не было.
Ну почему же не было -- minix появился раньше. > С помощью SIGSEGV это всё делалось.
SIGSEGV не для этого. А вообще, проблем сделать это через сигналы пока не вижу. Только вот в монолитных и гибридных системах типы фолтов, отличных от "invalid memory reference" обрабатываются в ядре.
> Разница всего навсего в терминологии (обозвали компоненты ядра серверами, работающими в пространстве ядра, взаимодействующими через определённый протокол), а суть не изменилась ни разу. Монолитом было -- монолитом и осталось.
То есть ты согласен, что термн hybrid kernel не имеет технического смысла?
> я не предлагаю своих определений, а придерживаюсь классических
Прекрасно. И какую же систему ты назвал "классической микроядерной системой"?
>> до L4 микроядер и не было.
> Ну почему же не было -- minix появился раньше.
Ты написал minix3, таким образом исключив более ранние версии. В любом случае, Mach старше любого из minix.
> SIGSEGV не для этого.
Он для этого тоже.
> монолитных и гибридных системах типы фолтов, отличных от "invalid memory reference"
Да ну? Открываем posix и видим там: "SIGSEGV A Invalid memory reference." Получается, мы либо забиваем на posix, либо сталкиваемся со следующим затруднением: приложение хочет установить свой обработчик SIGSEGV для отлова обращений к невалидным адресам. А тут оказывается, что кто-то уже использует этот сигнал для других целей. Как выкрутиться?
>> Прекрасно. И какую же систему ты назвал "классической микроядерной системой"?
Повторяю ещё раз (последний): minix и L4. Что они единственные такие, ни в коем случае не утверждаю. А gnu mach -- да, сюда не вписывается ни разу. А от копипаста, как и прежде, воздержусь. Нужны подробные объяснения? Начни отсюда: http://en.wikipedia.org/wiki/Microkernel. Самое что ни на есть классическое определение.
> Ну ты приведешь список фолтов, или как?
Два из них уже привёл: а) замапленные страницы файла, ещё не прочитанные с диска б) Страницы, находящиеся в свопе.
Случай №3: процесс создаёт анонимный маппинг большого размера. Ядро создаёт регион в виртуальной памяти процесса, но страницы в page table не отображает, если при маппе не был указан флаг MAP_POPULATE. При обращении к любой из этих страниц в ядре возникает фолт, по которому соответствующую запись в таблицу страниц необходимо внести.
Случай №4: страницы, имеющие семантику copy-on-write.
Признаюсь, весь путь развития minix не прослеживал. Знакомился сразу с minix3.
> И что?
Приведи решение описанной проблемы.
> Скажи, как называется в Minix1 (да хоть и в Minix3) "специальный сервер для расшаривания памяти".
В minix3 - vm. Если доверять списку апдейтов, появился только в 3-ей версии. Как работало до этого - без понятия. Занимается всеми маппингами вообще, в том числе shared. И page фолты обрабатывает.
> Всё, что ты назвал - это виды page fault. Ты только о них говоришь?
Да. Page fault имеют место и в kernel mode (К. О., да). Употреблённое "юспейс фолты" относилось к этому.
> Мде. Ну и ладно. Удачи в разработке микроядерных ОС.
Я, между прочим, не троллинга/самоутверждения ради спросил про определение термина "ядро". Если я что-то не так понимаю, хотелось бы это выяснить. Первоначальное значение термина "гибридное ядно", согласно тому, что я нагуглил, похоже, соответствует указанному вами. Согласен. Только вот смысла оно, действительно, не имеет никакого. Интересует, соответствует ли современная трактовка первоначальной.