Отдельные характерные особенности операционных систем

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

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

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

FreeDOS

Свободная система FreeDOS берет свое начало как попытка воссоздать интерфейсы машинного программирования (англ. application binary interface, далее: ABI) собственнической (англ. proprietary) системы MS-DOS, о завершении продаж и поддержки которой было объявлено в  г. Первый выпуск системы состоялся в  г. Одной из целей проекта является обеспечение возможности запуска большинства программ для MS-DOS без какого-либо их изменения.

Система MS-DOS, в свою очередь, возникла ( г.) как попытка создать на 16-битных аппаратных платформах на основе процессоров Intel 8086 (8088) окружение, подобное (включая и интерфейсы прикладного программирования, англ. application programming interface, далее: API) реализуемому крайне популярной в 70-х гг. (и используемой во встраиваемых, англ. embedded, решениях вплоть до начала XXI в.) системой CP/M. Предполагалось, что существенная часть уже существующих для CP/M приложений будет без особых сложностей перенесена на новую систему.

Разработанная исходно для MS-DOS файловая система FAT нашла широкое применение в бытовых вычислительных устройствах (в частности, аудио- и видеотехнике) и была стандартизована как Ecma 107.

В настоящее время система представляет интерес с точки зрения изучения внутреннего устройства операционных систем (благодаря своей простоте), чему способствует в том числе и возможность запуска системы на крайне простых аппаратных платформах или моделях оных (как, например, 8086tiny.) FreeDOS может быть полезна интересующимся историей операционных систем, а равно разработчикам встраиваемых решений (хотя автору не известны современные аппаратные платформы, совместимые с FreeDOS.) Подобные соображения справедливы и для свободной с  г. CP/M.

Пример: загрузка FreeDOS.
SYSLINUX 6.04 20190226 Copyright (C) 1994-2015 H. Peter Anvin et al
boot: freedos 
Booting...
FreeDOS kernel 2042 (build 2042 OEM:0xfd) [compiled May 11 2016]
Kernel compatibility 7.10 - WATCOMC - FAT32 support

(C) Copyright 1995-2012 Pasquale J. Villani and The FreeDOS Project.
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the       GNU General Public License as published by the Free Software Foundation;        either version 2, or (at your option) any later version.                         - InitDiskWARNING: using suspect partition Pri:1 FS 06: with calculated values    0-32-33 instead of 1023-254-63
WARNING: using suspect partition Pri:1 FS 06: with calculated values   65-69-4 instead of 1023-254-63
C: HD1, Pri[ 1], CHS=    0-32-33, start=     1 MB, size=   511 MB
 1 FreeDOS without drivers
 2 FreeDOS + HIMEMX
 3 FreeDOS + JEMMEX NOEMS X=TEST
 4 FreeDOS + JEMMEX + CTTY COM1
Select from Menu [01234], or press [ENTER]- 7 - Singlestepping (F8) is: OFF
JemmEx v5.79 [02/02/20]
JemmEx loaded
Kernel: allocated 45 Diskbuffers = 23940 Bytes in HMA

FreeCom version 0.84-pre2 XMS_Swap [Aug 28 2006 00:29:00]

C:\>UPTIME -r
Uptime counter reseted to zero.
C:\>PROMPT $P$G 
C:\> LH FDAPM APMDOS
Performing action: APMDOS
If APMDOS slows down any app, use ADV:REG instead.
Going resident.
C:\> IF EXIST IMAGE.ISO LH SHSUCDHD /F:IMAGE.ISO
C:\> SET PATH=C:\FDOS\BIN;C:\MISC\BIN
C:\> 
Пример: информация об использовании памяти FreeDOS. Помимо собственно программы MEM, в память загружены командный интерпретатор COMMAND, программа управления энергопотреблением FDAPM и пакетный драйвер адаптера Ethernet RTSPKT.
C:\> MEM /full 
Segment        Total           Name           Type
-------  ----------------  ------------  -------------
  0000      1,024    (1K)                interrupt vector table
  0040        768    (1K)                BIOS data area
  0070      8,416    (8K)  IO            system data
  027e      4,112    (4K)  DOS           system data
  0280        192    (0K)    FILES       FILES=16 (3 in this block)
  028d        480    (0K)    FILES       FILES=16 (8 in this block)
  02ac      1,328    (1K)    LASTDRV     LASTDRIVE=O
  0300      2,048    (2K)    STACKS      data area
  0380        272    (0K)  MEM           environment
  0392     55,248   (54K)  MEM           program
  1110    584,416  (571K)                free
  9fc0    185,840  (181K)                reserved
  cd1f        112    (0K)                free
  cd27      3,008    (3K)  COMMAND       program
  cde4        144    (0K)                free
  cdee        912    (1K)  FDAPM         program
  ce28        192    (0K)                free
  ce35     26,144   (26K)  RTSPKT        program
  d498     75,360   (74K)                free
  e6ff      4,096    (4K)  COMMAND       environment

Memory Type         Total      Used       Free
----------------  --------   --------   --------
Conventional          639K        14K       625K
Upper                 108K        34K        74K
Reserved              277K       277K         0K
Extended (XMS)    260,992K       436K   260,556K
----------------  --------   --------   --------
Total memory      262,016K       761K   261,255K

Total under 1 MB      747K        48K       699K

Total Expanded (EMS)                8,576K (8,781,824 bytes)
Free Expanded (EMS)                 8,192K (8,388,608 bytes)

Largest executable program size       625K (639,680 bytes)
Largest free upper memory block        74K ( 75,376 bytes)
FreeDOS is resident in the high memory area.
C:\> 

Contiki

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

В отличие от FreeDOS, система поддерживает современные архитектуры (включая ARM и, в первом варианте, AVR), а равно кооперативную многозадачность (т. е. требует от разработчика явного указания в исходном коде точек, в которых управление будет передано планировщику для передачи другим готовым к выполнению задачам или, в отсутствие таковых, перевода процессора в режим ожидания события — «сна».)

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

NetBSD

Система NetBSD является потомком собственнической AT&T Unix, лицензии на которую компания-собственник предоставляла университетам на льготных условиях, что и обусловило ее широкое распространение (включая вариант Berkley Software Distribution, BSD, в то время разрабатываемый в университете Калифорнии в Беркли) в образовательной среде.

Изначально данное семейство систем предполагало использование миникомпьютеров (как, например, DEC PDP-11), однако появление в  г. 32-битного процессора Intel 80386, обратно совместимого со ставшими популярными в персональных компьютерах 8086 (8088) и 80286, а равно обладающими исходно предполагаемыми BSD аппаратными функциями управления доступом к устройствам и памяти (блока англ. input-output and memory management unit, далее IOMMU), сделало актуальным перенос системы на появившиеся к началу 90-х персональные компьютеры с данным процессором. Первый вариант такой системы, 386BSD, вышел в  г. Разногласия между разработчиками привели к появлению в  г. самостоятельных проектов NetBSD и FreeBSD. В свою очередь разногласия между разработчиками NetBSD в дальнейшем привели к ответвлению проекта OpenBSD; FreeBSD была взята за основу при разработке Darwin (и, следовательно, macOS.)

Распространение Unix-подобных систем, разрабатываемых различными коллективами, сделало необходимым выработку общих принципов, терминологии и интерфейсов, что привело к выходу в  г. стандарта IEEE Std 1003.1 «POSIX.1» (он же ИСО/МЭК 9945.) Копию версии  г. стандарта можно найти во Всемирной паутине: http://pubs.opengroup.org/onlinepubs/9699919799/. NetBSD частично совместима с этим стандартом, а значит приложения, разработанные в рамках данного стандарта, как правило несложно пересобрать под эту систему.

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

NetBSD представляет интерес поддержкой с версии 5.0 ( г.) остаточного ядра (англ. rump kernel), позволяющей, с одной стороны, собирать включенные в ядро драйвера для выполнения в пользовательском пространстве (англ. user space; т. е., как обычные процессы, или компоненты таковых, что полезно при отладке; а равно позволяет увеличить надежность системы, потеряв, возможно, в производительности), так и собирать пользовательские программы для выполнения в контексте ядра (англ. kernel space; другими словами, превратить отдельную программу в монолитную систему, т. н. англ. unikernel, что может позволить добиться большей производительности и меньших требований к ресурсам.)

Xen

Гипервизор Xen (читается: «дзен»), строго говоря, едва ли может быть назван операционной системой. Тем не менее, его роль в чем-то подобна роли ядра системы; однако под его управлением работают не приложения, но ядра и системы. Так, в частности, Xen не позволяет выполняемым параллельно на данной машине различным системам обращаться к памяти друг-друга, а равно предотвращает попытку управления одним устройством из различных систем.

Появлению Xen ( г.) способствовало наблюдение, что многие современные системы используют не более двух колец защиты (англ. protection ring; имеющее наибольшие привилегии кольцо 0 реализует контекст ядра; наименьшие — контекст пользователя) из четырех реализуемых процессором Intel 80386 и следующими за ним. В режиме паравиртуализации, Xen выполняется в кольце 0, ядро же должно быть адаптировано для выполнения в кольце 1 (приложения адаптации не требуют.) В режиме аппаратной виртуализации, от процессора требуется поддержка «кольца −1», в котором выполняется гипервизор; адаптация ядра в этом случае не требуется.

Управление Xen само по себе выполняется достаточно сложными приложениями, требующими некоторой операционной системы, называемой в этом контексте привилегированным доменом (англ. dom0; в противоположность пользовательскому домену, англ. domU.) Такой системой может быть, в частности, рассмотренная выше NetBSD, поддерживающая Xen начиная с версии 3.0 ( г.)

GNU/Hurd

было объявлено о начале проекта GNU разработки полностью свободной Unix-подобной системы, включающей средства разработки (компиляторы, компоновщики, ассемблеры, etc.), редакторы, программы обработки текстов, и, в перспективе, любые иные средства, которые могут быть полезны пользователю.

К началу 90-х система в целом обрела форму, но была лишена одного из ключевых элементов — собственного ядра. (Т. е. существовала в виде набора различных программных пакетов, предназначенных для использования на различных Unix-подобных системах.)

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

В  г. в университете Карнеги — Меллона была начата разработка микроядра Mach на основе ядра системы 4.2BSD. Разработка завершилась выходом в  г. версии 3.0, в которой, по мнению разработчиков, концепция микроядра была реализована в полной мере.

было объявлено о начале разработки на основе микроядра Mach ядра GNU Hurd. (Под ядром в данном случае понимается набор выполняемых в непривилегированном контексте пользователя программ, реализующих функции, которые в Unix-подобных системах традиционно реализуются в привилигерованном контексте ядра.)

Разработка Mach продолжалась в университете Юты до версии 4; начиная с  г. микроядро разрабатывается в рамках проекта GNU (как GNU Mach.)

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

GNU/Linux

Параллельно с началом разработки GNU Hurd в  г. выходит ядро Linux. Разработка данного ядра, а равно перенос компонент системы GNU на него, привлек интерес куда как большего количества программистов, нежели разработка микроядра GNU Mach и ядра GNU Hurd, что обусловило быстрое развитие и распространение систем, использующих компоненты GNU и ядро Linux, и называемых GNU/Linux.

Семейство систем GNU/Linux представляет значительный интерес с практической точки зрения; система широко используется как платформа для «серверных» приложений; распространена и на «настольных» компьютерах. Ядро Linux само по себе достаточно распространено и, в частности, во встраиваемых системах; вместо компонент GNU в этом случае нередко применяются альтернативы, как, например, Busybox и Musl. Тем не менее, сложность внутреннего устройства и высокая скорость разработки именно ядра Linux значительно ограничивают возможность использования его в исследовательских или учебных целях.

Обратная связь

Связаться с автором можно через канал #sdf на IRC-сервере irc.sdf.org, или по электронной почте, ivan at siamics dot net.