Миникс 3
Разработчик | Эндрю С. Таненбаум и др. |
---|---|
Написано в | Си , язык ассемблера |
Семейство ОС | Unix-подобный |
Рабочее состояние | Заброшенный |
Исходная модель | Открытый исходный код |
Первоначальный выпуск | 24 октября 2005 г |
Последний выпуск | 3.3.0 / 16 сентября 2014 г |
Последний предварительный просмотр | 3.4.0 rc6 / 9 мая 2017 г |
Репозиторий | |
Маркетинговая цель | Встраиваемые системы , образование |
Доступно в | Английский |
Платформы | ИА-32 , АРМ |
ядра Тип | Микроядро |
Пользовательское пространство | Миникс, NetBSD |
По умолчанию пользовательский интерфейс | пепел |
Лицензия | 2005: Пункт BSD-3 [а] [1] Оригинал: Пункт BSD-3 |
Предшественник | Миникс 1.0, 1.5 и 2.0 |
Официальный сайт | www |
Minix 3 — небольшая Unix-подобная операционная система . Он опубликован в соответствии с пунктом BSD-3. [а] лицензии и является преемником более ранних версий Minix 1 и 2. [1]
Основная цель проекта — сделать систему отказоустойчивой за счет обнаружения и устранения неисправностей «на лету», без вмешательства пользователя. Предполагается, что основными видами использования системы будут встроенные системы и образование. [2]
По состоянию на 2017 год [update], Minix 3 поддерживает процессоры с архитектурой IA-32 и ARM . [3] Он также может работать на эмуляторах или виртуальных машинах , таких как Bochs . [4] [5] рабочая станция VMware , [6] Виртуальный ПК Microsoft , [7] Oracle VirtualBox , [8] и КЕМУ . Порт на архитектуру 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]
История
[ редактировать ]Версия | Дата выпуска | Описание |
---|---|---|
3.1.0 ( ОСДИ3 ) | 2005-10-18 |
|
3.1.1 (СОСП) | 2005-10-24 |
|
3.1.2 | 2006-04-18 |
|
3.1.2а | 2006-05-29 |
|
3.1.3 | 2007-04-13 |
|
3.1.3а | 2007-06-08 |
|
3.1.4 | 2009-06-09 |
|
3.1.5 | 2009-11-05 |
|
3.1.6 | 2010-02-08 |
|
3.1.7 | 2010-06-16 |
|
3.1.8 | 2010-10-04 |
|
3.2.0 | 2012-02-29 |
|
3.2.1 | 2013-02-21 |
|
3.3.0 [27] | 2014-09-15 |
|
3.4.0 RC6 | 2017-05-09 | X11 теперь является частью операционной системы. |
|
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
чтобы получить сообщение. Эта схема исключает вложенные прерывания и упрощает программирование драйверов.
Архитектура
[ редактировать ]Как видно, на нижнем уровне находится микроядро , которое составляет около 4000 строк кода (в основном на C плюс небольшое количество языка ассемблера ). Он обрабатывает прерывания , планирование и передачу сообщений. Он также поддерживает интерфейс прикладного программирования (API), содержащий около 30 вызовов ядра, которые могут выполнять авторизованные серверы и драйверы. Пользовательские программы не могут выполнять эти вызовы. Вместо этого они могут выполнять POSIX системные вызовы , которые отправляют сообщения на серверы. Вызовы ядра выполняют такие функции, как установка прерываний и копирование данных между адресными пространствами.
На следующем уровне находятся драйверы устройств , каждый из которых работает как отдельный процесс пользовательского пространства . Каждый из них управляет каким-либо устройством ввода-вывода, например диском или принтером. Драйверы не имеют доступа к пространству портов ввода-вывода и не могут напрямую выдавать инструкции ввода-вывода. Вместо этого они должны выполнять вызовы ядра, предоставляя список портов ввода-вывода для записи и значения для записи. Хотя при этом требуются небольшие накладные расходы (обычно 500 нс), такая схема позволяет ядру проверять авторизацию, так что, например, аудиодрайвер не может производить запись на диск.
На следующем уровне находятся серверы . Здесь расположены почти все функции операционной системы. Пользовательские процессы получают файловую службу, например, отправляя сообщения файловому серверу для открытия, закрытия, чтения и записи файлов. В свою очередь файловый сервер выполняет дисковый ввод-вывод, отправляя сообщения драйверу диска, который управляет диском.
Одним из ключевых серверов является сервер реинкарнации. Его задача — периодически опрашивать все остальные серверы и драйверы, чтобы проверять их работоспособность. Если компонент не отвечает правильно, завершает работу или попадает в бесконечный цикл , сервер реинкарнации (который является родительским процессом драйверов и серверов) убивает неисправный компонент и заменяет его новой копией. Таким образом, система автоматически выполняет самовосстановление, не мешая работающим программам.
В настоящее время сервер реинкарнации, сервер процессов и микроядро являются частью доверенной вычислительной базы . Если хотя бы один из них выйдет из строя, система выйдет из строя. Тем не менее, сокращение доверенной вычислительной базы с 3-5 миллионов строк кода, как в системах Linux и Windows, примерно до 20 000 строк значительно повышает надежность системы. [ нужна ссылка ]
Различия между Minix 3 и предыдущими версиями
[ редактировать ]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. [33]
MINIXCon
[ редактировать ]MINIXCon — это конференция, на которой обсуждаются обсуждения, усилия и исследования, связанные с Minix.
Он проводился один раз в 2016 году. MINIXCon2017 был отменен из-за отсутствия представленных докладов. [34] [35]
См. также
[ редактировать ]- Файловая система МИНИКС
- Сину
- xv6
- Сравнение ядер операционных систем
- Список компьютерных талисманов
- Категория: Компьютерные талисманы
Примечания
[ редактировать ]- ^ Jump up to: а б с BSD-3-пункт с четвертым пунктом.
Ссылки
[ редактировать ]- ^ Jump up to: а б с «Лицензия Minix» . Архивировано из оригинала 24 ноября 2005 г. Проверено 24 ноября 2005 г.
- ^ корбет (24 октября 2005 г.). «Миникс 3 попадает в сеть» . Lwn.net . Проверено 1 мая 2014 г.
- ^ «minix3.org» . minix3.org . Проверено 16 апреля 2017 г.
- ^ «Начало работы с Minix на Bochs в Mac OS» . Вудхалл.com . Проверено 1 мая 2014 г.
- ^ «OSNews.com» . OSNews.com . Проверено 1 мая 2014 г.
- ^ «Инструкции по установке Minix под VMWare» . Патрик.wagstrom.net. Архивировано из оригинала 12 ноября 2013 г. Проверено 1 мая 2014 г.
- ^ «Minix на Virtual PC: первый взгляд» . Вудхалл.com . Проверено 1 мая 2014 г.
- ^ «Minix 3 на виртуальной машине» . inopinion.org. 6 августа 2014 г.
- ^ Альтинг, Ингмар. «Порт ОС MINIX на платформу PowerPC» (PDF) .
- ^ «Миникс3» . Миникс3 . Проверено 1 мая 2014 г.
- ^ «git.minix3.org Git — minix.git/summary» . git.minix3.org . Проверено 3 мая 2022 г.
- ^ «Индекс /Iso/Снимок/» .
- ^ «minix3 — Группы Google» . groups.google.com . Проверено 3 мая 2022 г.
- ^ «Intel ME: Путь статического анализа» . blog.ptsecurity.com . Архивировано из оригинала 1 июля 2017 г. Проверено 28 августа 2017 г.
- ^ Корна, Никола (28 августа 2017 г.). «me_cleaner: инструмент для частичной очистки образов прошивки Intel ME/TXE» . Гитхаб . Проверено 28 августа 2017 г.
- ^ Таненбаум, Эндрю С. «Открытое письмо Intel» . Архивировано из оригинала 17 июня 2022 г. Проверено 06 сентября 2022 г.
- ^ Таненбаум, Энди (25 сентября 2006 г.). «Введение в MINIX 3» . ОСновая . ОСньюс . Проверено 4 июля 2008 г.
Из раздела «Возрождение »: «Различные исследования показали, что программное обеспечение в целом содержит около 6–16 ошибок на 1000 строк кода, а драйверы устройств содержат в 3–7 раз больше ошибок, чем остальная часть операционной системы. В сочетании с тем фактом, что 70% типичной операционной системы состоит из драйверов устройств, очевидно, что драйверы устройств являются большим источником проблем. Для Windows XP 85% сбоев происходят из-за ошибок в драйверах устройств. Очевидно, что необходимо сделать операционную систему надежной. необходимо сделать, чтобы справиться с ошибками в драйверах устройств. Создание надежной системы, несмотря на неизбежные ошибки в драйверах устройств, было первоначальной движущей силой Minix 3».
- ^ «Календарь событий CSAIL» . Csail.mit.edu. Архивировано из оригинала 4 февраля 2012 г. Проверено 1 мая 2014 г.
- ^ Jump up to: а б «Дебаты Таненбаума-Торвальдса, Часть II» . Cs.vu.nl. 12 мая 2006 г. Проверено 1 мая 2014 г.
- ^ «Надежность» . www.MINIX3.org . Архивировано из оригинала 1 июля 2006 года.
- ^ «MinixReleases – Minix Wiki» . Wiki.minix3.org . Проверено 1 мая 2014 г.
- ^ «Minix-версии и их использование в обучении» . Архивировано из оригинала 11 июля 2006 г. Проверено 16 июня 2021 г.
- ^ Jump up to: а б «ЛИЦЕНЗИЯ (3.1.0)» . Гитхаб . Проверено 16 июня 2021 г.
- ^ Jump up to: а б «ЛИЦЕНЗИЯ (3.1.1)» . Проверено 16 июня 2021 г.
- ^ Jump up to: а б «ЛИЦЕНЗИЯ (3.1.2)» . Гитхаб . Проверено 16 июня 2021 г.
- ^ Свифт, Бьорн Патрик. «Планирование пользовательского режима индивидуального программирования в Minix 3» (PDF) . Minix3.org.
- ^ МИНИКС Версия 3.3.0
- ^ «Minix1: Копирование и использование политик» . 13 февраля 2007 г. Архивировано из оригинала 14 июня 2020 г.
- ^ «Операционная система MINIX 3» . minix3.org . Архивировано из оригинала 13 января 2012 г.
- ^ «Часто задаваемые вопросы – Minix Wiki» . Minix3.org. 09.11.2013 . Проверено 1 мая 2014 г.
- ^ «Улучшения по сравнению с версией V2» . www.minix3.org . Архивировано из оригинала 17 апреля 2006 года.
- ^ «МИНИКС-релизы» . wiki.minix3.org . Архивировано из оригинала 21 июня 2012 года . Проверено 29 февраля 2012 г.
- ^ «талисман [Вики]» . wiki.minix3.org . Проверено 20 июля 2017 г.
- ^ «Миникс3» . Архивировано из оригинала 10 ноября 2017 года . Проверено 5 июля 2006 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «Миникс3» . www.minix3.org . Проверено 11 ноября 2017 г.
Дальнейшее чтение
[ редактировать ]- Таненбаум, Эндрю С ; Вудхалл, Альберт С. (14 января 2006 г.). Операционные системы: проектирование и реализация (3-е изд.). Прентис Холл . ISBN 0-13-142938-8 .
- Создание надежной операционной системы: отказоустойчивость в MINIX 3 , Йоррит Н. Гердер (PDF)
- Реорганизация Unix для обеспечения надежности, Йоррит Н. Гердер, Герберт Бос, Бен Грас, Филип Хомбург и Эндрю С. Таненбаум (PDF)
- Программирование модульной системы в MINIX 3 Йоррита Н. Гердера, Герберта Боса, Бен Граса, Филипа Хомбурга и Эндрю С. Таненбаума (PDF)
- Дж. Н. Гердер и др., Программирование модульных систем в MINIX 3 , ;Вход в систему , апрель 2006 г. (PDF)
- Пабло А Пессолани. MINIX4RT: операционная система реального времени на основе MINIX. Архивировано 7 июня 2023 г. на Wayback Machine.
- Создание инструментов измерения производительности для операционной системы MINIX 3 , автор: Рожье Мерс (PDF)
- Проектирование и внедрение виртуальной файловой системы MINIX (PDF)
- Справочное руководство по API ядра MINIX 3 (PDF)
- На пути к настоящей микроядерной операционной системе (PDF)
- Создание высоконадежной операционной системы (PDF)
- Minix 3 и опыт микроядра: Smart Kernel Рюдигера Вайса (PDF)
- Безопасное и автоматическое обновление в реальном времени от Криштиану Джуффрида (PDF)