введение в MINIX 3
Как часто вы перезагружали ваш телевизор в прошедшем году? Вероятно, гораздо меньше, чем ваш компьютер. Конечно же, для этого есть много «резонов», но все больше и больше пользователей, далеких от техники, не хотят и слышать о них. Они хотят только, чтобы их компьютер все время прекрасно работал и никогда не отказывал. MINIX 3 является проектом по разработке операционной системы, надежной, как телевизор, для встраиваемых систем и критических приложений, как, впрочем, и для будущих 50-долларовых однокристальных портативных компьютеров и настольных систем общего применения. Сегодня эта маленькая, простая и надежная операционная система уже существует.
исторический экскурс
MINIX 3 имеет ясное будущее, но несколько затушеванное прошлое. Первая версия, MINIX 1, была создана в 1987 году и была первым клоном UNIX с полностью открытым исходным кодом. Она разрабатывалась быстро и скоро обрела свою собственную группу USENET (comp.os.minix) с 40000 подписчиков в течение 3 месяцев – это большая цифра для времени, когда Интернет был доступен только исследователям из университетов и студентам. Одним из первых приверженцев MINIX был финский студент по имени Линус Торвальдс, который пошел и купил ПК специально для того, чтобы запустить MINIX, очень тщательно изучил ее и затем, вдохновленный MINIX, решил написать свою собственную операционную систему. Хотя Линус и знал MINIX очень хорошо, он не заимствовал из нее какой-либо код, как приписывают ему некоторые. Система Линуса выросла в современную операционную систему Linux. Автор MINIX - Эндрю Таненбаум. Кстати, Таненбаум и Торвальдс провели несколько красивых публичных дискуссий по устройству операционных систем, первую из них в 1992 году, а самую последнюю – в 2006 году.
возрождение
Хотя MINIX была (и остается по-прежнему) широко используемым инструментом для курсов по изучению операционных систем в университетах, она получила новый импульс в 2005 году, когда Таненбаум собрал новую команду разработчиков для полной переделки ее в сверхнадежную систему. Хотя MINIX 3 и имеет общие исторические корни с MINIX 1 и MINIX 2 (реализованной в 1997 году как POSIX-совместимая ОС), но это фактически новая система (ситуация аналогична тому, как соотносятся Windows XP и Windows 3.1).
Различные исследования показывают, что программное обеспечение в общем случае содержит порядка 0,3 ошибок на 1000 строк кода и что драйверы устройств имеют в 0,4 раз больше ошибок, чем вся остальная операционная система. Если добавить еще тот факт, что 70% типовой операционной системы состоит из драйверов устройств, то становится ясно, что драйверы устройств являются самым большим источником ошибок. Для Windows XP, например, 85% сбоев происходят из-за ошибок в драйверах устройств. Очевидно, для того, чтобы сделать ОС надежной, нужно что-то сделать с этими «вредоносными» драйверами устройств. Построение системы, надежной, несмотря на неизбежное существование ошибок в драйверах, и было главной причиной появления MINIX 3.
конструкция
Подход, используемый в MINIX 3 для достижения высокой надежности, основан на изоляции ошибок. В частности, в отличие от традиционных ОС, где весь код объединен в единую огромную исполняемую программу, работающую в режиме ядра, в MINIX 3 в режиме ядра работает только крошечная часть кода – всего около 4000 строк кода. Этот код обслуживает прерывания, диспетчеризацию процессов и межпроцессное взаимодействие (interprocess communication, IPC). Оставшаяся часть операционной системы работает как набор процессов в пространстве пользователя, причем каждый из них защищен аппаратно диспетчером памяти (MMU) и ни один из них не имеет привилегий суперпользователя. Один из этих процессов, нареченный сервером реинкарнации, хранит таблицы всех остальных процессов, и когда один из этих процессов начинает работать некорректно или отказывает, сервер реинкарнации автоматически заменяет его новой копией. Поскольку многие ошибки нестабильны и возникают неожиданно, в большинстве случаев перезапуск отказавшего компонента решает проблему и позволяет системе восстановить себя без перезагрузки и без того, чтобы пользователь вообще заметил это. Это свойство называется «самовосстановление» (или «самолечение» - кому что больше нравится – прим. переводчика) и оно отсутствует в традиционных системах.
Структура MINIX 3 показана на рис. 1. Она спроектирована как многоуровневая конструкция. Внизу находится микроядро, работающее в режиме ядра и состоящее приблизительно из 3000 строк кода на С и 800 строк кода на ассемблере. Выше него находится уровень драйверов устройств, причем каждый драйвер является отдельным процессом в пространстве пользователя для облегчения его замены в случае, если он откажет. Затем идут серверы, которые составляют основу операционной системы. Они включают сервер реинкарнации, упомянутый выше, файловый сервер, диспетчер процессов и др., включая Х сервер, хранилище данных (data store) и множество прочих. И, наконец, сверху расположены процессы пользователя. Хотя изнутри MINIX 3 совершенно не похожа на остальные UNIX-образные системы, она поддерживает стандартный POSIX-интерфейс приложений, так что обычное ПО для UNIX может быть довольно легко в нее портировано.
Рис. 1. Архитектура MINIX 3.
Компоненты взаимодействуют между собой посылкой сообщений фиксированной длины. Например, процесс пользователя запрашивает файл, посылая сообщение файловому серверу, который в свою очередь, проверяет свой кэш и, если необходимый блок отсутствует, посылает сообщение процессу дискового драйвера начать получение блока. И хотя посылка сообщения добавляет немного дополнительного времени к длительности процесса обмена (около 500 нс на 3 ГГц Pentium 4), система остается вполне быстродействующей. Например, полная сборка системы, требующая более 120 компиляций, укладывается в 10 секунд.
точка зрения пользователя
С пользовательской точки зрения MINIX 3 выглядит, как UNIX, но не такой раздутый. Она содержит X Window System и более 400 стандартных программ UNIX, включая:
- командные процессоры (shells): ash, bash, pdksh, rsh;
- редакторы: emacs, nvi, vim, elvis, elle, mined, sed, ed, ex;
- языки программирования (language tools): cc, gcc, g++, bison, flex, perl, python, yacc;
- средства программирования (programming tools): cdiff, make, patch, tar, touch /* вообще нахождение в этом разделе tar и touch мне не совсем понятно... – прим. ред */;
- сетевые средства (networking): ssh, telnet, ftp, lynx, mail, rlogin, wget, pine;
- файловые утилиты: cat, cp, bzip2, compress, mv, dd, uue, GNU utilities;
- текстовые утилиты: grep, head, paste, prep, sort, spell, tail;
- администрирование: adduser, cron, fdisk, mknod, mount, cvs, rcs;
- игры: dungeon, nethack.
В настоящее время пользовательским интерфейсом является только Х, но со временем может быть добавлен и другой графический пользовательский интерфейс (GUI), если подходящий легкий GUI найдется.
доступность
MINIX 3 является программным обеспечением с открытым исходным кодом, распространяющимся под лицензией BSD. Она имеет свой собственный Интернет- сайт (www.minix3.org), с которого может быть скачан загружаемый образ CD-ROM, содержащий все исходники и исполняемые файлы /* все это читатели могут также найти и на сайте русскоязычной группы разработчиков ОС MINIX 3 - www.minix3.ru – прим. переводчика */. Для ее установки просто загрузите CD-ROM, войдите как root и наберите setup. Установка займет около 10 минут. После установки системы с CD-ROM или с Интернет-сайта простым набором packman с последующим выбором может быть загружено большое количество пакетов. В настоящее время MINIX 3 работает на платформе х86, но работа над портами на PowerPC и Xscale уже идет. Она также прекрасно работает на виртуальных машинах, таких, как VMware и Xen. С тех пор, как MINIX 3 была публично анонсирована в начале 2005 года, на Интернет-сайт наведалось более 300000 различных посетителей, а образ CD- ROM был скачан 75000 раз. В настоящее время на сайт заглядывают более 1000 посетителей в день. Существует также активная тематическая конференция на Google USENET, comp.os.minix, где люди задают вопросы и получают ответы, сообщают о новом ПО и обсуждают MINIX 3. MINIX 3 является результатом коллективной работы и ваша помощь будет только приветствоваться. Возьмите систему, поэкспериментируйте с ней и шагните в будущее.
Эндрю С. Таненбаум (Andrew S. Tanenbaum), перевод Павла Макарова
исторический экскурс
MINIX 3 имеет ясное будущее, но несколько затушеванное прошлое. Первая версия, MINIX 1, была создана в 1987 году и была первым клоном UNIX с полностью открытым исходным кодом. Она разрабатывалась быстро и скоро обрела свою собственную группу USENET (comp.os.minix) с 40000 подписчиков в течение 3 месяцев – это большая цифра для времени, когда Интернет был доступен только исследователям из университетов и студентам. Одним из первых приверженцев MINIX был финский студент по имени Линус Торвальдс, который пошел и купил ПК специально для того, чтобы запустить MINIX, очень тщательно изучил ее и затем, вдохновленный MINIX, решил написать свою собственную операционную систему. Хотя Линус и знал MINIX очень хорошо, он не заимствовал из нее какой-либо код, как приписывают ему некоторые. Система Линуса выросла в современную операционную систему Linux. Автор MINIX - Эндрю Таненбаум. Кстати, Таненбаум и Торвальдс провели несколько красивых публичных дискуссий по устройству операционных систем, первую из них в 1992 году, а самую последнюю – в 2006 году.
возрождение
Хотя MINIX была (и остается по-прежнему) широко используемым инструментом для курсов по изучению операционных систем в университетах, она получила новый импульс в 2005 году, когда Таненбаум собрал новую команду разработчиков для полной переделки ее в сверхнадежную систему. Хотя MINIX 3 и имеет общие исторические корни с MINIX 1 и MINIX 2 (реализованной в 1997 году как POSIX-совместимая ОС), но это фактически новая система (ситуация аналогична тому, как соотносятся Windows XP и Windows 3.1).
Различные исследования показывают, что программное обеспечение в общем случае содержит порядка 0,3 ошибок на 1000 строк кода и что драйверы устройств имеют в 0,4 раз больше ошибок, чем вся остальная операционная система. Если добавить еще тот факт, что 70% типовой операционной системы состоит из драйверов устройств, то становится ясно, что драйверы устройств являются самым большим источником ошибок. Для Windows XP, например, 85% сбоев происходят из-за ошибок в драйверах устройств. Очевидно, для того, чтобы сделать ОС надежной, нужно что-то сделать с этими «вредоносными» драйверами устройств. Построение системы, надежной, несмотря на неизбежное существование ошибок в драйверах, и было главной причиной появления MINIX 3.
конструкция
Подход, используемый в MINIX 3 для достижения высокой надежности, основан на изоляции ошибок. В частности, в отличие от традиционных ОС, где весь код объединен в единую огромную исполняемую программу, работающую в режиме ядра, в MINIX 3 в режиме ядра работает только крошечная часть кода – всего около 4000 строк кода. Этот код обслуживает прерывания, диспетчеризацию процессов и межпроцессное взаимодействие (interprocess communication, IPC). Оставшаяся часть операционной системы работает как набор процессов в пространстве пользователя, причем каждый из них защищен аппаратно диспетчером памяти (MMU) и ни один из них не имеет привилегий суперпользователя. Один из этих процессов, нареченный сервером реинкарнации, хранит таблицы всех остальных процессов, и когда один из этих процессов начинает работать некорректно или отказывает, сервер реинкарнации автоматически заменяет его новой копией. Поскольку многие ошибки нестабильны и возникают неожиданно, в большинстве случаев перезапуск отказавшего компонента решает проблему и позволяет системе восстановить себя без перезагрузки и без того, чтобы пользователь вообще заметил это. Это свойство называется «самовосстановление» (или «самолечение» - кому что больше нравится – прим. переводчика) и оно отсутствует в традиционных системах.
Структура MINIX 3 показана на рис. 1. Она спроектирована как многоуровневая конструкция. Внизу находится микроядро, работающее в режиме ядра и состоящее приблизительно из 3000 строк кода на С и 800 строк кода на ассемблере. Выше него находится уровень драйверов устройств, причем каждый драйвер является отдельным процессом в пространстве пользователя для облегчения его замены в случае, если он откажет. Затем идут серверы, которые составляют основу операционной системы. Они включают сервер реинкарнации, упомянутый выше, файловый сервер, диспетчер процессов и др., включая Х сервер, хранилище данных (data store) и множество прочих. И, наконец, сверху расположены процессы пользователя. Хотя изнутри MINIX 3 совершенно не похожа на остальные UNIX-образные системы, она поддерживает стандартный POSIX-интерфейс приложений, так что обычное ПО для UNIX может быть довольно легко в нее портировано.
Рис. 1. Архитектура MINIX 3.
Компоненты взаимодействуют между собой посылкой сообщений фиксированной длины. Например, процесс пользователя запрашивает файл, посылая сообщение файловому серверу, который в свою очередь, проверяет свой кэш и, если необходимый блок отсутствует, посылает сообщение процессу дискового драйвера начать получение блока. И хотя посылка сообщения добавляет немного дополнительного времени к длительности процесса обмена (около 500 нс на 3 ГГц Pentium 4), система остается вполне быстродействующей. Например, полная сборка системы, требующая более 120 компиляций, укладывается в 10 секунд.
точка зрения пользователя
С пользовательской точки зрения MINIX 3 выглядит, как UNIX, но не такой раздутый. Она содержит X Window System и более 400 стандартных программ UNIX, включая:
- командные процессоры (shells): ash, bash, pdksh, rsh;
- редакторы: emacs, nvi, vim, elvis, elle, mined, sed, ed, ex;
- языки программирования (language tools): cc, gcc, g++, bison, flex, perl, python, yacc;
- средства программирования (programming tools): cdiff, make, patch, tar, touch /* вообще нахождение в этом разделе tar и touch мне не совсем понятно... – прим. ред */;
- сетевые средства (networking): ssh, telnet, ftp, lynx, mail, rlogin, wget, pine;
- файловые утилиты: cat, cp, bzip2, compress, mv, dd, uue, GNU utilities;
- текстовые утилиты: grep, head, paste, prep, sort, spell, tail;
- администрирование: adduser, cron, fdisk, mknod, mount, cvs, rcs;
- игры: dungeon, nethack.
В настоящее время пользовательским интерфейсом является только Х, но со временем может быть добавлен и другой графический пользовательский интерфейс (GUI), если подходящий легкий GUI найдется.
доступность
MINIX 3 является программным обеспечением с открытым исходным кодом, распространяющимся под лицензией BSD. Она имеет свой собственный Интернет- сайт (www.minix3.org), с которого может быть скачан загружаемый образ CD-ROM, содержащий все исходники и исполняемые файлы /* все это читатели могут также найти и на сайте русскоязычной группы разработчиков ОС MINIX 3 - www.minix3.ru – прим. переводчика */. Для ее установки просто загрузите CD-ROM, войдите как root и наберите setup. Установка займет около 10 минут. После установки системы с CD-ROM или с Интернет-сайта простым набором packman с последующим выбором может быть загружено большое количество пакетов. В настоящее время MINIX 3 работает на платформе х86, но работа над портами на PowerPC и Xscale уже идет. Она также прекрасно работает на виртуальных машинах, таких, как VMware и Xen. С тех пор, как MINIX 3 была публично анонсирована в начале 2005 года, на Интернет-сайт наведалось более 300000 различных посетителей, а образ CD- ROM был скачан 75000 раз. В настоящее время на сайт заглядывают более 1000 посетителей в день. Существует также активная тематическая конференция на Google USENET, comp.os.minix, где люди задают вопросы и получают ответы, сообщают о новом ПО и обсуждают MINIX 3. MINIX 3 является результатом коллективной работы и ваша помощь будет только приветствоваться. Возьмите систему, поэкспериментируйте с ней и шагните в будущее.
Эндрю С. Таненбаум (Andrew S. Tanenbaum), перевод Павла Макарова
Сетевые решения. Статья была опубликована в номере 05 за 2007 год в рубрике software