
- •Введение
- •1 Архитектура ядра Linux
- •1.1 Интерфейс системных вызовов
- •1.2 Управление процессами
- •1.3 Управление памятью
- •1.4 Виртуальная файловая система
- •1.5 Драйверы устройств
- •1.6 Архитектурно-зависимый код
- •2 Архитектура ядра FreeBsd
- •2.1 Службы ядра
- •2.2 Управление процессами
- •2.3 Управление памятью
- •2.4 Виртуальная файловая система
- •3 Архитектура ядра hurd
- •4 Сравнение архитектур
- •Заключение
- •Список использованных источников
2.4 Виртуальная файловая система
Для облегчения поддержки нескольких файловых систем разработчики добавили в ядро интерфейс виртуальных узлов файловой системы, или интерфейс «vnode». Набор операций, экспортируемых через интерфейс «vnode», похож на операции файловой системы, ранее поддерживаемые локальной файловой системой. Однако они могут поддерживаться широким спектром типов файловых систем:
Локальные файловые системы, использующие диск;
Файлы, импортируемые при помощи разнообразных протоколов удаленных файловых систем;
Файловые системы CD-ROM, доступные только для чтения;
Файловые системы, предоставляющие специализированные.
Некоторые варианты BSD позволяют выполнять динамическую загрузку файловых систем при первом обращении к ним при помощи системного вызова «mount».
3 Архитектура ядра hurd
GNU Hurd — проект по созданию ядра операционной системы как замены ядру UNIX для операционной системы GNU. Разработка Hurd ведётся с 1990 года, но пока проект ещё далек от завершения.
Hurd построен на микроядерной архитектуре. Оно представляет собой набор небольших, автономно работающих программ — серверов, которые обмениваются между собой и программами пользователя формализованными сообщениями. Основа Hurd — микроядро GNU Mach, реализация Mach — обеспечивает только взаимодействие этих программ между собой.
Особый класс серверов — трансляторы — обеспечивают возможность работы с файловыми системами, сетевыми протоколами, контролируют доступ к файлам. Также устройство файловой системы Hurd обладает некоторыми особенностями, которые отличают GNU/Hurd от других операционных систем.
Развязка компонентов операционной системы позволяет модулизировать функции, обычно присущие монолитному ядру, и, таким образом, не только повысить надёжность операционной системы, но и упростить распараллеливание задач.
Микроядро Mach было разработано в качестве основы, на базе которой можно эмулировать UNIX и другие ОС. Эта эмуляция осуществляется программным уровнем, который работает вне ядра, в пользовательском пространстве (рис. 3). Следует отметить, что несколько эмуляторов могут работать одновременно, так что можно выполнять программы 4.3BSD, System V и MS-DOS на одной машине в одно и то же время.
Рисунок 3 – Модель эмуляции на основе Mach
Ядро Mach, подобно другим микроядрам, обеспечивает управление процессами, управление памятью, коммуникации и функции ввода-вывода. Ядро управляет пятью главными абстракциями: процессы, нити, объекты памяти, порты, сообщения. Функции управления файлами, каталогами и другие традиционные для операционных систем функции выполняются в пользовательском пространстве. Идея построения ядра Mach состоит в обеспечении механизмов, необходимых для работы системы, но стратегия использования этих механизмов реализуется на уровне пользовательских процессов.
Концепцией, уникальной для Mach, является введение понятия объект памяти (memory object), представляющий собой структуру данных, которая может быть отображена в адресное пространство процесса. Объекты памяти занимают одну или несколько страниц и образуют основу для системы управления виртуальной памятью Mach. Когда процесс ссылается на объект памяти, который не представлен в физической памяти, это вызывает страничное прерывание. Как и в других ОС, ядро перехватывает страничное прерывание. Однако в отличие от других систем, ядро Mach для загрузки отсутствующей страницы посылает сообщение серверу пользовательского режима, а не самостоятельно выполняет эту операцию.
В микроядре Machиспользуется межпроцессное взаимодействие (IPC) — похожий на конвейеры принцип организации взаимодействия процессов, позволяющий перемещать любую файлоподобную информацию между двумя программами. Mach сделан системой, больше похожей на Unix, которая позволяет запускать Unix-программы с минимальными изменениями или вовсе без них. Для достижения этой цели в Mach существует концепция «порта», представляющего конец в двухстороннем IPC. Порты защищены и имеют права, подобные правам доступа на файлы в Unix, а также используют очень похожую на Unix модель защиты. Дополнительно Mach разрешает любой программе владеть привилегиями, которыми обычно владеет только ядро, позволяя непривилегированному уровню (user-space) обращаться к аппаратному обеспечению.
В Mach, как в Unix, ОС опять стала главным образом набором утилит. Как и Unix, в Mach есть концепция "драйвера" как посредника между собственно ядром и аппаратным обеспечением. Однако все драйверы для существующего аппаратного обеспечения должны быть включены в микроядро.
Главным отличием от Unix является то, что утилиты должны работать не с файлами, а с задачами. Больше кода перемещено из ядра в непривилегированный режим. Ядро за счёт этого становится существенно меньше, отсюда термин микроядро для обозначения ядра Mach. В отличие от традиционных систем, под Mach процесс (или «задача») может состоять из набора потоков. Задачи ядра сведены к работе с оборудованием и поддержке утилит.
Существование портов и использование IPC определяет большинство различие между Mach и традиционными ядрами. В Unix для обращения к ядру используются «системные вызовы» или «сигнал». Программа использует библиотеку, чтобы разместить данные в известном месте в памяти, и затем вызывает специальное программное прерывание. Когда система впервые запускает ядро, она устанавливает обработчик этого прерывания, поэтому программа, порождающая прерывание, вызывает ядро, которое исследует пришедшую информацию и совершает действия. В Mach для этой цели используется IPC. Программа запрашивает у ядра доступ к порту, а затем использует механизм IPC для посылки сообщений в порт. В других ядрах эти сообщения обрабатываются системными вызовами; в Mach практически все запросы обрабатываются другой программой.
Система IPC имеет проблемы с производительностью, для преодоления которых было разработано несколько стратегий. В частности, Mach использует единый механизм разделения памяти для физической передачи сообщений от одной программы к другой. Физически копирования сообщения будет медленным, поэтому Mach обращается к блоку управления памятью (MMU) для быстрого соотнесения данных в одной программе и в другой. Только если данные записываются они будут физически скопированы, процесс называющийся копирование-при-записи (copy-on-write; cow).
Сообщения также проверяются на целостность ядром, чтобы избежать плохих данных, которые выведут из строя одну из программ, составляющих систему. Порты были разработаны на основе файловой системы Unix. Это позволило портам использовать существующие концепции навигации по файловой системе, а также права доступа.
По сравнению с более традиционными ОС разработка такой системы становится проще. Большая часть системы может быть запущена, отлажена и создана с помощью тех же утилит, что и программы для традиционной системы. С монолитным ядром ошибка в коде требует выключения целой машины и перезагрузки, в то время как в Mach требуется только перезапуск программы. Дополнительно пользователь может указывать системе включить или выключить возможности по своему желанию. Так как ОС — это коллекция программ, разработчики могут добавлять или удалять её части, просто запуская или убивая их, как и любую другую программу.