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

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

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

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

FreeDOS

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

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

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

Система не предполагает использования функций аппаратного управления доступа к устройствам и памяти (блока англ. input-output and memory management unit, далее IOMMU), а значит не предоставляет и соответствующих функций выполняемым под ее управлением программам. (Так, например, любая программа может — вследствие ошибки или намеренно — обращаться к областям памяти, выделенным любой другой программе.) На практике, программы для данного семейства систем зачастую обращаются к устройствам (включая видеоподсистему, клавиатуру, реже — накопители и файловые системы) «напрямую», минуя системные функции.

Функции переключения между задачами (англ. task switching) также не предусмотрены (ни добровольного, ни принудительного.)

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

Пример: загрузка FreeDOS.
SYSLINUX 6.04 20190226 Copyright (C) 1994-2015 H. Peter Anvin et al
boot: freedos 
Booting...


JemmEx loaded
Kernel: allocated 45 Diskbuffers = 23940 Bytes in HMA

C: HD1, Pri[ 1], CHS=    0-32-33, start=

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.
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, система поддерживает простые аппаратные платформы и не требует наличия IOMMU. Из отличий можно отметить поддержку современных архитектур (включая ARM и, в первом варианте, AVR) а равно наличие поддержки кооперативной многозадачности (т. е. требует от разработчика явного указания в исходном коде точек, в которых управление будет передано планировщику для передачи другим готовым к выполнению задачам или, в отсутствие таковых, перевода процессора в режим ожидания события — «сна».)

NetBSD

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

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

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

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

GNU/Hurd

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

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

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