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

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

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

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

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

From: [email protected] (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 или чего-то в этом роде.

Энди Таненбаум ([email protected])

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

From: [email protected] (Linus Benedict Torvalds)

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

Date: 29 Jan 92 23:14:26 GMT

Organization: University of Helsinki

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

В сообщении <[email protected]> [email protected] (Энди Таненбаум) пишет:

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

>писал особенно о 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, то не думал, что программой захочет воспользоваться кто-то другой. К счастью, я ошибся, а поскольку мои исходники всем доступны, каждый может попробовать перенести ее, хотя это будет и непросто.

Линус

PS> Прошу прощения за слишком резкие высказывания: minix – неплохая система, если нет ничего другого. Amoeba, может быть, неплоха, если у вас валяется 5–10 лишних 386-х, но у меня их нет. Обычно я не вступаю в перепалки, но linux – мое больное место:)