MINIX 3

редактировать
Minix 3
Рокки-енот - талисман MINIX 3.jpg
Разработчик Эндрю С. Таненбаум
Написано на C, языке ассемблера
ОС семействоUnix-like
Рабочее состояниеТекущая
Исходная модельОткрытый исходный код
Первоначальный выпуск24 октября 2005 г.; 15 лет назад (2005-10-24)
Репозиторий Измените это на Wikidata
Маркетинговая цельВстроенная системы, образование
Доступно на английском
ПлатформахIA-32, ARM
Kernel typeMicrokernel
Userland MINIX, NetBSD
по умолчанию пользовательский интерфейс ash
License custom permissive license
ПредыдущийMinix 1 и 2
Официальный сайтwww.minix3.org

Minix 3 - это проект по созданию небольшого высокодоступного высокофункционального Unix-подобная операционная система. Он опубликован под лицензией BSD и является наследником более ранних версий, Minix 1 и 2.

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

По состоянию на 2017 год MINIX 3 поддерживает IA-32 и архитектуру ARM процессоры. Он также может работать на эмуляторах или виртуальных машинах, таких как Bochs, VMware Workstation, Microsoft Virtual PC, Oracle VirtualBox и QEMU. Порт для архитектуры PowerPC находится в разработке.

Дистрибутив поставляется на live CD и может быть загружен как live USB образ.. Последний выпуск - «minix_R3.4.0rc6-d5e4fc0.iso.bz2» (9 мая 2017 г.).

Предполагается, что MINIX 3 используется в Intel Management Engine (ME), найденном в Intel Platform Controller Hub, начиная с введения ME 11, который используется с процессорами Skylake и Kaby Lake.

Его использование в Intel ME может сделать ее наиболее широко используемой ОС на процессорах x86 / AMD64 начиная с 2015 года, с большим количеством установок, чем Microsoft Windows, Linux или macOS.

Содержание
  • 1 Цели проекта
  • 2 История
  • 3 Политика надежности
    • 3.1 Уменьшение размера ядра
    • 3.2 Устранение ошибок
    • 3.3 Ограничение доступа драйверов к памяти
    • 3.4 Сохранение неверных указателей
    • 3.5 Обуздание бесконечных циклов
    • 3.6 Ограничение ущерба от переполнения буфера
    • 3.7 Ограничение доступа к функциям ядра
    • 3.8 Ограничение доступа к портам ввода / вывода
    • 3.9 Ограничение связи с компонентами ОС
    • 3.10 Реинкарнация мертвого или больного драйверы
    • 3.11 Интегрировать прерывания и сообщения
  • 4 Архитектура
  • 5 Отличия MINIX 3 от предыдущих версий
  • 6 Mascot
  • 7 MINIXCon
  • 8 См. Также
  • 9 Ссылки
  • 10 Дополнительная литература
  • 11 Внешние ссылки
Цели проект
Структура операционных систем на основе монолитного ядра и микроядра соответственно

Отражая природу систем на основе монолитного ядра, где драйвер (который, по словам создателя MINIX Таненбаума, примерно в 3–7 раз больше ошибок, чем обычная программа) может вывести из строя всю систему, MINIX 3 стремится создать операционную систему, которая является "надежной, самовосстановление, многосерверный клон Unix ".

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

В монолитной системе ошибка в драйвере может легко привести к сбою всего ядра. Это гораздо менее вероятно в MINIX 3.

История
MINIX 3 версии
ВерсияДата выпускаОписание
3.1.024 октября 2005 г.
  • Первый выпуск MINIX 3 (выпуск книги).
3.1.2a29 мая 2006 г.
  • Новый менеджер пакетов Packman.
  • Устранена проблема установки с автоматическим разделением дисков.
3.1.32007-04-13
3.1.3a2007-06-08
  • Исправлены ошибки.
3.1.42009-06-09
3.1.505.11.2009
  • Повышена производительность
  • Общая память
  • функция setitimer
  • ISO 9660 файловая система
  • Open Sound System
  • Trap NULL получает доступ сейчас для удобства пользователя
  • Улучшенная обработка сигналов
  • Улучшенная поддержка отладчиков (ptrace улучшения и т. д.)
  • Автоопределение сетевой карты (для поддерживаемых PCI-карт ), улучшенная сетевая конфигурация Конфигурация
3.1.608.02.2010
3.1.716.06.2010
  • Планирование пространства пользователя и сервер планирования
  • Надлежащая поддержка нескольких карт Ethernet одного типа
  • Монитор загрузки позволяет загружать образы>16 МБ
  • Поддержка Buildsystem для сборки MINIX с GCC
  • Поддержка кодировок Windows-1251 и KOI8-U
3.1.82010-10-04
3.2.02012-02-29
3.2.121.02.2013
  • Поддержка динамически связанных исполняемых файлов
  • Удаление сегментов Intel
  • Прекращена поддержка a.out двоичные файлы
  • кросс-компиляция поддержка
  • поддержка
  • VBFS - поддержка монтирования VirtualBox Shared Folder как файловой системы
3.3.02014-09-15
3.4.0 rc62017-05-09
  • Поддержка архитектуры ARM; кросс-компилируемый
  • Поддержка механизма ввода-вывода mmap (); позволяет использовать общие динамические библиотеки и снизить потребности в памяти
  • Новая инфраструктура ввода: сервер ввода и драйвер клавиатуры отделены от TTY
  • VND: драйвер блока vnode disk (loopback)
  • LLVM Bitcode сборка системы
  • Импорт LLVM и clang в исходники
  • Единый блочный кеш, совместно используемый FS и ВМ
  • Улучшенная совместимость с NetBSD: утилиты, вызовы, типы (много 64-битных), набор инструментов, кодовая база и пакеты
  • Тип C для сообщений: чище, больше
  • Улучшенная модульность драйвера: UDS отдельно от PFS, PTY из TTY, один контроллер на экземпляр at_wini, журнал удален из образа загрузки
  • Пакеты теперь динамически связаны
  • Книжный выпуск
  • Старый выпуск
  • Текущий стабильный выпуск
  • Текущий разрабатываемый выпуск

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

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

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

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

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

Устранение ошибок

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

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

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

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

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

Выжить плохие указатели

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

Обуздание бесконечных циклов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Различия между MINIX 3 и предыдущими версиями
Схема отношения между несколькими Unix-подобными системами

MINIX 1, 1.5 и 2 были разработаны как инструменты, помогающие людям узнать о дизайне операционных систем.

MINIX 1.0, выпущенный в 1987 году, состоял из 12000 строк 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. Профессор Таненбаум однажды сказал:

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

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

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

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

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

Рокки Раккун - талисман MINIX 3.

MINIXCon

MINIXCon - это конференция по обмену разговорами, усилиями и исследованиями, связанными с MINIX.

MINIXCon2017 был отменен из-за отсутствия представленных докладов.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Дополнительная литература
Внешние ссылки
В Викиучебниках есть книга по теме: Minix 3
Последняя правка сделана 2021-05-29 08:44:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте