Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Микроядерные операционные системы (Реферат по дисциплине “Операционные системы”)

Содержание:

Введение

И так что бы начать говорить о том, что же такое микроядерные ОС, нужно понять в начале, что такое микроядро и для чего оно нужно? Этапы развития этой области, возможности, особенности и характеристики и принципы.
Микроядерные Операционные Системы привлекают внимание разработчиков и исследователей последние 30 лет. Действительно, с одной стороны эти системы обеспечивают жесткое разделение исполнимых модулей, вынесение всех служб из ядра в пространство пользователя, способствует повышение отказоустойчивости и безопасности системы. С другой стороны издержки, возникающие из-за поддержки такой распределенной структуры требуют дополнительных вычислительных ресурсов. Это противоречие заставляет ученых и разработчиков искать новые архитектурные решения для минимизации негативных и усиления позитивных сторон микроядерных ОС.
За последнее десятилетие технологии вычислительных систем осуществили огромный скачок вперед и теперь даже в мобильных устройствах присутствуют процессоры с частотой большей 1GHz и модули оперативной памяти объемом 512-2048 MB. Кроме того, внутренняя архитектура программного обеспечения существенно увеличила свою сложность, и для многих областей и устройств микропроцессорная ОС является оптимальной. Поэтому данный тип имеет место на развитие и применение.

Основная часть

Микроядро.

Что же все-таки такое микроядро?

Микроядро (англ. microkernel) или μ-ядро (англ. μ kernel) — ядро операционной системы, реализующее минимальный набор функций.


Архитектура микроядра, основанная на программах-серверах, работающих в пользовательском режиме

 

Компьютеры с CISC архитектурой имеют комплексную систему команд, под управлением которой выполняются всевозможные операции типа «память-память», «память-регистр», «регистр-память», «регистр-регистр». Данная архитектура характеризуется:
* большим числом команд (более 200);
* переменной длиной команд (от 1 до 11 байт); * значительным числом способов адресации и форматов команд;
* сложностью команд и многотактностью их выполнения;
* наличием микропрограммного управления, что снижает быстродействие и усложняет процессор.
Обмен с памятью в процессе выполнения команды делает практически невозможной глубокую конвейеризацию арифметики, т.е. ограничивается тактовая частота процессора, а значит, и его производительность.
Большинство современных компьютеров типа IBM PC относятся к CISC архитектуре, например, компьютеры с микропроцессорами 8080, 80486, 80586.
Компьютеры с RISC архитектурой содержат набор простых, часто употребляемых в программах команд. Основными являются операции типа «регистр-регистр».
Данная архитектура характеризуется:
* сокращенным числом команд;
* тем, что большинство команд выполняется за один машинный такт;
* постоянной длиной команд;
* небольшим количеством способов адресации и форматов команд;
* тем, что для простых команд нет необходимости в использовании микропрограммного управления;
* большим числом регистров внутренней памяти процессора.
Компьютеры с RISC-архитектурой «обязаны» иметь преимущество в производительности по сравнению с CISC компьютерами, за которое приходится расплачиваться наличием в программах дополнительных команд обмена регистров процессора с оперативной памятью.

Устройство микроядра.

Работа с микроядром осуществляется так же, как и с монолитным ядром — через системные вызовы.

Микроядра предоставляют лишь небольшой набор низкоуровневых примитивов/механизмов/компонентов/сервисов/модулей, например:

1) Механизм для работы со страницами памяти;
2) Механизм для работы с потоками процессов;
3) Механизм для взаимодействия процессов.

Остальные примитивы/функции/компоненты/сервисы/модули, например:

1) Драйверы устройств;
2) Реализации файловых систем;
3) Стеки TCP/IP, USB и др.

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

Достоинства и недостатки.

Преимущества ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:

1) Простота реализации;
2) Простота отладки;
3) Гарантированная безопасность;
4) Надёжность;
5) Модульность.

Недостатки ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:

1) Более низкая производительность.

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

Основные характеристики микропроцессоров.

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

Именно за счет увеличения числа ядер ведущие производители планируют наращивать мощность процессоров в дальнейшем. Сегодня на персональные рабочие станции устанавливаются, как правило, 2-8 ядерные CPU, а для серверных систем уже существуют и 16-ядерные. В экспериментальных условиях проходят апробирование процессоры, оснащенные более чем 20 ядрами.
Увеличение производительности за счет количества ядер особенно ощутимо при исполнении многозадачных программ, в логику которых заложено одновременное выполнение нескольких действий. В то время, как одноядерный процессор выполнял бы задачи последовательно - одну за другой, многоядерный - делает это параллельно.

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

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

Объем кэша процессора значительно влияет на его стоимость.

Технология производства или техпроцесс CPU
Эта характеристика показывает размер наименьшего отдельного элемента базы транзистора, умещаемого на кристалле. Понятно, что чем элемент мельче, тем больше их можно разместить на единице площади, тем самым увеличив производительность. Единицей измерения техпроцесса служит нанометр - настолько малы частицы. Выпущенные в 2011- 2012 годах процессоры имеют величину техпроцесса всего 22 нм, в то время как, например, в 2005 году выпускались процессоры по 50-нанометровому технологическому процессу. Поэтому можно проследить тенденцию развития этой технологии в сторону еще большего уменьшения элементов кристалла, и производителям это хорошо удается.
Частота системной шины.
Характеристика, показывающая скорость обмена данными между процессором и чипсетом материнской платы. Обозначается аббревиатурой FSB и измеряется количеством переданных данных за единицу времени. Чем выше FSB, тем выше производительность компьютера. Больше относится к характеристикам материнской платы.
Поддержка 64-битных вычислений
Появилась в 2004 году и с тех пор стала важна при выборе процессора. Практически все современные CPU для персональных компьютеров поддерживают 64-разрядность, что позволяет им использовать оперативную память в размере больше, чем 4 Гб.
Защищенный режим
Еще одна характеристика CPU, позволяющая предотвращать выполнение в операционной системе вредоносного кода. Поддерживается системами Windows, начиная со 2 сервиспака Windows XP.

Этапы развития микроядерных ОС.

Микроядра первого поколения

Микроядро Mach от университета Карнеги — Меллон.

В начале разработка Mach рассматривалась, в основном, как попытка создать концептуально «чистый», основанный на Unix, легко портируемый Accent. Были сформулированы следующие основные концепции:

«задача» — набор ресурсов которые позволяют «потокам» исполняться
«поток» — единица, исполняющаяся на процессоре
«порт» определяет защищённый конвейер для IPC между задачами
«сообщение» перемещается между программами через порт

Главным отличием от Unix было то, что утилиты должны были работать не с файлами, а с задачами. Больше кода было перемещено из ядра в непривилегированный режим. Ядро за счёт этого стало существенно меньше, отсюда термин микроядро для обозначения ядра Mach. В отличие от традиционных систем, под Mach процесс может состоять из набора потоков. Mach был первой ОС, которая определила понятие поток в этом смысле. Задачи ядра были сведены к работе с оборудованием и поддержке утилит.




Первым микропроцессором, объявленным как «компьютер-на-чипе», был 4-битный Intel 4004. Компания Intel хотела подчеркнуть, что в одном микропроцессоре реализуются все возможности компьютеров того времени. Это было не совсем верно, поскольку фактически он был реализован на четырех микросхемах. Процессор был изготовлен Intel по заказу японской компании Busicom и использовался для управления настольными калькуляторами этой фирмы. Он был однопрограммным и не универсальным, мог начать исполнение следующей программы только после завершения предыдущей, и был предназначен исключительно для вычислительных работ, то есть не мог применяться, например, для обработки текстов.

Развитием микропроцессоров стало появление универсальных многопрограммных 8-битных Intel 8080 и MOS Technology 6502. Они оба использовались в производстве настольных компьютеров и игровых консолей: первый — Altair 8800, второй — Nintendo NES, Atari 2600, Apple I, Apple II, Commodore 64, Агат и др. В отличие от 4004, эти микропроцессоры использовали раздельные шины адреса и данных, а инструкции и данные хранились в одних и тех же областях памяти. Таким образом, это были первые CPU, работающие на основе архитектуры фон Неймана и выполняющие функции арифметико-логического устройства и устройства управления.

Следующим этапом в эволюции центральных процессоров стал выпуск 16-битных Intel 8086/88, которые положили начало архитектуре x86 и массовому распространению персональных компьютеров. В 1980 был представлен первый процессор с RISC-архитектурой — IBM 801. По сравнению с CISC-процессорами того времени он имел меньшие размеры и число инструкций, был проще и дешевле в изготовлении. В 1984 начали изготовляться первые процессоры VLIW-архитектуры, однако они не получили большого распространения.
Дальнейшее развитие процессоров привело к переходу на 32-разрядные модели, позволявшие эффективнее работать с большими числами и адресовать ранее недоступные объемы памяти. В октябре 1985 вышел первый 32-битный x86-процессор, Intel 80386, а в 1986 появились три новые 32-битные RISC-архитектуры — MIPS, SPARC и PA-RISC, представленные компаниями MIPS Technologies, Sun и HP соответственно. Следующим шагом было появление 64-битных процессоров MIPS R4000 и DEC Alpha 21064. Alpha был также первым CPU, поддерживающим суперскалярность, то есть возможность исполнять более одной инструкции за такт. Первыми суперскалярными процессорами других архитектур стали Intel Pentium, MIPS R8000, PA-RISC 7100 и 64-битный UltraSPARC.

Следующей вехой в истории центральных процессоров стало динамическое исполнение команд. Заключалась оно в том, что процессор исполнял команды не в том порядке, в котором он их считывал из памяти, а в том, который был более эффективен по времени выполнения, и при этом, конечно же, не нарушал семантики программы. Эта технология была реализована во всех процессорах соответствующих архитектур, начиная с MIPS R10000, PA-RISC 8000, Intel Pentium Pro, Alpha 21264.

После этого появились первые популярные и коммерчески успешные процессоры с архитектурой VLIW — Intel Itanium и Transmeta Crusoe. Затем, с некоторым опозданием от других платформ вышли 64-битные расширения для x86, реализованные в процессорах AMD Opteron и Pentium 4.
В начале нового тысячелетия развитие центральных процессоров пошло в сторону увеличения количества ядер в одном процессорном корпусе. Практически одновременно вышли двухъядерные CPU всех популярных архитектур: PA-RISC 8800, UltraSPARC-IV, IBM PowerPC G4, MIPS BCM1255, AMD Athlon X2, Pentium D, Itanium 2, Intel Core 2 Duo. В ноябре 2005 вышел первый трехъядерный процессор Xenon/Waternoose для игровой консоли X-Box 360, а в ноябре 2006 ожидается появление семиядерного Cell в составе Sony PlayStation 3.


Основные принципы


Принцип модульности.

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

Принцип виртуализации.

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

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

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

Принцип мобильности.

Мобильность, или переносимость, означает возможность и легкость переноса операционной системы на другую аппаратную платформу. Мобильная операционная система обычно разрабатывается с помощью специального языка высокого уровня, предназначенного для создания системного программного обеспечения. Такой язык помимо поддержки высокоуровневых операторов, типов данных и модульных конструкций должен позволять непосредственно использовать аппаратные возможности и особенности процессора. Кроме этого, такой язык должен быть широко распространенным и реализованным в виде систем программирования, которые либо уже имеются на целевой платформе, либо позволяют получать программные коды для целевого компьютера. Другими словами, этот язык системного программирования должен быть достаточно распространенным и технологичным. Одним из таких языков является язык С. В последние годы язык C++ также стал использоваться для этих целей, поскольку идеи объектно-ориентированного программирования оказались плодотворными не только для прикладного, но и для системного программирования. Большинство современных операционных систем были созданы именно как объектно-ориентированные.

Обеспечить переносимость операционной системы достаточно сложно. Дело в том, что архитектуры разных процессоров могут очень сильно различаться. У них может быть разное количество рабочих регистров, причем часть регистров может оказаться контекстно-зависимыми. Различия могут быть и в реализации адресации. Более того, для операционной системы важной является не только архитектура центрального процессора, но и архитектура компьютера в целом, ибо важнейшую роль играет подсистема ввода-вывода, а она строится на дополнительных аппаратных средствах. В таких условиях сделать эффективным код операционной системы при условии создания его на языке типа C/C++ невозможно. Поэтому часть программных модулей, которые более всего зависят от аппаратных особенностей процессора, от типов поддерживаемых данных, способов адресации, системы команд и других важнейших моментов, разрабатывается на языке ассемблера. Очевидно, что модули, написанные на языке ассемблера, при переносе операционной системы на процессор с иной архитектурой должны быть написаны заново.

Принцип совместимости.

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

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

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

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

Принцип открытости.

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

Принцип обеспечения безопасных вычислений.

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

Что же касаемо микроядерных ОС?
Операционные системы, основанные на концепции микроядра, в высокой степе­ни удовлетворяют большинству требований, предъявляемых к современным ОС, обладая переносимостью, расширяемостью, надежностью и создавая хорошие предпосылки для поддержки распределенных приложений. За эти достоинства приходится платить снижением производительности, и это является основным недостатком микроядерной архитектуры.

Высокая степень переносимости обусловлена тем, что весь машинно-зависимый код изолирован в микроядре, поэтому для переноса системы на новый процессор требуется меньше изменений и все они логически сгруппированы вместе.
Расширяемость присуща микроядерной ОС в очень высокой степени. В тради­ционных системах даже при наличии многослойной структуры нелегко удалить один слой и поменять его на другой по причине множественности и размытости интерфейсов между слоями. Добавление новых функций и изменение сущест­вующих требует хорошего знания операционной системы и больших затрат вре­мени. В то же время ограниченный набор четко определенных интерфейсов микроядра открывает путь к упорядоченному росту и эволюции ОС. Добавление новой подсистемы требует разработки нового приложения, что никак не затраги­вает целостность микроядра. Микроядерная структура позволяет не только до­бавлять, но и сокращать число компонентов операционной системы, что также бывает очень полезно. Например, не всем пользователям нужны средства без­опасности или поддержки распределенных вычислений, а удаление их из тра­диционного ядра чаще всего невозможно. Обычно традиционные операционные системы позволяют динамически добавлять в ядро или удалять из ядра только драйверы внешних устройств — ввиду частых изменений в конфигурации под­ключенных к компьютеру внешних устройств подсистема ввода-вывода ядра до­пускает загрузку и выгрузку драйверов «на ходу», но для этого она разрабатыва­ется особым образом. При микроядерном подходе конфигурируемость ОС не вызывает никаких проблем и не требует особых мер — достаточно изменить файл с настройками начальной конфигурации системы или же остановить не нужные больше серверы в ходе работы обычными для остановки приложений средствами.
Использование микроядерной модели повышает надежность ОС. Каждый сер­вер выполняется в виде отдельного процесса в своей собственной области памя­ти и таким образом защищен от других серверов операционной системы, что не наблюдается в традиционной ОС, где все модули ядра могут влиять друг на дру­га. И если отдельный сервер терпит крах, то он может быть перезапущен без останова или повреждения остальных серверов ОС. Более того, поскольку серве­ры выполняются в пользовательском режиме, они не имеют непосредственного доступа к аппаратуре и не могут модифицировать память, в которой хранится и работает микроядро. Другим потенциальным источником повышения надеж­ности ОС является уменьшенный объем кода микроядра по сравнению с тради­ционным ядром — это снижает вероятность появления ошибок программиро­вания.
Модель с микроядром хорошо подходит для поддержки распределенных вычисле­ний, так как использует механизмы, аналогичные сетевым: взаимодействие кли­ентов и серверов путем обмена сообщениями. Серверы микроядерной ОС могут работать как на одном, так и на разных компьютерах. В этом случае при получе­нии сообщения от приложения микроядро может обработать его самостоятельно и передать локальному серверу или же переслать по сети микроядру, работаю­щему на другом компьютере. Переход к распределенной обработке требует минимальных изменений в работе операционной системы — просто локальный транспорт заменяется на сетевой.
Производительность. При классической организации ОС выполне­ние системного вызова сопровождается двумя переключениями режимов, а при микроядерной организации— четырьмя. Таким образом, операци­онная система на основе микроядра при прочих равных условиях всегда будет менее производительной, чем ОС с классическим ядром.

Серьезность этого недостатка хорошо иллюстрирует история развития Windows NT. В версиях 3.1 и 3.5 диспетчер окон, графическая библиотека и высокоуров­невые драйверы графических устройств входили в состав сервера пользователь­ского режима, и вызов функций этих модулей осуществлялся в соответствии с микроядерной схемой. Однако очень скоро разработчики Windows NT поняли, что такой механизм обращений к часто используемым функциям графического интерфейса существенно замедляет работу приложений и делает данную опера­ционную систему уязвимой в условиях острой конкуренции. В результате в вер­сию Windows NT 4.0 были внесены существенные изменения — все перечислен­ные выше модули были перенесены в ядро, что отдалило эту ОС от идеальной микроядерной архитектуры, но зато резко повысило ее производительность.
Этот пример иллюстрирует главную проблему, с которой сталкиваются разра­ботчики операционной системы, решившие применить микроядерный подход, — что включать в микроядро, а что выносить в пользовательское пространство. В идеальном случае микроядро может состоять только из средств передачи сооб­щений, средств взаимодействия с аппаратурой, в том числе средств доступа к ме­ханизмам привилегированной защиты. Однако многие разработчики не всегда жестко придерживаются принципа минимизации функций ядра, часто жертвуя этим ради повышения производительности. В результате реализации ОС обра­зуют некоторый спектр, на одном краю которого находятся системы с минималь­но возможным микроядром, а на другом — системы, подобные Windows NT, в которых микроядро выполняет достаточно большой объем функций.

Заключение о перспективах микроядерных ОС

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