Миникс 3

Миникс 3
MINIX 3
Screenshot of MINIX 3
Оболочка X11 с оконным менеджером TWM работающая на операционной системе MINIX 3
Разработчик

Andrew S. Tanenbaum

Семейство ОС

Unix-like

Исходный код

Free and open source software

Частота обновления финальных версий

yes

Лицензия

BSD License

Состояние

{{{состояние}}}

Веб-сайт

minix3.org

Миникс 3 — это проект по созданию небольших высоко надежных и функциональных Unix-подобных операционных систем (ОС). Он был издан согласно стандартам лицензии BSD и стал наследником ранее созданных ОС М1 и М2.

Основной целью данного проекта было создать отказоустойчивую систему, которая могла бы обнаруживать и исправлять свои ошибки без непосредственного вмешательства пользователя. ОС в основном предполагалось использовать как встроенную систему в образовании и на лептопах OLPC XO-1.[1]

М3 в настоящее время поддерживает архитектуру IA-32 PC compatible. Кроме того, М3 также совместим с эмуляторами и виртуальными машинами, такие как Bochs,[2][3] VMware Workstation,[4] Microsoft Virtual PC,[5] и QEMU. Порты PowerPC[6] и ARMs (Intel XScale)[7] находятся в стадии разработки.

Его раздача происходит на Live CD, а так же он может быть загружен как образ для USB-флеш-накопителя.[8]

Содержание

Цели проекта

Структура опереционных систем с монолитным ядром (слева) и микроядром

Отражая сущность систем с монолитным ядром, где драйвер (в котором, по словам создателя Миникс 3 Таненбаума, примерно в 3-7 раз больше ошибок чем в обычной программе)[9] может обрушить всю систему.[10] Миникс 3 направлен на создание ОС, которая была бы надежной, самоисцеляемой и многосерверной UNIX-клоном.[11]

Для того чтобы достичь этого, код, работающий в ядре, должен быть минимальным для сервера файлов и сервера процесса, а каждый драйвер устройства должен работать как отдельный процесс в пользовательском режиме. Каждый драйвер тщательно контролируется частью системы, известной как реинкарнационный сервер. Если драйвер не реагирует на пинг от сервера реинкарнации, то он закрывается и заменяется новой копией.

В монолитной системе ошибка в драйвере может привести к разрушению всего ядра, что гораздо менее вероятно произойдет в Миникс 3.[12]

История

MINIX 3 versions[13]
Version Release date Description
3.1.0 2005-10-24
  • The first release of MINIX 3 (Book Release).
3.1.2a 2006-05-29
  • New Packman package manager.
  • Fixed an installation issue with auto-partitioning disks.
3.1.3 2007-04-13
  • Added new virtual file system
3.1.3a 2007-06-08
  • Bug fixes.
3.1.4 2009-06-09
  • Virtual memory support.
  • Improved virtual machine support (when MINIX runs as guest).
3.1.5 2009-11-05
  • Improvements performance
  • Shared memory
  • setitimer function
  • ISO 9660 file system
  • Open Sound System
  • Trap NULL accesses now, for user convenience
  • Improved signal handling
  • Better support for debuggers (ptrace improvements, etc.)
  • Network card autodetection (for supported PCI cards), improved network configuration
3.1.6 2010-02-08
  • New Network drivers: Atheros L2, Intel E1000, Realtek 8169, DEC Tulip
  • PipeFS — removed pipe handling from filesystem drivers
  • HGFS — support for mounting VMware shared folders as file system
  • VFS: supplemental group support and sticky bit support
  • Floating-point unit support
  • System Event Framework (SEF)
  • Experimental APIC support
3.1.7 2010-06-16
  • Userspace scheduling and a scheduling server[14]
  • Proper support for multiple ethernet cards of the same type
  • Boot monitor allows loading images > 16 MB
  • Buildsystem support for building MINIX with GCC
  • Support for the cp1251 and koi8-u charsets
3.1.8 2010-10-04
  • New package management infrastructure: pkgsrc and pkgin
  • Unix domain socket support
  • Multiboot support
  • ext2 support
  • ACPI driver
  • full APIC mode including I/O APICs
  • Experimental AHCI support
3.2.0 2012-02-29
  • Porting GNU Debugger to MINIX 3 and implementing core dumping support
  • FUSE Support with experimental NTFS-3G file system
  • Gradual replacement of MINIX userland with NetBSD userland
  • Replacing the default compiler ACK with Clang (GCC is also supported)
  • Switch to ELF and NetBSD libc libraries
  • Pkgsrc Upstreaming and Application Porting
  • Asynchronous virtual filesystem (VFS) server.
  • Replacing the MINIX bootloader with NetBSD bootloader
  • NCQ support in the AHCI driver
3.2.1 TBA
  • Replacing the default inet server with lwIP network stack
  • Transitioning towards strict BSD coding style (based on KNF)
  • VBFS — support for mounting VirtualBox Shared Folder as file system
  • Cross-compilation support
  • Device Driver Environment kit support
  •      Book Release
  •      Old release
  •      Current stable release
  •      Current development release

Миникс 3 был анонсирован 24 октября 2005 года Эндрю Таненбаумом во время его вступительной речи на симпозиуме о принципах операционных систем ACM. Хотя Миникс 3 все еще служит в качестве примера для нового издания книги Т. и Вудхалла, он все же был переработан, чтобы быть "удобным в использовании как надёжная операционная система для встраиваемых устройств и устройств с ограниченными ресурсами, для задач требующих высокой надёжности.

Ревизия сайта

С выходом новой версии Миникс — Миникс 3.2.0, официальный вебсайт был усовершенствован. Его достоинством является то, что кнопка загрузки размещена прямо на главной странице и ссылки на другие важные страницы. Официальный сайт до сих пор еще не получил необходимого ремонта и в настоящее время работает на MoinMoin.

Надежность Миникс 3

Главной целью Миникс 3 является надежность. Ниже представлены некоторые из наиболее важных принципов повышения надежности.

Уменьшение размера ядра

Монолитные операционные системы, такие как Linux и FreeBSD, и такой гибрид как Windows имеют миллионный строковый код ядра. В отличие от Миникс 3, в котором исполняемый код ядра написан в 6000 строк, и в котором проще отследить проблему в коде.

Отсек ошибок

В монолитной ОС драйвер устройства располагается в ядре. Это означает, что когда новое периферийное устройство загружается, неизвестный ненадежный код вставляется в ядро. Ошибка в коде драйвера может привести к уничтожению системы. В Миникс 3 каждый драйвер работает в своём процессе. Драйверы не могут выполнять привилегированные команды: модификаци таблицы страниц памяти, произвольный ввод/вывод или же запись в память по абсолютному адресу. Они вынуждены вызвать ядро для этого и оно проверит каждую команду на допустимость.

Ограничение доступа драйверов к памяти

В монолитной ОС драйвер может написать любое слово из памяти и таким образом может случайно испортить пользовательскую программу. В Миникс 3, когда пользователь ожидает данные, к примеру, от файловой системы, она создает дескриптор, указывающий, кто имеет доступ и к каким именно адресам. Затем он передает индекс этого дескриптора в файловую систему, которая может передать его драйверу. Файловая система или драйвер запрашивает у ядра запись через этот дескриптор, что делает невозможной для них запись адресов вне буфера.

Сохранение работоспособности дефектных указателей

Разыменование дефектного указателя в драйвере привело бы к уничтожению процесса в драйвере, но никак не повлияло бы на всю систему в целом. Сервер реинкарнации автоматически перезапустится уничтоженным драйвером. Для некоторых драйверов (таких как драйверы диска и сети) восстановление происходит незаметно для пользовательских процессов) Для других же (таких как драйверы аудио и принтера), пользователь может получить уведомление. В монолитных системах разыменование дефектного указателя в (ядре) драйвере приводит к разрушению системы.

Ручные бесконечные циклы

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

Ограничение повреждений от переполненного буфера

В Миникс 3 используется фиксированная длина сообщений для внутренней связи, что исключает определенные проблемы переполнения и управления буфером. Также многие эксплойты работают переполняя буфер, для того чтобы обмануть программу, возвращая из функции вызова, и, перезаписав с помощью стека, адрес возврата, указывающий на перезаполненный буфер. В Миникс 3 данная атака не сработает, потому что команда и данные разделены пространством и только код (код для чтения) команды может быть выполнен.

Ограничение доступа к функциям ядра

Драйверы устройств получают доступ к функциям ядра (такие как копирование данных с пользовательского адресного пространства) через вызовы к ядру. В Миникс 3 ядро имеет битовую карту в которой для каждого драйвера указано какие вызовы ему разрешены. В монолитных системах каждый драйвер может вызвать любую функцию ядра, авторизовав ее или нет.

Ограничение доступа к портам ввода-вывода

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

Ограничение связи с компонентами ОС

Не каждый драйвер или сервер должен общаться с другими такими же драйверами или серверами. Соответственно, процесс битовой карты определяет по каким направлениям каждый процесс может передать.

Реинкарнация уничтоженных или больных драйверов

Специальное устройство, назваемый реинкарнационным сервером, периодически пингует каждый драйвер. Если драйвер умирает или ему не удается ответить на пинги, то реинкарнационный сервер автоматически заменяет его на новую копию. Обнаружение и замена нефункциональных драйверов происходит автоматически без какого-либо пользовательского вмешательства. Эта функция не работает для драйверов дисков в настоящее время, но в следующей версии система будет в состоянии восстановить каждый драйвер диска, которая будет скрыта в РАМ. Восстановление драйвера не повлияет на рабочий процесс.

Встроенные прерывания и сообщения

Когда происходит прерывание, присваивается нижний уровень, чтобы уведомить соответствующий драйвер. Если драйвер ожидает сообщения, то он получает прерывание немедленно, в противном случае получит уведомление в следующий раз. Эта схема устраняет вложенных прерываний и делает программирования драйвера проще.

Архитектура

Архитектура MINIX 3

Как можно увидеть, нижним уровнем является микроядро, что составляет около 4000 строк кода (в основном в на языке Си и небольшое количество на языке ассемблер). Он обрабатывает прерывания, планирование и передачи сообщений. Также он поддерживает АРI из примерно 30 вызовов ядра, которые сервис или драйвер могут выполнить. Пользовательская программа не может делать такие вызовы. Вместо этого они могут делать системные вызовы стандарта POSIX, которые посылают сообщение сервисам. Вызов ядра выполняет такие функции, как настройка прерываний и копирование данных между адресными пространствами.

На следующем уровне находится драйвера устройств, каждый из которых работает как отдельный пользовательский процесс. Каждый из них управляет некоторыми устройствами ввода/вывода, такими как диск или принтер. У драйвера нет доступа к портам ввода/вывода пространства и он не может выдавать непосредственно инструкции. Вместо этого, они должны создать ядро вызова, содержащий список портов ввода/вывода и с записанными значениями. Эта схема позволяет проверить ядро на авторизацию, например, аудио драйвер невозможно записать на диск.

На следующем уровне находится сервер. Там размещены почти все функциональные возможности ОС. Пользовательские процессы получают файл сервера, например, путем отправки сообщения на файловый сервер для открытия, закрытия, чтения и записи файлов. В свою очередь, файл-сервер получает диск ввода/вывода предназначенный для отправки сообщения на диск драйвера, который фактически управляет диском.

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

В настоящее время сервер реинкарнации, файловый сервер, сервер процессов и микроядра являются частью доверенной вычислительной базы. Если любой из них терпит неудачу, то вся система выходит из строя. Тем не менее, снижение компьютерной базы с 3-5 миллионов строк кода найдены в Linux и Windows-систем до 20000 линий значительно повышает надежность системы.

Различия между Миникс 3 и предыдущими версиями

История взаимодействий различных Unix-подобных систем

Миникс 1, 1.5 и 2 были созданы как инструменты, чтобы помочь людям при обучении дизайна ОС.

Миникс 1.0 был создан в 1987 году, 12 000 строк исходного кода ядра было написано преимущественно на языке программирования Си и на языке ассемблер. Исходный код ядра, файловая и система управления памятью были напечатаны в книге. Изначально Танненбаун создал Миникс для компьютеров IBM PC и IBM PC/AT, доступных в то время.

Миникс 1.5, выпущенный в 1991 году, включал в себя поддержку MicroChannel IBM PS/2 и был также портирован на архитектуры Motorola 68000 и SPARC, поддерживающие Atari ST, Commodore Amiga, Apple Macintosh и Sun Microsystems SPARCstation компьютерные платформы. Также доступна версия МINIX, работающая как пользовательский процесс под SunOS.

Миникс 2, выпушенная в 1997 году, была доступна только для архитектур x86 и запускаемая под ОС Solaris SPARC архитектурой. Minix-vmd был создан двумя исследователями из Vrije Universiteit, с добавлением виртуальной памяти и с поддержкой для X Window System.

М3 делает тоже самое, обеспечивая современную ОС множеством новых инструментов и Unix приложений.[15] Профессор Таненбаум однажды сказал:

« Помните, что Миникс 3 не является дочерней программой Миникс… Миникс 1 была написана в качестве учебного пособия… Миникс 3 является началом создания высокой надежности, исцеления, без наворотов ОС… Миникс 1 и Миникс 3 были связаны точно так же, как Windows 3.1 и Windows XP, те одним именем.[11] »

Миникс 3.2.0 была выпущена в феврале 2012 года. Данная версия имеет множество новых возможностей, в том числе и компилятор Clang, экспериментальную симметричную многопроцессорную поддержку, procfs и ext2fs поддержку файлов и GDB. Некоторые части NetBSD были также включены в релиз, в том числе загрузчик, libc и различные другие библиотеки.[16]

Литература

Примечания

  1. «LWN.net.» LWN: MINIX 3 hits the net. 28 Oct 2005. Eklektix, Inc.. 4 Jul 2006 [1].
  2. Woodhull, Al. Getting Started with Minix on Bochs on Mac OS. 20 Feb 2003. 8 Jul 2006 [2].
  3. Senn, Will. «OSNews.com.» Virtually Minix: A Tutorial & Intro to Minix on XP via Bochs — OSNews.com. 08 Jul 2006. OSNews.com. 8 Jul 2006 [3].
  4. Wagstrom, Patrick. Minix under VMWare Installation How-To. 8 Jul 2006 [4].
  5. Woodhull, Al. Minix on Virtual PC: first look. 02 Jun 2005. 8 Jul 2006
  6. Alting, Ingmar A. MinixPPC: A port of MINIX 3 to the PowerPC platform, 15 Sep 2006. [5]
  7. MINIX 3 Operating System official website
  8. Download
  9. Tanenbaum, Andy Introduction to MINIX 3. OSnew. OSnews (25 сентября 2006). — «From Rebirth section: "Various studies have shown that software broadly contains something like 6-16 bugs per 1000 lines of code and that device drivers have 3-7 times as many bugs as the rest of the operating system. When combined with the fact that 70% of a typical operating system consists of device drivers, it is clear that device drivers are a big source of trouble. For Windows XP, 85% of the crashes are due to bugs in device drivers. Obviously, to make OSes reliable, something has to be done to deal with buggy device drivers. Building a reliable system despite the inevitable bugs in device drivers was the original driving force behind MINIX 3."»  Проверено 4 июля 2008.
  10. Tanenbaum, Andrew. CSAIL Event Calendar. 25 Aug 2006 [6].
  11. 1 2 Tanenbaum, Andrew. «Tanenbaum-Torvalds debate, Part II:.» 12 May 2006. Vrije Universiteit. 15 Jun 2006 [7].
  12. Tanenbaum, Andrew S.. «Reliability.» The MINIX 3 Operating System. Vrije Universiteit.. 22 Jun 2006 [8]
  13. MINIX Releases
  14. Individual Programming Assignment User Mode Scheduling in MINIX 3 by Bjorn Patrick Swift
  15. Woodhull, Albert S.. "MINIX 3: A small, reliable free operating system: " MINIX 3 FAQ. 24 Oct 2005. Vrije Universiteit. 15 Jun 2006 [9].
  16. MINIX Releases. wiki.minix3.org. Проверено 29 февраля 2012.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Миникс 3" в других словарях:

  • Linux (ядро) — Эта статья о ядре для операционных систем. О группе операционных систем, которые используют это ядро, называемых «Linux», см. в статье Linux Ядро Linux Тип Ядро ОС Разработчик …   Википедия

  • Ядро Linux — Эта статья о ядре для операционных систем. О группе операционных систем, которые используют это ядро, называемых «Linux», см. в статье Linux Ядро Linux Тип …   Википедия

  • Линукс (ядро) — Эта статья о ядре для операционных систем. Об операционной системе, которая использует это ядро и библиотеки Linux Ядро Linux Тасманский дьявол Tuz, временный символ ядра Linux версии 2.6.29 Пингвин Тип Ядро ОС Разработчик …   Википедия

  • Ядро Линукс — Эта статья о ядре для операционных систем. Об операционной системе, которая использует это ядро и библиотеки Linux Ядро Linux Тасманский дьявол Tuz, временный символ ядра Linux версии 2.6.29 Пингвин Тип Ядро ОС Разработчик …   Википедия

  • Торвальдс, Линус — В Википедии есть статьи о других людях с такой фамилией, см. Турвальдс. Линус Торвальдс Linus Torvalds …   Википедия

  • Спор Таненбаума — Торвальдса — состоялся между Эндрю Таненбаумом и Линусом Торвальдсом. Предметом спора было ядро Linux и архитектура ядер в целом. Таненбаум начал спор в 1992 году в ньюсгруппе comp.os.minix сети Usenet[1], заявив, что микроядра вытесняют монолитные ядра …   Википедия

  • Линус — Торвальдс Linus Torvalds Род деятельности: программист Дата рождения: 28 декабря …   Википедия

  • Линус Бенедикт Торвалдс — Линус Торвальдс Linus Torvalds Род деятельности: программист Дата рождения: 28 декабря …   Википедия

  • Линус Бенедикт Торвальдс — Линус Торвальдс Linus Torvalds Род деятельности: программист Дата рождения: 28 декабря …   Википедия

  • Линус Торвалдс — Линус Торвальдс Linus Torvalds Род деятельности: программист Дата рождения: 28 декабря …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»