~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ EB5FCAAB9AACD826C629D6809E303A0F__1714422840 ✰
Заголовок документа оригинал.:
✰ Microkernel - Wikipedia ✰
Заголовок документа перевод.:
✰ Микроядро — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Microkernel ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/eb/0f/eb5fcaab9aacd826c629d6809e303a0f.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/eb/0f/eb5fcaab9aacd826c629d6809e303a0f__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 02:25:37 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 29 April 2024, at 23:34 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Микроядро — Википедия Jump to content

Микроядро

Из Википедии, бесплатной энциклопедии

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

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

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

С точки зрения размера исходного кода микроядра часто меньше монолитных ядер . кода . Например, микроядро MINIX 3 содержит всего около 12 000 строк [2]

История [ править ]

Микроядра берут свое начало от датского пионера компьютеров Пера Бринча Хансена и его работы в датской компьютерной компании Regnecentralen , где он руководил разработкой программного обеспечения для компьютера RC 4000. [3] В 1967 году компания Regnecentralen устанавливала прототип RC 4000 на заводе удобрений Zakłady Azotowe Puławy в Польше. В компьютере использовалась небольшая операционная система реального времени, адаптированная для нужд завода. Бринч Хансен и его команда были обеспокоены отсутствием универсальности и возможности повторного использования системы RC 4000. Они опасались, что для каждой установки потребуется другая операционная система, поэтому начали исследовать новые и более общие способы создания программного обеспечения для RC 4000. [4] В 1969 году их усилия привели к созданию мультипрограммной системы RC 4000 . Его ядро ​​обеспечивало межпроцессное взаимодействие на основе передачи сообщений для 23 непривилегированных процессов, из которых 8 одновременно были защищены друг от друга. Кроме того, в нем реализовано планирование временных интервалов программ, выполняемых параллельно, инициирование и контроль выполнения программ по запросу других запущенных программ, а также инициирование передачи данных на периферийные устройства или с них. Помимо этих элементарных механизмов, у него не было встроенной стратегии выполнения программы и распределения ресурсов. Эта стратегия должна была быть реализована посредством иерархии запущенных программ, в которой родительские процессы имели полный контроль над дочерними процессами и выступали в качестве их операционных систем. [5] [6]

Следуя работе Бринча Хансена, микроядра разрабатываются с 1970-х годов. [7] Сам термин микроядро впервые появился не позднее 1981 года. [8] Микроядра были задуманы как ответ на изменения в компьютерном мире и на ряд проблем, связанных с адаптацией существующих « моноядер » к этим новым системам. Постоянно разрабатывались новые драйверы устройств, стеки протоколов, файловые системы и другие низкоуровневые системы. Этот код обычно располагался в монолитном ядре и поэтому требовал значительной работы и тщательного управления кодом. Микроядра были разработаны с идеей, что все эти сервисы будут реализованы как программы пользовательского пространства, как и любые другие, что позволит работать с ними монолитно, запускать и останавливать их, как любую другую программу. Это не только облегчит работу с этими сервисами, но и позволит разделить код ядра, чтобы его можно было точно настроить, не беспокоясь о непредвиденных побочных эффектах. Более того, это позволит «строить» совершенно новые операционные системы на общем ядре, что будет способствовать исследованию ОС.

первые пригодные для использования локальные сети . Микроядра были очень горячей темой в 1980-х годах, когда были представлены [ нужна цитата ] . Ядро AmigaOS Exec было ранним примером, представленным в 1986 году и использовавшимся на ПК с относительным коммерческим успехом. Отсутствие защиты памяти, которое в других отношениях считается недостатком, позволило этому ядру иметь очень высокую производительность передачи сообщений, поскольку ему не нужно было копировать данные при обмене сообщениями между программами пользовательского пространства. [9]

Те же механизмы, которые позволяли распространять ядро ​​в пользовательском пространстве, также позволяли распространять систему по сетевым каналам. Первые микроядра, особенно Mach , созданные Ричардом Рашидом , показали неутешительные результаты, но присущие им преимущества оказались настолько значительными, что это стало основным направлением исследований в конце 1990-х годов. [ нужна цитата ] Однако за это время скорость компьютеров значительно выросла по сравнению с сетевыми системами, и недостатки в производительности стали подавлять преимущества с точки зрения разработки. [ нужна цитата ]

Было предпринято множество попыток адаптировать существующие системы для повышения производительности, но накладные расходы всегда были значительными, и большинство этих усилий требовало перемещения программ пользовательского пространства обратно в ядро. К 2000 году большинство крупномасштабных усилий по созданию ядра Mach завершилось, хотя macOS Apple , выпущенная в 2001 году, по-прежнему использует гибридное ядро ​​под названием XNU , которое сочетает в себе сильно модифицированное (гибридное) OSF/1 ядро ядро ​​Mach ( OSFMK 7.3) с код из BSD UNIX, [10] [11] и это ядро ​​также используется в iOS , tvOS и watchOS . Windows NT , начиная с NT 3.1 и продолжая Windows 11 , использует гибридную конструкцию ядра. По состоянию на 2012 год на базе Mach GNU Hurd также функционален и включен в тестовые версии Arch Linux и Debian .

Хотя основная работа над микроядрами в основном закончилась, экспериментаторы продолжали разработку. [ нужна цитата ] С тех пор было показано, что многие проблемы с производительностью более ранних проектов не были фундаментальным ограничением концепции, а были вызваны желанием проектировщика использовать одноцелевые системы для реализации как можно большего количества этих сервисов. [ нужна цитата ] Использование более прагматичного подхода к проблеме, включая ассемблерный код и использование процессора для реализации концепций, обычно поддерживаемых в программном обеспечении, привело к созданию новой серии микроядер с значительно улучшенной производительностью.

Микроядра тесно связаны с экзоядрами . [12] Они также имеют много общего с гипервизорами , [13] но последние не претендуют на минимализм и специализируются на поддержке виртуальных машин ; Микроядро L4 часто находит применение в качестве гипервизора.

Введение [ править ]

Ядра ранних операционных систем были довольно маленькими, отчасти потому, что память компьютера была ограничена. По мере роста возможностей компьютеров росло и количество устройств, которыми должно было управлять ядро. На протяжении ранней истории Unix ядра, как правило, были небольшими, хотя они содержали различные драйверы устройств и файловых систем реализации . Когда адресное пространство увеличилось с 16 до 32 бит, конструкция ядра больше не ограничивалась аппаратной архитектурой, и ядра начали увеличиваться в размерах.

Распространение программного обеспечения Беркли (BSD) Unix положило начало эпохе более крупных ядер. В дополнение к базовой системе, состоящей из процессора, дисков и принтеров, BSD добавила полную сетевую систему TCP/IP и ряд «виртуальных» устройств, которые позволяли существующим программам работать «невидимо» по сети. Этот рост продолжался в течение многих лет, в результате чего появились ядра с миллионами строк исходного кода . В результате такого роста ядра стали подвержены ошибкам, и их становилось все труднее поддерживать.

Микроядро было предназначено для решения проблемы роста числа ядер и связанных с этим трудностей. Теоретически конструкция микроядра позволяет упростить управление кодом за счет его разделения на сервисы пользовательского пространства . Это также позволяет повысить безопасность и стабильность за счет уменьшения объема кода, выполняемого в режиме ядра . Например, если сетевая служба выйдет из строя из-за переполнения буфера , будет повреждена только память сетевой службы, а остальная часть системы останется работоспособной.

Межпроцессное взаимодействие [ править ]

Межпроцессное взаимодействие (IPC) — это любой механизм, который позволяет отдельным процессам взаимодействовать друг с другом, обычно путем отправки сообщений . Разделяемая память , строго говоря, также является механизмом межпроцессного взаимодействия, но аббревиатура IPC обычно относится только к передаче сообщений, и именно последнее особенно актуально для микроядер. IPC позволяет строить операционную систему из ряда более мелких программ, называемых серверами, которые используются другими программами в системе, вызываемыми через IPC. Большая часть или вся поддержка периферийного оборудования осуществляется таким образом с помощью серверов для драйверов устройств, стеков сетевых протоколов , файловых систем, графики и т. д.

IPC может быть синхронным или асинхронным. Асинхронный IPC аналогичен сетевой коммуникации: отправитель отправляет сообщение и продолжает выполнение. Получатель проверяет ( опрашивает ) доступность сообщения или получает уведомление об этом через какой-либо механизм уведомления. Асинхронный IPC требует, чтобы ядро ​​поддерживало буферы и очереди для сообщений и имело дело с переполнением буфера; также требуется двойное копирование сообщений (от отправителя в ядро ​​и от ядра к получателю). При синхронном IPC первая сторона (отправитель или получатель) блокирует передачу до тех пор, пока другая сторона не будет готова выполнить IPC. Он не требует буферизации или создания нескольких копий, но неявное рандеву может затруднить программирование. Большинство программистов предпочитают асинхронную отправку и синхронный прием.

Микроядра первого поколения обычно поддерживали как синхронный, так и асинхронный IPC и страдали от низкой производительности IPC. Йохен Лидтке предположил, что основной причиной таких плохих показателей является разработка и внедрение механизмов IPC. В своем микроядре L4 он впервые применил методы, которые на порядок снизили затраты на IPC . [14] К ним относятся системный вызов IPC, который поддерживает операции отправки и получения, делая все IPC синхронными и передавая в регистры как можно больше данных. Кроме того, Лидтке представил концепцию прямого переключения процесса , при которой во время выполнения IPC выполняется (неполное) переключение контекста от отправителя непосредственно к получателю. Если, как в L4, часть или все сообщение передается в регистрах, при этом регистровая часть сообщения передается без какого-либо копирования. Более того, избегаются накладные расходы на вызов планировщика; это особенно полезно в обычном случае, когда IPC используется в виде удаленного вызова процедур (RPC) клиентом, вызывающим сервер. Другая оптимизация, называемая отложенным планированием , позволяет избежать обхода очередей планирования во время IPC, оставляя потоки, которые блокируются во время IPC, в очереди готовности. После вызова планировщика он перемещает такие потоки в соответствующую очередь ожидания. Поскольку во многих случаях поток разблокируется перед следующим вызовом планировщика, этот подход экономит значительную работу. Подобные подходы с тех пор были приняты QNX и МИНИКС 3 . [ нужна цитата ]

В серии экспериментов Чен и Бершад сравнили количество циклов памяти на инструкцию (MCPI) монолитного Ultrix с циклами микроядра Mach в сочетании с сервером 4.3BSD Unix- , работающим в пользовательском пространстве . Их результаты объяснили более низкую производительность Mach из-за более высокого MCPI и продемонстрировали, что IPC сам по себе не несет ответственности за большую часть накладных расходов системы, что позволяет предположить, что оптимизации, ориентированные исключительно на IPC, будут иметь ограниченный эффект. [15] Позже Лидтке уточнил результаты Чена и Бершада, отметив, что большая часть различий между Ultrix и Mach MCPI была вызвана промахами кэша емкости , и пришел к выводу, что резкое сокращение рабочего набора кэша микроядра решит проблему. [16]

В системе клиент-сервер большая часть связи по существу синхронна, даже если используются асинхронные примитивы, поскольку типичной операцией является клиент, вызывающий сервер и затем ожидающий ответа. Поскольку он также обеспечивает более эффективную реализацию, большинство микроядер обычно следовали примеру L4 и предоставляли только синхронный примитив IPC. Асинхронный IPC можно реализовать поверх, используя вспомогательные потоки. Однако опыт показал, что полезность синхронного IPC сомнительна: синхронный IPC навязывает многопоточный дизайн простым в остальном системам, что приводит к усложнению синхронизации. Более того, вызов сервера, подобный RPC, упорядочивает клиент и сервер, чего следует избегать, если они работают на разных ядрах. Поэтому версии L4, развернутые в коммерческих продуктах, сочли необходимым добавить механизм асинхронных уведомлений для лучшей поддержки асинхронной связи. Этот сигнальный механизм не передает данные и поэтому не требует буферизации ядром. Имея две формы IPC, они, тем не менее, нарушили принцип минимальности. Другие версии L4 полностью перешли на асинхронный IPC. [17]

Поскольку синхронный IPC блокирует первую сторону до тех пор, пока другая не будет готова, неограниченное использование может легко привести к тупиковой ситуации. Более того, клиент может легко организовать атаку типа «отказ в обслуживании» на сервере, отправив запрос и даже не попытавшись получить ответ. Следовательно, синхронный IPC должен обеспечивать средства предотвращения бессрочной блокировки. Многие микроядра предоставляют таймауты для вызовов IPC, которые ограничивают время блокировки. На практике выбрать разумные значения таймаутов сложно, и системы почти неизбежно используют бесконечные таймауты для клиентов и нулевые таймауты для серверов. Как следствие, наблюдается тенденция к тому, чтобы не предоставлять произвольные тайм-ауты, а только флаг, который указывает, что IPC должен немедленно выйти из строя, если партнер не готов. Этот подход эффективно обеспечивает выбор двух значений таймаута: нуля и бесконечности. Последние версии L4 и MINIX пошли по этому пути (более старые версии L4 использовали таймауты). QNX позволяет избежать этой проблемы, требуя от клиента указать буфер ответа как часть вызова отправки сообщения. Когда сервер отвечает, ядро ​​копирует данные в буфер клиента, не дожидаясь явного получения клиентом ответа. [18]

Серверы [ править ]

Серверы микроядра, по сути, являются программами -демонами , как и любые другие, за исключением того, что ядро ​​предоставляет некоторым из них привилегии для взаимодействия с частями физической памяти, которые в противном случае недоступны для большинства программ. Это позволяет некоторым серверам, особенно драйверам устройств, напрямую взаимодействовать с оборудованием.

Базовый набор серверов для микроядра общего назначения включает серверы файловой системы, серверы драйверов устройств, сетевые серверы, серверы отображения и серверы устройств пользовательского интерфейса. Этот набор серверов (взятый из QNX ) предоставляет примерно тот же набор сервисов, который предлагает монолитное ядро ​​Unix . Необходимые серверы запускаются при запуске системы и предоставляют обычным прикладным программам такие услуги, как доступ к файлам, сети и устройствам. Когда такие серверы работают в среде пользовательского приложения, разработка сервера аналогична разработке обычного приложения, а не процессу сборки и загрузки, необходимому для разработки ядра.

Кроме того, многие «сбои» можно исправить, просто остановив и перезапустив сервер . Однако часть состояния системы теряется при выходе из строя сервера, поэтому этот подход требует, чтобы приложения справлялись с сбоем. Хорошим примером является сервер, отвечающий за TCP/IP- соединения: если этот сервер перезапустить, приложения потеряют соединение, что является нормальным явлением в сетевой системе. Для других служб сбой менее ожидаем и может потребовать внесения изменений в код приложения. Для QNX возможность перезапуска предлагается в виде QNX High Availability Toolkit. [19]

Драйверы устройств [ править ]

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

Хотя запуск драйвера устройства в пользовательском пространстве не обязательно уменьшает ущерб, который может нанести неправильно работающий драйвер, на практике это полезно для стабильности системы при наличии ошибочных (а не вредоносных) драйверов: нарушения доступа к памяти со стороны самого кода драйвера ( в отличие от устройства) все равно может быть перехвачено аппаратным обеспечением управления памятью. Более того, многие устройства не поддерживают DMA, их драйверы можно сделать недоверенными, запустив их в пользовательском пространстве. В последнее время все больше компьютеров оснащены модулями IOMMU , многие из которых можно использовать для ограничения доступа устройства к физической памяти. [20] Это также позволяет драйверам пользовательского режима стать ненадежными.

Драйверы пользовательского режима на самом деле появились раньше микроядер. Терминальная система штата Мичиган (MTS) в 1967 году поддерживала драйверы пользовательского пространства (включая поддержку файловой системы), став первой операционной системой, разработанной с такой возможностью. [21] Исторически сложилось так, что драйверы представляли меньшую проблему, поскольку количество устройств было небольшим и в любом случае заслуживало доверия, поэтому их наличие в ядре упрощало проект и позволяло избежать потенциальных проблем с производительностью. Это привело к традиционному стилю Unix «драйвер в ядре», [22] Linux и Windows NT. С распространением различного рода периферийных устройств объем кода драйверов увеличился, и в современных операционных системах размер кода доминирует над ядром.

Основные компоненты и минимализм [ править ]

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

Этот минималистичный дизайн был впервые предложен компанией Бринча Хансена и Nucleus IBM гипервизором виртуальной машины . Лидтке С тех пор он был формализован в принципе минимальности :

Концепция допускается внутри микроядра только в том случае, если ее перемещение за пределы ядра, т. е. разрешение конкурирующих реализаций, помешало бы реализации требуемой функциональности системы. [16]

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

С принципом минимальности связано и не менее важно для проектирования микроядра разделение механизма и политики . Это то, что позволяет создавать произвольные системы поверх минимального ядра. Любая политика, встроенная в ядро, не может быть перезаписана на уровне пользователя и, следовательно, ограничивает универсальность микроядра. [12] Политику, реализованную на серверах уровня пользователя, можно изменить, заменив серверы (или позволив приложению выбирать между конкурирующими серверами, предлагающими аналогичные услуги).

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

Для запуска ( загрузки ) системы на основе микроядра требуются драйверы устройств , которые не являются частью ядра. Обычно это означает, что они упакованы вместе с ядром в загрузочный образ, и ядро ​​поддерживает протокол начальной загрузки, который определяет, как находятся и запускаются драйверы; это традиционная процедура начальной загрузки микроядер L4 . Некоторые микроядра упрощают это, помещая некоторые ключевые драйверы внутри ядра (в нарушение принципа минимальности), LynxOS и оригинальный Minix примерами являются . Некоторые даже включают ​​файловую систему в ядро для упрощения загрузки. Система на основе микроядра может загружаться через мультизагрузочный загрузчик. Такие системы обычно загружают статически связанные серверы для начальной загрузки или монтируют образ ОС для продолжения загрузки.

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

Производительность [ править ]

На большинстве основных процессоров получение услуги в системе на основе микроядра обходится дороже, чем в монолитной системе. [12] В монолитной системе получение услуги осуществляется одним системным вызовом, для которого требуется два переключения режимов процессора (смена кольца или режима ЦП ). В системе на основе микроядра услуга получается путем отправки сообщения IPC на сервер и получения результата в другом сообщении IPC от сервера. Для этого требуется переключение контекста , если драйверы реализованы как процессы, или вызов функции, если они реализованы как процедуры. Кроме того, передача реальных данных на сервер и обратно может повлечь за собой дополнительные накладные расходы на копирование, тогда как в монолитной системе ядро ​​может напрямую обращаться к данным в буферах клиента.

Таким образом, производительность является потенциальной проблемой в системах микроядра. Опыт микроядер первого поколения, таких как Mach и ChorusOS, показал, что системы на их основе работают очень плохо. [15] Однако Йохен Лидтке показал, что проблемы с производительностью Маха были результатом плохого проектирования и реализации, в частности, чрезмерного использования кэша Маха . [16] Лидтке продемонстрировал на своем собственном микроядре L4 , что благодаря тщательному проектированию и реализации, и особенно следованию принципу минимальности, затраты на IPC можно снизить более чем на порядок по сравнению с Mach. Производительность IPC L4 по-прежнему остается непревзойденной во многих архитектурах. [23] [24] [25]

Хотя эти результаты показывают, что низкая производительность систем, основанных на микроядрах первого поколения, не характерна для ядер второго поколения, таких как L4, это не является доказательством того, что системы на основе микроядра могут быть построены с хорошей производительностью. Было показано, что монолитный сервер Linux, перенесенный на L4, имеет лишь несколько процентов накладных расходов по сравнению с собственным Linux. [26] Однако такая односерверная система практически не демонстрирует преимуществ, которые микроядра должны обеспечивать за счет структурирования функций операционной системы на отдельных серверах.

Существует ряд коммерческих мультисерверных систем, в частности системы реального времени QNX и Integrity . Для этих многосерверных систем не было опубликовано всестороннего сравнения производительности по сравнению с монолитными системами. Более того, производительность, похоже, не является первостепенной проблемой для тех коммерческих систем, которые вместо этого делают упор на надежное быстрое время отклика на обработку прерываний (QNX) и простоту ради надежности. Попыткой создания высокопроизводительной многосерверной операционной системы стал проект IBM Sawmill Linux. [27] Однако этот проект так и не был завершен.

Тем временем было показано, что драйверы устройств пользовательского уровня могут приблизиться к производительности встроенных в ядро ​​драйверов даже для таких высокопроизводительных устройств с высоким уровнем прерываний, как Gigabit Ethernet. [28] Кажется, это означает, что возможны высокопроизводительные многосерверные системы.

Безопасность [ править ]

Преимущества безопасности микроядер часто обсуждаются. [29] [30] Некоторые утверждают, что в контексте безопасности принцип минимальности микроядер является прямым следствием принципа наименьших привилегий , согласно которому весь код должен иметь только те привилегии, которые необходимы для обеспечения требуемой функциональности. системы Минимальность требует, чтобы доверенная вычислительная база (TCB) была минимальной. Поскольку ядро ​​(код, который выполняется в привилегированном аппаратном режиме) имеет непроверенный доступ к любым данным и, таким образом, может нарушить их целостность или конфиденциальность, ядро ​​всегда является частью TCB. Сведение к минимуму является естественным в конструкции, ориентированной на безопасность.

Следовательно, конструкции микроядра использовались для систем, предназначенных для приложений с высоким уровнем безопасности, включая KeyKOS , EROS и военные системы. Фактически, общие критерии (CC) на самом высоком уровне доверия ( Уровень обеспечения оценки (EAL) 7) имеют явное требование, чтобы цель оценки была «простой», что является признанием практической невозможности установления истинной надежности сложной системы. Опять же, термин «простой» вводит в заблуждение и нечетко определен. По крайней мере, Критерии оценки доверенных компьютерных систем Министерства обороны ввели несколько более точную формулировку на курсах B3/A1:

«TCB должен [реализовать] законченные, концептуально простые механизмы защиты с точно определенной семантикой. Значительное системное проектирование должно быть направлено на минимизацию сложности TCB, а также на исключение из TCB тех модулей, которые не являются критически важными для защиты».

- Критерии оценки надежности компьютерной системы Министерства обороны

В 2018 году в документе, представленном на Азиатско-Тихоокеанской системной конференции, утверждалось, что микроядра явно безопаснее, чем монолитные ядра, путем исследования всех опубликованных критических CVE для ядра Linux на тот момент . Исследование пришло к выводу, что 40% проблем вообще не могут возникнуть в формально проверенном микроядре, и только 4% проблем останутся полностью неустраненными в такой системе. [31]

Третье поколение [ править ]

Более поздние работы над микроядрами были сосредоточены на формальных спецификациях API ядра и формальных доказательствах свойств безопасности API и правильности реализации. Первым примером этого является математическое доказательство механизмов ограничения в EROS, основанное на упрощенной модели API EROS. [32] Совсем недавно (в 2007 году) был выполнен полный набор машинных проверок свойств модели защиты seL4 , версии L4. [33]

Это привело к появлению так называемых микроядер третьего поколения . [34] характеризуется ориентированным на безопасность API с доступом к ресурсам, контролируемым возможностями , виртуализацией как первоклассной задачей, новыми подходами к управлению ресурсами ядра, [35] и цель разработки — пригодность для формального анализа , помимо обычной цели — высокой производительности. Примеры: Coyotos , seL4 , Nova, [36] [37] Redox и Fiasco.OC. [36] [38]

В случае seL4 достигнута полная формальная проверка реализации, [34] т.е. математическое доказательство того, что реализация ядра соответствует его формальной спецификации. Это обеспечивает гарантию того, что свойства, подтвержденные в отношении API, действительно сохраняются для реального ядра, степень уверенности, превосходящая даже CC EAL7. За этим последовали доказательства свойств API по обеспечению безопасности, а также доказательство, демонстрирующее, что исполняемый двоичный код является правильным переводом реализации C, исключающим компилятор из TCB. В совокупности эти доказательства представляют собой сквозное доказательство свойств безопасности ядра. [39]

Примеры [ править ]

Некоторые примеры микроядер:

Наноядро [ править ]

Термин «наноядро» или «пикоядро» исторически относился к:

  • Ядро, в котором общий объем кода ядра, т. е. кода, выполняющегося в привилегированном режиме оборудования, очень мал. Термин «пикоядро» иногда использовался, чтобы еще больше подчеркнуть небольшой размер. Термин «наноядро» был придуман Джонатаном С. Шапиро в статье The KeyKOS NanoKernel Architecture . Это был сардонический ответ на Mach , который претендовал на роль микроядра, в то время как Шапиро считал его монолитным, по существу неструктурированным и более медленным, чем системы, которые он стремился заменить. Последующее повторное использование этого термина и реакция на него, включая чеканку пикоядра, позволяют предположить, что этот момент в значительной степени был упущен. И наноядро , и пикоядро впоследствии стали иметь одно и то же значение, выраженное термином микроядро.
  • Уровень виртуализации под операционной системой, который правильнее называть гипервизором .
  • Уровень аппаратной абстракции , образующий часть ядра самого низкого уровня, иногда используемый для обеспечения функциональности в реальном времени обычным операционным системам, таким как Adeos .

Существует также по крайней мере один случай, когда термин «наноядро» используется для обозначения не небольшого ядра, а ядра, поддерживающего наносекундное разрешение часов. [40]

См. также [ править ]

Ссылки [ править ]

  1. ^ Гердер, Йоррит Н. (23 февраля 2005 г.). «На пути к настоящей микроядерной операционной системе» (PDF) . minix3.org . Проверено 22 июня 2015 г.
  2. ^ "читать далее" . Проверено 20 декабря 2016 г.
  3. ^ «Пер Бринч Хансен» . Компьютерное общество IEEE . Проверено 13 сентября 2016 г.
  4. ^ Бринч Хансен, Пер (2004). История программиста: жизнь пионера компьютеров . Проверено 13 сентября 2016 г.
  5. ^ Бринч Хансен, Пер (апрель 1969 г.). Программное обеспечение RC 4000: Система мультипрограммирования (PDF) (Технический отчет). Регнецентрален . Проверено 13 сентября 2016 г.
  6. ^ Бринч Хансен, Пер (1970). «Ядро мультипрограммной операционной системы» (PDF) . Коммуникации АКМ . 13 (4): 238–250. CiteSeerX   10.1.1.105.4204 . дои : 10.1145/362258.362278 . S2CID   9414037 .
  7. ^ . Вульф, Уильям; Коэн, Эллис; Корвин, Уильям; Джонс, Анита; Левин, Рой; Пирсон, К.; Поллак, Фред (июнь 1974 г.). «ГИДРА: Ядро многопроцессорной операционной системы» . Коммуникации АКМ . 17 (6): 337–345. дои : 10.1145/355616.364017 . S2CID   8011765 .
  8. ^ Рашид, Ричард; Робертсон, Джордж (декабрь 1981 г.). «Акцент: ядро ​​сетевой операционной системы, ориентированное на связь». SOSP '81 Материалы восьмого симпозиума ACM по принципам работы операционных систем . Пасифик Гроув, Калифорния, США. стр. 64–75. дои : 10.1145/800216.806593 .
  9. ^ Сассенрат, Карл (1986). Справочное руководство по ядру Amiga ROM . Исполнительный. {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  10. ^ Джим Мэги. WWDC 2000, сеанс 106 — Mac OS X: ядро . Через 14 минут. Архивировано из оригинала 11 декабря 2021 года.
  11. ^ «Портирование приложений UNIX/Linux на Mac OS X» . Яблоко . Проверено 26 апреля 2011 г.
  12. ^ Перейти обратно: а б с Лидтке, Йохен (сентябрь 1996 г.). «На пути к реальным микроядрам» . Коммуникации АКМ . 39 (9): 70–77. дои : 10.1145/234215.234473 . S2CID   2867357 .
  13. ^ Хайзер, Гернот ; Улиг, Фолькмар; ЛеВассер, Джошуа (январь 2006 г.). «Правильно ли настроены микроядра мониторов виртуальных машин?» . Обзор операционных систем ACM SIGOPS . 40 (1). АКМ: 95–99. дои : 10.1145/1113361.1113363 . S2CID   7414062 . Архивировано из оригинала 13 января 2014 года . Проверено 13 января 2014 г.
  14. ^ Лидтке, Йохен (декабрь 1993 г.). Улучшение IPC за счет разработки ядра . 14-й симпозиум ACM по принципам операционных систем. Эшвилл, Северная Каролина, США. стр. 175–88. CiteSeerX   10.1.1.40.1293 .
  15. ^ Перейти обратно: а б Чен, Дж. Брэдли; Бершад, Брайан Н. (декабрь 1993 г.). «Влияние структуры операционной системы на производительность системы памяти» (PDF) . SOSP '93 Материалы четырнадцатого симпозиума ACM по принципам операционных систем . Эшвилл, Северная Каролина, США. стр. 120–133. дои : 10.1145/168619.168629 .
  16. ^ Перейти обратно: а б с Лидтке, Йохен (декабрь 1995 г.). «О построении µ-ядра». SOSP '95 Материалы пятнадцатого симпозиума ACM по принципам операционных систем . Курорт Коппер-Маунтин, Колорадо, США. стр. 237–250. дои : 10.1145/224056.224075 .
  17. ^ Эльфинстон, Кевин; Хейзер, Гернот (ноябрь 2013 г.). «От L3 к seL4: чему мы научились за 20 лет микроядер L4?». SOSP '13 Материалы двадцать четвертого симпозиума ACM по принципам операционных систем . Фармингтон, Пенсильвания, США. стр. 133–150. дои : 10.1145/2517349.2522720 .
  18. ^ «Синхронная передача сообщений» . Проверено 14 июля 2019 г.
  19. ^ «Набор инструментов высокой доступности QNX» (PDF) . Архивировано из оригинала (PDF) 24 августа 2005 года.
  20. ^ Вонг, Уильям (27 апреля 2007 г.). «Ввод-вывод, ввод-вывод, пора переходить к виртуальной работе» . Электронный дизайн . Проверено 8 июня 2009 г.
  21. ^ Александр, Майкл Т. (1971). «Организация и особенности терминальной системы Мичигана». Материалы осенней объединенной компьютерной конференции, состоявшейся 16–18 ноября 1971 г. Том. 40. стр. 589–591. дои : 10.1145/1478873.1478951 . S2CID   14614148 .
  22. ^ Лайонс, Джон (1 августа 1977 г.). Комментарий Львов к шестому изданию UNIX с исходным кодом . Одноранговая связь. ISBN  978-1-57398-013-5 .
  23. ^ Лидтке, Йохен ; Эльфинстон, Кевин; Шёнберг, Себастьян; Хартиг, Герман; Хайзер, Гернот ; Ислам, Наим; Джагер, Трент (май 1997 г.). Достигнутая производительность IPC (по-прежнему является основой расширяемости) . 6-й семинар по актуальным темам операционных систем. Кейп-Код, Массачусетс, США: IEEE. стр. 28–31.
  24. ^ Грей, Чарльз; Чепмен, Мэтью; Чабб, Питер; Мосбергер-Танг, Дэвид; Хайзер, Гернот (апрель 2005 г.). Itanium — история системного разработчика . Ежегодная техническая конференция USENIX. Аннахайм, Калифорния, США. стр. 264–278.
  25. ^ ван Шайк, Карл; Хейзер, Гернот (январь 2007 г.). Высокопроизводительные микроядра и виртуализация на ARM и сегментированных архитектурах . 1-й международный семинар по микроядрам для встраиваемых систем. Сидней, Австралия: НИКТА. стр. 11–21. Архивировано из оригинала 26 апреля 2007 года . Проверено 1 апреля 2007 г.
  26. ^ Хартиг, Герман; Хохмут, Майкл; Лидтке, Йохен ; Шёнберг, Себастьян (октябрь 1997 г.). «Производительность систем на базе μ-ядра» . Материалы шестнадцатого симпозиума ACM по принципам операционных систем - СОСП '97 . Том. 31. С. 66–77. дои : 10.1145/268998.266660 . ISBN  0-89791-916-5 . S2CID   1706253 .
  27. ^ Жеффло, Ален; Джагер, Трент; Пак, Юнхо; Лидтке, Йохен ; Эльфинстон, Кевин Дж.; Улиг, Фолькмар; Тидсвелл, Джонатон Э.; Деллер, Люк; и другие. (2000). Многосерверный подход Sawmill . 9-й Европейский семинар ACM SIGOPS. Колдинг, Дания. стр. 109–114. CiteSeerX   10.1.1.25.8376 .
  28. ^ Лесли, Бен; Чабб, Питер; Фицрой-Дейл, Николас; Гетц, Стефан; Грей, Чарльз; Макферсон, Люк; Поттс, Дэниел; Шен, Юетин; Эльфинстон, Кевин; Хайзер, Гернот (сентябрь 2005 г.). «Драйверы устройств пользовательского уровня: достигнутая производительность». Журнал компьютерных наук и технологий . 20 (5): 654–664. дои : 10.1007/s11390-005-0654-4 . S2CID   1121537 .
  29. ^ Таненбаум, Эндрю С. «Дебаты Таненбаума-Торвальдса, часть II» .
  30. ^ Таненбаум А., Гердер Дж. и Бос Х. (май 2006 г.).
  31. ^ Биггс, Саймон; Ли, Дэймон; Хейзер, Гернот (2018). «Жюри вынесено: монолитная конструкция ОС ошибочна: конструкции на основе микроядра повышают безопасность» . Материалы 9-го Азиатско-Тихоокеанского семинара по системам . Остров Чеджу, Республика Корея: Ассоциация вычислительной техники. стр. 1–7. дои : 10.1145/3265723.3265733 .
  32. ^ Шапиро, Джонатан С.; Вебер, Сэмюэл. Проверка механизма локализации EROS . Конференция IEEE по безопасности и конфиденциальности. Архивировано из оригинала 3 марта 2016 года.
  33. ^ Элькадуве, Дхаммика; Кляйн, Гервин; Эльфинстон, Кевин (2007). Проверенная модель защиты микроядра seL4 . передано для публикации. Архивировано из оригинала 29 ноября 2011 года . Проверено 10 октября 2007 г.
  34. ^ Перейти обратно: а б Кляйн, Гервин; Эльфинстон, Кевин; Хейзер, Гернот; Андроник, июнь; Кок, Дэвид; Деррин, Филип; Элькадуве, Дхаммика; Энгельхардт, Кай; Колански, Рафаль; Норриш, Майкл; Сьюэлл, Томас; Тач, Харви; Уинвуд, Саймон (октябрь 2009 г.). seL4: Формальная проверка ядра ОС (PDF) . 22-й симпозиум ACM по принципам операционной системы. Биг Скай, Монтана, США.
  35. ^ Элькадуве, Дхаммика; Деррин, Филип; Эльфинстон, Кевин (апрель 2008 г.). Конструкция ядра для изоляции и обеспечения физической памяти . 1-й семинар по изоляции и интеграции встраиваемых систем. Глазго, Великобритания. дои : 10.1145/1435458 . Архивировано из оригинала 24 апреля 2010 года . Проверено 17 августа 2009 г.
  36. ^ Перейти обратно: а б «Домашняя страница TUD: Операционные системы: Исследования: микроядро и гипервизор» . Факультет компьютерных наук . Технический университет Дрездена. 12 августа 2010 года. Архивировано из оригинала 6 апреля 2012 года . Проверено 5 ноября 2011 г.
  37. ^ Стейнберг, Удо; Кауэр, Бернхард (апрель 2010 г.). NOVA: Архитектура безопасной виртуализации на основе микрогипервизора . Eurosys 2010. Париж, Франция. стр. 209–222. дои : 10.1145/1755913.1755935 .
  38. ^ Лакожински, Адам; Варг, Александр (март 2009 г.). Укрощение подсистем — возможности универсального контроля доступа к ресурсам в L4 . IIES'09: Второй семинар по изоляции и интеграции встраиваемых систем. Нюрнберг , Германия. CiteSeerX   10.1.1.629.9845 .
  39. ^ Кляйн, Гервин; Андроник, июнь; Эльфинстон, Кевин; Мюррей, Тоби; Сьюэлл, Томас; Колански, Рафаль; Хайзер, Гернот (февраль 2014 г.). «Комплексная формальная верификация микроядра ОС». Транзакции ACM в компьютерных системах . 32 (1): 2:1–2:70. дои : 10.1145/2560537 . S2CID   4474342 .
  40. ^ Дэвид Л. Миллс и Пол-Хеннинг Камп (28 ноября 2000 г.). «Наноядро» (PDF) . Проверено 28 августа 2017 г.

Дальнейшее чтение [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: EB5FCAAB9AACD826C629D6809E303A0F__1714422840
URL1:https://en.wikipedia.org/wiki/Microkernel
Заголовок, (Title) документа по адресу, URL1:
Microkernel - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)