stringtranslate.com

Миникс 3

Minix 3 — небольшая Unix-подобная операционная система . Он опубликован под лицензией BSD-3-Clause [a] и является преемником более ранних версий Minix 1 и 2. [1]

Основная цель проекта — сделать систему отказоустойчивой за счет обнаружения и устранения неисправностей «на лету», без вмешательства пользователя. Предполагается, что основными видами использования системы будут встроенные системы и образование. [2]

По состоянию на 2017 год Minix 3 поддерживает процессоры с архитектурой IA-32 и ARM . [3] Он также может работать на эмуляторах или виртуальных машинах , таких как Bochs , [4] [5] VMware Workstation , [6] Microsoft Virtual PC , [7] Oracle VirtualBox , [8] и QEMU . Порт на архитектуру PowerPC находится в разработке. [9] Дистрибутив поставляется на Live CD и не поддерживает установку с USB-накопителя . [10] Проект бездействовал с 2018 года, [11] и последняя версия — 3.4.0 rc6 от 2017 года, [12] хотя дискуссионная группа Minix 3 все еще активна. [13]

Считается, что Minix 3 вдохновил ОС Intel Management Engine (ME), найденную в Intel Platform Controller Hub , начиная с появления ME 11, которая используется с процессорами Skylake и Kaby Lake . [14] [15] Считалось, что Minix могла быть наиболее широко используемой ОС на процессорах x86 / AMD64 с большим количеством установок, чем Microsoft Windows, Linux или macOS , из-за ее использования в Intel ME. [16]

Цели проекта

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

Размышляя о природе систем на основе монолитного ядра , где драйвер (который, по словам создателя Minix Таненбаума , содержит примерно в 3–7 раз больше ошибок, чем обычная программа) [17] может вывести из строя всю систему, [18] Minix 3 направлен на создание операционной системы, которая представляет собой «надежный, самовосстанавливающийся, многосерверный клон Unix». [19]

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

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

История

Minix 3 был публично анонсирован 24 октября 2005 года Эндрю Таненбаумом во время его программной речи на конференции по принципам операционных систем симпозиума Ассоциации вычислительной техники (ACM). Хотя он по-прежнему служит примером для нового издания учебника Таненбаума и Вудхалла, он полностью переработан, чтобы его можно было «использовать в качестве серьезной системы на встроенных компьютерах с ограниченными ресурсами, а также для приложений, требующих высокой надежности».

Первоначально выпущен под той же лицензией BSD-3-Clause , по которой Minix лицензировался с 2000 года. [23] [24] В конце 2005 года сменился владелец авторских прав и был добавлен четвертый пункт. [1] [25] [28]

Политика надежности

Одна из главных целей Minix 3 — надежность. Ниже обсуждаются некоторые из наиболее важных принципов, повышающих его надежность.

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

Монолитные операционные системы, такие как Linux и FreeBSD , а также гибриды, такие как Windows, содержат миллионы строк кода ядра . Напротив, Minix 3 имеет около 6000 строк исполняемого кода ядра, [29] что облегчает поиск проблем в коде.

Клетка ошибок

В монолитных ядрах драйверы устройств находятся в ядре. Таким образом, когда устанавливается новое периферийное устройство, в ядро ​​вставляется неизвестный, ненадежный код. Одна плохая строка кода в драйвере может вывести из строя систему.

Вместо этого в Minix 3 каждый драйвер устройства представляет собой отдельный процесс пользовательского режима. Драйверы не могут выполнять привилегированные инструкции, изменять таблицы страниц , выполнять произвольный ввод/вывод (I/O) или записывать в абсолютную память. Они должны выполнять вызовы ядра для этих служб, и ядро ​​проверяет каждый вызов на предмет полномочий.

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

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

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

Выживите с плохими указателями

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

Приручение бесконечных циклов

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

Ограничить ущерб от переполнения буфера

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

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

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

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

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

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

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

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

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

Интегрируйте прерывания и сообщения

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

Архитектура

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

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

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

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

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

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

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

Схема взаимоотношений между несколькими Unix-подобными системами

Minix 1.0, 1.5 и 2.0 были разработаны как инструменты, помогающие людям узнать о проектировании операционных систем.

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

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

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

Minix 3 делает то же самое и предоставляет современную операционную систему со многими новыми инструментами и множеством приложений Unix . [30] Профессор Таненбаум однажды сказал:

Пожалуйста, имейте в виду, что MINIX 3 — это не MINIX вашего дедушки… MINIX 1 был написан как образовательный инструмент… MINIX 3 — это плюс к созданию высоконадежной, самовосстанавливающейся и свободной от раздувания операционной системы… MINIX 1 и MINIX 3 связаны так же, как Windows 3.1 и Windows XP : одно и то же имя. [19]

Со времени выпуска Minix 2 в структуру ядра также было внесено множество улучшений, что сделало систему более надежной. [31] Версия Minix 3.1.5 была выпущена 5 ноября 2009 года. Она содержит X11 , Emacs , vi , cc, GCC , Perl , Python , оболочку Almquist , Bash , оболочку Z , FTP-клиент , клиент SSH , клиент Telnet , Pine и более 400 других распространенных служебных программ Unix. С добавлением X11 эта версия знаменует собой переход от текстовой системы. Еще одна особенность этой версии, которая будет улучшена в будущих версиях, — это способность системы противостоять сбоям драйверов устройств и во многих случаях их автоматическая замена, не затрагивая запущенные процессы. Таким образом, Minix самовосстанавливается и может использоваться в приложениях, требующих высокой надежности.

Minix 3.2.0 был выпущен в феврале 2012 года. Эта версия содержит множество новых функций, включая компилятор Clang , экспериментальную поддержку симметричной многопроцессорности , поддержку файловых систем procfs и ext2fs , а также отладчик GNU Debugger (GDB). В релиз также интегрировано несколько частей NetBSD , включая загрузчик, libc и различные утилиты и другие библиотеки . [32]

Minix 3.3.0 был выпущен в сентябре 2014 года. Этот выпуск является первой версией, поддерживающей архитектуру ARM в дополнение к x86. Он также поддерживает пользовательскую среду NetBSD , в которой тысячи пакетов NetBSD работают прямо из коробки.

Талисман

Рокки Енот, талисман Minix 3.

Рокки Енот — талисман Minix 3. [33]

MINIXCon

MINIXCon — это конференция, на которой обсуждаются обсуждения, усилия и исследования, связанные с Minix.

Он проводился один раз в 2016 году. MINIXCon2017 был отменен из-за отсутствия представленных докладов. [34] [35]

Смотрите также

Примечания

  1. ^ abc BSD-3-пункт с четвертым пунктом.

Рекомендации

  1. ^ abc «Лицензия Minix». Архивировано из оригинала 24 ноября 2005 г. Проверено 24 ноября 2005 г.
  2. ^ корбет (24 октября 2005 г.). «Миникс 3 попадает в сеть» . Lwn.net . Проверено 1 мая 2014 г.
  3. ^ "minix3.org". minix3.org . Проверено 16 апреля 2017 г.
  4. ^ «Начало работы с Minix на Bochs в Mac OS» . Вудхалл.com . Проверено 1 мая 2014 г.
  5. ^ "OSNews.com" . OSNews.com . Проверено 1 мая 2014 г.
  6. ^ «Инструкции по установке Minix в VMWare» . Патрик.wagstrom.net. Архивировано из оригинала 12 ноября 2013 г. Проверено 1 мая 2014 г.
  7. ^ «Minix на Virtual PC: первый взгляд» . Вудхалл.com . Проверено 1 мая 2014 г.
  8. ^ «Minix 3 на виртуальной коробке» . inopinion.org. 6 августа 2014 г.
  9. ^ Альтинг, Ингмар. «Порт ОС MINIX на платформу PowerPC» (PDF) .
  10. ^ "Миникс3". Миникс3 . Проверено 1 мая 2014 г.
  11. ^ "git.minix3.org Git - minix.git/summary" . git.minix3.org . Проверено 3 мая 2022 г.
  12. ^ "Индекс /Iso/Снимок/".
  13. ^ "minix3 - Группы Google" . groups.google.com . Проверено 3 мая 2022 г.
  14. ^ «Intel ME: Путь статического анализа». blog.ptsecurity.com . Архивировано из оригинала 1 июля 2017 г. Проверено 28 августа 2017 г.
  15. ^ Корна, Никола (28 августа 2017 г.). «me_cleaner: инструмент для частичной очистки образов встроенного ПО Intel ME/TXE». Гитхаб . Проверено 28 августа 2017 г.
  16. ^ Таненбаум, Эндрю С. «Открытое письмо Intel». Архивировано из оригинала 17 июня 2022 г. Проверено 06 сентября 2022 г.
  17. ^ Таненбаум, Энди (25 сентября 2006 г.). «Введение в MINIX 3». ОСновая . ОСньюс . Проверено 4 июля 2008 г. Из раздела «Возрождение» : «Различные исследования показали, что программное обеспечение обычно содержит около 6–16 ошибок на 1000 строк кода, а драйверы устройств содержат в 3–7 раз больше ошибок, чем остальная часть операционной системы. В сочетании с тем фактом, что Типичная операционная система на 70% состоит из драйверов устройств, понятно, что драйверы устройств являются большим источником проблем. Для Windows XP 85% сбоев происходят из-за ошибок в драйверах устройств. Очевидно, чтобы сделать операционную систему надежной, нужно что-то необходимо сделать, чтобы справиться с ошибками в драйверах устройств. Создание надежной системы, несмотря на неизбежные ошибки в драйверах устройств, было первоначальной движущей силой Minix 3».
  18. ^ «Календарь событий CSAIL» . Csail.mit.edu. Архивировано из оригинала 4 февраля 2012 г. Проверено 1 мая 2014 г.
  19. ^ ab «Дебаты Таненбаума-Торвальдса, Часть II». Cs.vu.nl. 12 мая 2006 г. Проверено 1 мая 2014 г.
  20. ^ «Надежность». www.MINIX3.org . Архивировано из оригинала 1 июля 2006 года.
  21. ^ "MinixReleases - Minix Wiki" . Wiki.minix3.org . Проверено 1 мая 2014 г.
  22. ^ «Версии Minix и их использование в обучении». Архивировано из оригинала 11 июля 2006 г. Проверено 16 июня 2021 г.
  23. ^ ab «ЛИЦЕНЗИЯ (3.1.0)». Гитхаб . Проверено 16 июня 2021 г.
  24. ^ ab «ЛИЦЕНЗИЯ (3.1.1)» . Проверено 16 июня 2021 г.
  25. ^ ab «ЛИЦЕНЗИЯ (3.1.2)». Гитхаб . Проверено 16 июня 2021 г.
  26. ^ Свифт, Бьорн Патрик. «Планирование пользовательского режима индивидуального программирования в Minix 3» (PDF) . Minix3.org.
  27. ^ МИНИКС Версия 3.3.0
  28. ^ «Minix1: Политики копирования и использования» . 13 февраля 2007 г. Архивировано из оригинала 14 июня 2020 г.
  29. ^ «Операционная система MINIX 3» . minix3.org . Архивировано из оригинала 13 января 2012 г.
  30. ^ "Часто задаваемые вопросы - Minix Wiki" . Minix3.org. 09.11.2013 . Проверено 1 мая 2014 г.
  31. ^ «Улучшения по сравнению с версией V2» . www.minix3.org . Архивировано из оригинала 17 апреля 2006 года.
  32. ^ "Релизы MINIX" . wiki.minix3.org . Архивировано из оригинала 21 июня 2012 года . Проверено 29 февраля 2012 г.
  33. ^ "талисман [Вики]" . wiki.minix3.org . Проверено 20 июля 2017 г.
  34. ^ "Миникс3". Архивировано из оригинала 10 ноября 2017 года . Проверено 5 июля 2006 г.{{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  35. ^ "Миникс3". www.minix3.org . Проверено 11 ноября 2017 г.

дальнейшее чтение

Внешние ссылки