Посвящается Туве, Патриции, Даниеле и Селесте. Явсегда мечтал быть в окружении молодых женщин благодаря вам моя мечта сбылась

Вид материалаДокументы

Содержание


1. Микроядро или монолит
2 . Переносимость
1. Микроядро или монолит
2 . Переносимость
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   13
Minix и Linux


Не все отклики были положительными. Хоть по натуре я и не борец, но когда Эндрю Таненбаум начал нападать на мою операционную систему, которая вытесняла его собствен­ную, пришлось защищать Linux и свою честь. Как и положе­но хакерам, мы грызлись по мейлу.

У него были все основания кипятиться. До появления те­леконференций Linux я постоянно использовал конференцию Minix для объявлений о Linux и поиска тех, кого моя опера­ционная система могла бы заинтересовать. Любого бы это за­цепило.

Во-первых, Эндрю не понравилось мое вторжение в его конференцию. И естественно, ему не нравилось, что его опе­рационная система начинала вытесняться этим новым созда­нием, явившимся со снежных просторов Финляндии, и что к проекту присоединялось столько новых разработчиков. Кроме того, у него были другие взгляды на построение операцион­ных систем. В то время Эндрю входил в лагерь сторонников микроядерного подхода к операционным системам. Minix была сделана в виде микроядра, и Amoeba, над которой он в то время работал, тоже содержала микроядро.

В конце 80-х — начале 90-х это направление было очень популярным. А успех Linux угрожал ему. Поэтому Эндрю ре­гулярно выступал с язвительными репликами.

Теоретически необходимость микроядра обосновывается следующим образом. Операционные системы сложны. Для их упрощения применяется модульный подход. Вся соль микроядра в том, чтобы оставить у ядра, которое является основой основ, как можно меньше функций. Его главная задача — об­мен информацией. А все возможности компьютера реализу­ются в виде сервисов, которые обеспечивают коммуникаци­онные каналы микроядра. Предполагается, что вы разбиваете проблемы на такие мелкие части, что вся сложность пропа­дает.

Мне это казалось глупым. Да, каждая отдельная часть по­лучается простой. Но при этом их взаимодействие становится гораздо более сложным, чем при включении ряда сервисов в состав ядра, как это сделано в Linux. Представьте себе чело­веческий мозг. Каждая его составляющая проста, но их взаи­модействие превращает мозг в очень сложную систему. В этом-то все и дело: целое больше частей. Если взять проблему, раз­делить ее пополам и сказать, что каждая половинка вполови­ну проще, то при этом вы игнорируете сложность интерфей­са между половинками. Сторонники микроядра предлагали разбить ядро на пятьдесят независимых частей так, чтобы ка­ждая часть была в пятьдесят раз проще. Они умалчивали о том, что взаимодействие между частями окажется сложнее исходной системы — при том, что и части сами по себе не будут элементарными.

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

Исходно Linux была намного меньше и намного, намного проще. Она не навязывала модульность, поэтому многое дела­лось гораздо проще, чем в Minix. Вот, например, что мне не нравилось в Minix: если у тебя одновременно работает пять разных программ и они хотят прочесть пять различных фай­лов, эти задания будут выполняться последовательно. Други­ми словами, пять различных процессов пошлют файловой системе запросы: «Можно мне прочесть файл X?» Демон файловой системы, который занимается чтением, примет один из них и пошлет ответ, потом другой — и так далее.

В Linux, где ядро монолитно, каждый из пяти процессов пошлет системный вызов ядру. Ядро должно действовать очень осторожно, чтобы не перепутать вызовы, но при этом оно очень естественно готово к обслуживанию любого числа процессов, выполняя все, что им нужно. Поэтому Linux рабо­тает намного быстрее и эффективнее.

Плохо было и то, что с исходниками Minix — согласно лицензионному соглашению — почти ничего нельзя было де­лать. Вот, например, Брюс Эванс провел коренную переделку Minix, которая ее значительно улучшила. Однако нельзя было намертво встроить эти изменения в систему. Разрешалось только приделывать заплатки. Просто кошмар какой-то! По закону он не мог сделать загрузочный модуль, чтобы облег­чить людям модернизацию. Поэтому для получения сколько-нибудь полезной системы модернизацию приходилось прово­дить в несколько этапов, что было крайне неудобно.

Единственный раз я принялся отвечать Эндрю Таненбауму в начале 1992 года. Представьте себе, что в одно вьюжное утро вы получаете такое нелицеприятное письмо:


From: ast@cs.vu.nl (Andy Tanenbaum)

То: Newsgroups: comp.os.minix

Subject: LINUX устарела

Date: 29 Jan 92 12:12:50 GMT


Я тут на пару недель уезжал в США, поэтому не писал особенно о LINUX (не то чтобы я стал писать, если бы и был здесь) . Однако теперь хочу сделать несколько замечаний.


Как большинство из вас знает, для меня MINIX - хобби, которым я занимаюсь по вечерам, когда мне надоедает писать книжки, а по CNN не показывают никаких войн, революций или парламентских слушаний. Моя основная работа — преподавание и исследования в области операционных систем.

По роду своей деятельности, мне кажется, я знаю кое-что о будущем операционных систем в ближайшие лет десять. Здесь возникают две проблемы:


1. МИКРОЯДРО ИЛИ МОНОЛИТ

Раньше большинство операционных систем были монолитными, то есть вся операционная система представляла собой единый исполняемый файл «a.out», работающий в режиме ядра. В этот бинарник входит управление процессами, управление памятью, файловая система и все остальное. Примерами таких систем могут служить UNIX, MS-DOS, VMS, MVS, OS/360, MULTICS и многие другие. Альтернативой является система с микроядром, в которой большая часть операционной системы разбивается на отдельные процессы, находящиеся вне ядра. Они обмениваются между собой сообщениями. В задачи ядра входит управление передачей этих сообщений, обработка прерываний, управление процессами низкого уровня и, возможно, ввод-вывод. Примерами такой архитектуры служат RC4000, Amoeba, Chorus, Mach и еще не выпущенная Windows /NT. Я мог бы многое рассказать о сравнительных преимуществах этих двух подходов, но достаточно сказать, что среди специалистов по разработке операционных систем споры уже закончились. Микроядро победило. Minix — система с микроядром. Файловая система и управление памятью — это отдельные процессы, которые работают вне ядра. Ввод-вывод тоже выполняется отдельно. LINUX — монолитная система. Это большой шаг назад, в 70-е. годы.


2 . ПЕРЕНОСИМОСТЬ

MINIX задумана как переносимая система и была перенесена с машин на базе Intel-процессоров на 680x0 (Atari, Amiga, Macintosh), SPARC и NS32016. LINUX тесно связана с 80x86. Тупиковый путь.

Поймите меня правильно. Я ничего не имею против LINUX. Она снимает с меня заботу о тех, кто хочет превратить MINIX в BSD UNIX. Но я с полной ответственностью заявляю, что те, кому нужна **СОВРЕМЕННАЯ** **бесплатная** ОС, должны искать переносимую ОС на базе микроядра, типа GNU или чего-то в этом роде.


Энди Таненбаум (ast@cs.vu.nl)


Я знал, что должен защитить свою честь, поэтому написал ответ.


From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)

Subject: Re: LINUX устарела

Date: 29 Jan 92 23:14:26 GMT

Organization: University of Helsinki


На сообщение с таким заголовком нельзя не ответить. Прошу прощения у пользователей minix, которые уже досыта наслушались о linux. Я хотел бы просто *проигнорировать вызов*, но ... Настало время серьезного спора!


В сообщении <12595@star.cs.vu.nl> ast@cs.vu.nl (Энди Таненбаум) пишет:


>Я тут на пару недель уезжал в США,поэтому не

>писал особенно о LINUX (не то чтобы я стал

>писать, если бы и был здесь) . Однако теперь я

>хочу сделать несколько замечаний.


>Как большинство из вас знает, для меня MINIX —

>хобби, которым я занимаюсь по вечерам, когда мне

>надоедает писать книжки, а по CNN не показывают

>никаких войн, революций или парламентских

>слушаний. Моя основная работа — преподавание и

>исследования в области операционных систем.


Вы хотите этим оправдать ограниченность minix? Извините, но вы не правы. У меня оправданий гораздо больше, и все-таки linux побеждает minix почти по всем параметрам. Не говоря уж о том, что большая часть хороших кодов для minix, похоже, написана Брюсом Эвансом.


Re 1: Для вас minix хобби — но ведь minix приносит доход, a linux раздается бесплатно. Теперь по поводу хобби. Поместите minix в свободный доступ, и одна из моих главных претензий к ней отпадет. Linux для меня в большой степени хобби (серьезное хобби, самого высшего сорта). Я не беру за нее денег, и она даже не является частью моей учебной работы. Я сделал ее в свободное время на собственной машине.


Re 2: Вы работаете преподавателем и исследователем. Прекрасное объяснение для умственной неполноценности minix. Остается надеяться, что Amoeba не такая фигня, как minix.


> 1. МИКРОЯДРО ИЛИ МОНОЛИТ

Да, linux — монолитная система, и я согласен, что микроядро лучше. Если бы у вашего сообщения не был такой спорный заголовок, я бы, вероятно, согласился с большинством ваших высказываний. С теоретической (и эстетической) точки зрения linux проигрывает. Если бы ядро GNU было готово прошлой весной, я бы и не взялся за свою разработку: беда в том, что оно не было готово тогда и не готово до сих пор. Linux выигрывает прежде всего потому, что она уже готова.

>MINIX — система с микроядром [пропущено, но без >потери смысла] . LINUX — монолитная система.

Если бы это было единственным критерием качества ядра, вы были бы правы. Однако вы не пишете о том, что микроядро в minix сделано плохо и возникают проблемы с многозадачностью (в ядре) . Если бы я сделал ОС, у файловой системы которой были бы проблемы с многозадачностью, я бы не стал так поспешно осуждать других: наоборот, я бы из кожи вон лез, чтобы все забыли о моем провале. Да, я знаю, что для minix есть масса заплаток, обеспечивающих многопоточную работу, но это лишь заплатки, и Брюс Эванс говорит, что все равно остается множество проблем синхронизации.


> 2 . ПЕРЕНОСИМОСТЬ

«Переносимость нужна людям, которые не умеют писать новые программы» — это я только что придумал. В шутку.

На самом деле linux легче переносится, чем minix. Что? — слышу я ваш возглас. Это верно, но не в том смысле, какой имеет в виду ast: я сделал linux в максимальном соответствии со стандартами (хотя у меня перед глазами не было стандарта POSIX). Перенос программ в linux обычно гораздо проще, чем перенос их в minix. Я согласен, что переносимость — хорошее дело, но только если она имеет реальный смысл. Нет причин делать операционную систему полностью переносимой: достаточно, чтобы она была согласована с переносимым API. Основная идея операционной системы заключается в том, чтобы воспользоваться аппаратными возможностями, спрятав их под слоем обращений высокого уровня. Именно это и делает linux: она просто использует больше возможностей 386, чем другие ядра. В результате само ядро, конечно, становится не переносимым, но зато существенно упрощается архитектура. Вполне приемлемый компромисс, который и сделал возможным появление linux. Я согласен, что в linux машинная

зависимость доведена до предела: я купил себе 386-й в январе прошлого года и занялся linux отчасти для того, чтобы его изучить. Многие вещи нужно было бы сделать более машинно-независимыми, если бы это был настоящий проект. Но я не особенно оправдываюсь: это было конструктивное решение, и когда в апреле прошлого года я начинал писать linux, то не думал, что программой захочет воспользоваться кто-то другой. К счастью, я ошибся, а поскольку мои исходники всем доступны, каждый может попробовать перенести ее, хотя это будет и непросто.