GNU/Hurd — красивая архитектура операционной системы

Мельников Александр Владимирович

Основная идея этой работы — привлечь внимание к операционной системе GNU/Hurd. Рассматривается архитектура операционной системы GNU/Hurd и приводятся описания ключевых понятий этой операционной системы.

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

Операционная система GNU/Hurd, разрабатываемая Проектом GNU, — одна из немногих операционных систем, которая изначально проектируется не просто как микроядерная, а ещё и мультисерверная система. Вся функциональность системы разбита на отдельные модули (сервера), каждый из которых реализует свою задачу и которые взаимодействуют друг с другом с помощью чётко определённых интерфейсов.

В качестве ядра в операционной системе используется микроядро GNU/Mach[6]. Оно разработано в Carnegie-Mellon University (CMU) для проектов, связанных с разработками операционных систем и параллельными вычислениями. Это одно из первых разработанных микроядер, и довольно широко используемое во многих операционных системах (GNU/Hurd, MacOS X, NetBSD, MkLinux, Windows NT). Несмотря на то, что микроядро довольно старое, оно предоставляет все необходимые базовые понятия, использующиеся в современных ОС[8]:

В Mach подсистема IPC является очень важной частью инфраструктуры ядра, в отличие от большинства существовавших и существующих реализаций в различных операционных системах, где IPC является одним из средств, предоставляемых ядром [9–11]. В Mach всё есть порт! В качестве примера можно привести следующее. Программе необходимо произвести управление работой потока, для этого программа получает дескриптор необходимого потока и передаёт его в качестве аргумента в процедуру, осуществляющую управляющие действия. В данном случае дескриптор потока — это дескриптор порта (имя порта в терминологии Mach), который связан с управляемым потоком. Но на этом область распространения IPC в ядре Mach не заканчивается, почти все системные вызовы ядра реализованы через подсистему IPC. Данный подход предоставляет довольно гибкую архитектуру системы, но, как это всегда бывает в таких случаях, является довольно узким местом в производительности системы.

Существует ряд операционных систем, построенных на микроядре Mach, но у них существует тот же недостаток, что и в монолитных ядрах — эти операционные системы реализованы в одном процессе, работающем поверх ядра. Этот процесс предоставляет ту же функциональность, что и монолитное ядро. Подобные операционные системы называются односерверными (single-server system). ОС GNU/Hurd является мультисерверной системой работающей поверх микроядра Mach [1,5]. В ней существует много различных серверных приложений, каждое реализует определённую функциональность, предоставляемую операционной системой. Эти серверные приложения работают в качестве задачи микроядра Mach, и взаимодействуют друг с другом и с другими приложениями, используя механизм IPC, предоставляемый микроядром Mach. Каждый из этих серверов реализует только маленькую часть всей функциональности операционной системы, но все вместе они создают полнофункциональную POSIX-совместимую операционную систему (интерфейс микроядра Mach не является POSIX-совместимым).

Одним из интересных механизмов реализованных в ОС GNU/Hurd является механизм трансляторов [2–4,5]. Это нечто вроде программы-фильтра, ассоциированной с некоторым файлом и исполняемой всякий раз при манипуляциях с файлом. Транслятор имеет доступ к реальному содержимому файла и может обрабатывать его некоторым образом перед тем, как данные попадут в программу.

Механизм трансляторов может использоваться не только как фильтр для содержимого файла. Установленный транслятор может выглядеть как часть файловой системы, т. е. предоставлять иерархический доступ к данным. Именно эта возможность и используется для подключения разделов дисков и прочих накопителей (как реальных устройств, так и сетевых ресурсов, таких как nfs, ftp, http и прочее). Т. е. вся файловая система GNU/Hurd является совокупностью установленных трансляторов.

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

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

Архитектура операционной системы GNU/Hurd отвечает современным требованиям. Работает на базе микроядра, которое проще адаптировать к различным аппаратным платформам. Она модульная, что обеспечивает устойчивость работы и гибкость, систему можно адаптировать под конкретные цели. Она действительно обладает красивой архитектурой! ;-)

Литература

  1. Bushnell T. Towards a New Strategy of OS Design//The GNU Bulletin, January 1994.
  2. Bushnell T., Matzigkeit G. The GNU Hurd Reference Manual.
  3. Bushnell T. The GNU Hurd Interface Manual.
  4. Jahrling W. Hurd Hacking Guide//http://www.gnu.org/software/hurd/hacking-guide/hhg.html.
  5. Brinkmann M. Talk about the Hurd//http://www.gnu.org/software/hurd/hurd-talk.html.
  6. Accetta, M., Baron, R., Golub, D., Rashid, R., Tevanian, A., and Young, M. Mach: A New Kernel Foundation for Unix Development//Proc. Summer 1986 USENIX Conf., USENIX, стр. 93-112, 1986.
  7. Cooper E., Draves R. C Threads//Technical Report CMU-CS-88-154, Carnegie Mellon University, February 1988
  8. Loepere K. Mach 3 Kernel Principles//Open Software Foundation and Carnegie Mellon University, NORMA-MK12: July 15, 1992.
  9. Brinkmann M., Matzigkeit G., Hasnaoui G., Baron R., Draves R., Thompson M., Barrera J. The GNU Mach Reference Manual, ed. 0.4 for version 1.2.
  10. Loepere K. Mach 3 Kernel Interfaces//Open Software Foundation and Carnegie Mellon University, NORMA-MK12: July 15, 1992.
  11. Loepere K. Mach 3 Server Writers Guide//Open Software Foundation and Carnegie Mellon University, NORMA-MK12, user15: July 15, 1992.
  12. Loepere K. Mach 3 Server Writers Interfaces//Open Software Foundation and Carnegie Mellon University, NORMA-MK12, user15: July 15, 1992.