Введение

Операционная система (OS) – это системное программное обеспечение, которое управляет аппаратными и программными ресурсами компьютера и предоставляет общие службы для компьютерных программ. Операционные системы с разделением времени планируют задачи для эффективного использования системы и могут также включать в себя программное обеспечение для учета и распределения затрат на процессорное время, накопители, периферийные устройства и другие ресурсы. Для аппаратных функций, таких как ввод-вывод и распределение памяти, операционная система выступает посредником между программами и компьютерным оборудованием, хотя код приложения обычно выполняется непосредственно аппаратным обеспечением и часто делает системные вызовы к функциям ОС или прерывается ими. Операционные системы используются во множестве устройств, содержащих компьютер – от мобильных телефонов и игровых консолей до веб-серверов и суперкомпьютеров. На рынке персональных компьютеров, по состоянию на 2023 год, Microsoft Windows занимает доминирующую долю рынка, составляющую около 68%. macOS от Apple Inc. занимает второе место (20%), а различные дистрибутивы Linux, включая ChromeOS, занимают третье место (7%). В мобильном секторе (включая смартфоны и планшеты), по состоянию на 2023 год, доля Android составляет 68,92%, за ней следуют iOS и iPadOS от Apple с 30,42%, а другие операционные системы – с 0,66%. Дистрибутивы Linux доминируют в серверном и суперкомпьютерном секторах. Существуют также другие специализированные классы операционных систем (операционные системы специального назначения), такие как встроенные системы и системы реального времени, для множества приложений. Существуют также операционные системы, ориентированные на безопасность. Некоторые операционные системы имеют низкие системные требования (например, легковесные дистрибутивы Linux). Другие могут иметь более высокие системные требования. Некоторые операционные системы требуют установки или могут быть предустановлены на приобретаемых компьютерах (OEM-установка), в то время как другие могут запускаться непосредственно с носителей (например, с загрузочного CD) или флеш-памяти (например, с USB-накопителя).

Однозадачность и многозадачность

Одиночная система задач может выполнять только одну программу за раз, в то время как многозадачная операционная система позволяет одновременно выполнять несколько программ. Это достигается за счет разделения времени, когда доступное время процессора распределяется между множеством процессов. Эти процессы поочередно прерываются подсистемой планирования задач операционной системы на временные интервалы. Многозадачность может быть прерывистой и кооперативной. В прерывистой многозадачности операционная система разделяет время процессора и выделяет временной слот каждой программе. Unix-подобные операционные системы, такие как Linux, а также не-Unix-подобные, такие как AmigaOS, поддерживают прерывистую многозадачность. Кооперативная многозадачность достигается за счет того, что каждый процесс предоставляет время другим процессам в определенном порядке. 16-битные версии Microsoft Windows использовали кооперативную многозадачность; 32-битные версии Windows NT и Win9x использовали прерывистую многозадачность.

Одно и многопользовательское

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

Распространен

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

Встроенные

Встроенные операционные системы разработаны для использования во встраиваемых компьютерных системах. Они предназначены для работы на маломощных устройствах с ограниченной автономностью (например, КПК). Они отличаются компактностью и высокой эффективностью и способны функционировать при ограниченных ресурсах. Windows CE и Minix 3 – примеры встроенных операционных систем.

В реальном времени

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

Библиотека

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

История

Ранние компьютеры создавались для выполнения ряда отдельных задач, как калькулятор. Основные функции операционной системы были разработаны в 1950-х годах, такие как функции резидентного монитора, которые могли автоматически запускать различные программы последовательно для ускорения обработки. Операционные системы не существовали в их современных и более сложных формах до начала 1960-х годов. Были добавлены аппаратные средства, обеспечивающие использование библиотек времени выполнения, прерываний и параллельной обработки. Когда персональные компьютеры стали популярными в 1980-х годах, для них были созданы операционные системы, концептуально схожие с теми, что использовались на больших компьютерах. В 1940-х годах самые ранние электронные цифровые системы не имели операционных систем. Электронные системы того времени программировались с помощью рядов механических переключателей или перемычек на платах соединений. Это были специализированные системы, которые, например, генерировали баллистические таблицы для военных или управляли печатью платежных ведомостей на основе данных с перфокарт. После изобретения программируемых компьютеров общего назначения были введены машинные языки (состоящие из строк двоичных цифр 0 и 1 на перфоленте), что ускорило процесс программирования (Stern, 1981). В начале 1950-х годов компьютер мог выполнять только одну программу за раз. Каждый пользователь имел эксклюзивный доступ к компьютеру на ограниченный период времени и приходил в назначенное время со своей программой и данными на перфокартах или перфоленте. Программа загружалась в машину, и машина работала до завершения программы или сбоя. Отладка программ обычно осуществлялась через переднюю панель с помощью переключателей и индикаторов. Говорят, что Алан Тьюринг был мастером этого на ранней машине Manchester Mark 1, и он уже выводил примитивную концепцию операционной системы из принципов универсальной машины Тьюринга. Одним из наиболее известных примеров, часто упоминаемых в обсуждениях ранних систем, является Atlas Supervisor, работавший на Atlas в 1962 году. Он был назван так в статье, описывающей систему, в декабре 1961 года, но контекст "Операционной системы" скорее описывает то, *как* система работает. Сама команда Atlas использовала термин "супервизор", который широко использовался наряду с "монитором". Бринч Хансен описал его как "самый значительный прорыв в истории операционных систем".

Микрокомпьютеры

Первые микрокомпьютеры не обладали возможностями или потребностью в сложных операционных системах, разработанных для мейнфреймов и миникомпьютеров; были разработаны минималистичные операционные системы, часто загружаемые из ПЗУ и известные как мониторы. Одной из первых дисковых операционных систем была CP/M, которая поддерживалась многими ранними микрокомпьютерами и послужила образцом для MS-DOS от Microsoft, ставшей широко популярной операционной системой для IBM PC (версия IBM называлась IBM DOS или PC DOS). В 1980-х годах Apple Computer Inc. (ныне Apple Inc.) представила Apple Macintosh вместе с популярной серией микрокомпьютеров Apple II. Macintosh обладал инновационным графическим пользовательским интерфейсом (GUI) и мышью; он работал под управлением операционной системы, позже известной как (классическая) Mac OS. Появление процессора Intel 80386 в октябре 1985 года с 32-битной архитектурой и поддержкой страничной организации памяти предоставило персональным компьютерам возможность запускать многозадачные операционные системы, подобные тем, что использовались в более ранних суперминикомпьютерах и мейнфреймах. Microsoft отреагировала на этот прогресс, наняв Дэйва Катлера, который разработал операционную систему VMS для Digital Equipment Corporation. Он возглавил разработку операционной системы Windows NT, которая продолжает служить основой для линейки операционных систем Microsoft. Стив Джобс, соучредитель Apple Inc., основал NeXT Computer Inc., разработавшую операционную систему NeXTSTEP. NeXTSTEP позже была приобретена Apple Inc. и использовалась вместе с кодом FreeBSD в качестве ядра Mac OS X (macOS после последнего переименования). Проект GNU был начат активистом и программистом Ричардом Столлманом с целью создания полной замены проприетарной операционной системе UNIX на основе свободного программного обеспечения. Проект добился значительных успехов в воспроизведении функциональности различных частей UNIX, однако разработка ядра GNU Hurd оказалась бесплодной. В 1991 году финский студент-компьютерщик Линус Торвальдс, при поддержке волонтеров, сотрудничавших через Интернет, выпустил первую версию ядра Linux. Вскоре оно было объединено с компонентами пользовательского пространства GNU и системным программным обеспечением, сформировав полноценную операционную систему. С тех пор комбинация этих двух основных компонентов обычно называется просто "Linux" в индустрии программного обеспечения, однако Столлман и Фонд свободного программного обеспечения по-прежнему выступают против этого, предпочитая название GNU/Linux. Berkeley Software Distribution, известная как BSD, — это производная от UNIX, распространяемая Калифорнийским университетом в Беркли, начиная с 1970-х годов. Свободно распространяемая и портированная на многие миникомпьютеры, она в конечном итоге также завоевала популярность для использования на ПК, в основном в виде FreeBSD, NetBSD и OpenBSD.

Операционные системы Unix и Unix-подобные

Unix изначально был написан на языке ассемблера. Кен Томпсон разработал язык B, главным образом на основе BCPL, опираясь на свой опыт работы над проектом MULTICS. Язык B был заменен языком C, а Unix, переписанный на C, превратился в большое и сложное семейство взаимосвязанных операционных систем, оказавших влияние на все современные операционные системы (см. История). Семейство Unix-подобных систем – это разнообразная группа операционных систем, включающая несколько основных подкатегорий, таких как System V, BSD и Linux. Название "UNIX" является товарным знаком The Open Group, который лицензирует его для использования любой операционной системой, соответствующей их определениям. Термин "Unix-подобные" обычно используется для обозначения большого числа операционных систем, похожих на оригинальный UNIX. Unix-подобные системы работают на широком спектре компьютерных архитектур. Они широко используются для серверов в бизнесе, а также для рабочих станций в академической и инженерной среде. Бесплатные варианты UNIX, такие как Linux и BSD, популярны в этих областях. Пять операционных систем сертифицированы The Open Group (владельцем товарного знака Unix) как Unix. HP-UX от HP и AIX от IBM являются потомками оригинальной System V Unix и предназначены для работы только на аппаратном обеспечении соответствующих производителей. В отличие от них, Solaris от Sun Microsystems может работать на различных типах оборудования, включая серверы x86 и SPARC, а также на персональных компьютерах. Apple macOS, заменяющая более раннюю (не-Unix) классическую Mac OS, представляет собой гибридное ядро, основанное на BSD-варианте, производном от NeXTSTEP, Mach и FreeBSD. IBM z/OS UNIX System Services включает в себя оболочку и утилиты, основанные на продуктах Mortice Kerns InterOpen. Для обеспечения совместимости Unix был разработан стандарт POSIX. Стандарт POSIX может быть применен к любой операционной системе, хотя изначально он был создан для различных вариантов Unix.

BSD и его потомки

Подгруппой семейства Unix является семейство Berkeley Software Distribution, которое включает FreeBSD, NetBSD и OpenBSD. Эти операционные системы чаще всего встречаются на веб-серверах, хотя они также могут функционировать как ОС персональных компьютеров. Интернет во многом обязан своим существованием BSD, поскольку многие протоколы, которые сейчас обычно используются компьютерами для подключения, отправки и приема данных по сети, были широко реализованы и усовершенствованы в BSD. Всемирная паутина также была впервые продемонстрирована на ряде компьютеров, работающих на ОС на основе BSD под названием NeXTSTEP. В 1974 году Калифорнийский университет в Беркли установил свою первую систему Unix. Со временем студенты и сотрудники факультета компьютерных наук начали добавлять новые программы для упрощения работы, например, текстовые редакторы. Когда в 1978 году в Беркли появились новые компьютеры VAX с установленной Unix, студенты университета еще больше модифицировали Unix, чтобы воспользоваться аппаратными возможностями этих компьютеров. Агентство передовых исследовательских проектов Министерства обороны США проявило интерес и решило профинансировать проект. Многие учебные заведения, корпорации и государственные организации обратили внимание и начали использовать версию Unix, разработанную в Беркли, вместо официальной версии, распространяемой AT&T. Стив Джобс, покинув Apple Inc. в 1985 году, основал NeXT Inc., компанию, которая производила высокопроизводительные компьютеры, работающие на варианте BSD под названием NeXTSTEP. Один из этих компьютеров был использован Тимом Бернерсом-Ли в качестве первого веб-сервера для создания Всемирной паутины. Разработчики, такие как Кит Бостик, поддерживали замену любого несвободного кода, разработанного в Bell Labs. Однако, после завершения этой работы, AT&T подала в суд. После двух лет судебных разбирательств проект BSD породил ряд свободных производных, таких как NetBSD и FreeBSD (оба в 1993 году) и OpenBSD (на основе NetBSD в 1995 году).

macOS

macOS (ранее "Mac OS X" и позже "OS X") — это линейка графических операционных систем с открытым ядром, разработанных, распространяемых и продаваемых компанией Apple Inc., последняя версия которой предустановлена на все поставляемые в настоящее время компьютеры Macintosh. macOS является преемником оригинальной классической Mac OS, которая была основной операционной системой Apple с 1984 года. В отличие от предшественницы, macOS — это UNIX-совместимая операционная система, построенная на технологиях, разработанных в NeXT во второй половине 1980-х годов и до момента приобретения компании Apple в начале 1997 года. Операционная система была впервые выпущена в 1999 году как Mac OS X Server 1.0, а в марте 2001 года последовала клиентская версия (Mac OS X v10.0 "Cheetah"). После этого было выпущено еще шесть различных "клиентских" и "серверных" редакций macOS, пока они не были объединены в OS X 10.7 "Lion". До объединения с macOS серверная версия macOS Server была архитектурно идентична своей десктопной версии и обычно работала на серверном оборудовании Macintosh от Apple. macOS Server включала инструменты управления рабочими группами и администрирования, обеспечивающие упрощенный доступ к ключевым сетевым службам, включая агент передачи почты, сервер Samba, сервер LDAP, сервер доменных имен и другие. С Mac OS X v10.7 Lion все серверные функции Mac OS X Server были интегрированы в клиентскую версию, а продукт был переименован в "OS X" (с удалением "Mac" из названия). Серверные инструменты теперь предлагаются в виде отдельного приложения.

z/OS UNIX System Services (Системные службы UNIX)

Впервые представлен как обновление OpenEdition к MVS/ESA System Product Version 4 Release 3, объявленное в феврале 1993 года с поддержкой POSIX и других стандартов. z/OS UNIX System Services создана на базе сервисов MVS и не может функционировать автономно. Изначально IBM представила OpenEdition для соответствия требованиям FIPS, однако в настоящее время несколько компонентов z/OS требуют UNIX-сервисов, например, TCP/IP.

Линукс

Ядро Linux возникло в 1991 году как проект Линуса Торвальдса, когда он был студентом университета в Финляндии. Он опубликовал информацию о своем проекте в новостной группе для студентов и программистов, и получил поддержку и помощь от добровольцев, которым удалось создать полноценное и функциональное ядро. Linux похож на Unix, но был разработан без использования какого-либо кода Unix, в отличие от BSD и его производных. Благодаря открытой модели лицензирования, код ядра Linux доступен для изучения и модификации, что привело к его использованию на широком спектре вычислительных устройств – от суперкомпьютеров до умных часов. Хотя оценки показывают, что Linux используется лишь на 2,81% всех настольных (или ноутбуков) ПК, а также во встроенных системах, таких как мобильные телефоны, Linux превзошел Unix на многих платформах и используется на большинстве суперкомпьютеров, включая все 500 самых мощных суперкомпьютеров в списке TOP500, вытеснив всех конкурентов к 2017 году. Linux также широко используется на других небольших и энергоэффективных компьютерах, таких как смартфоны и умные часы. Ядро Linux используется в некоторых популярных дистрибутивах, таких как Red Hat, Debian, Ubuntu, Linux Mint, а также в Android, ChromeOS и ChromiumOS от Google.

Microsoft Windows

Microsoft Windows — это семейство проприетарных операционных систем, разработанных корпорацией Microsoft и ориентированных, прежде всего, на компьютеры на базе архитектуры x86. Её доля на мировом рынке на всех платформах составляла приблизительно 30%, а на настольных и портативных платформах — около 75%. Последняя версия — Windows 11. Microsoft Windows впервые была выпущена в 1985 году как операционная среда, работающая поверх MS-DOS, которая являлась стандартной операционной системой, поставляемой с большинством персональных компьютеров на архитектуре Intel того времени. В 1995 году была выпущена Windows 95, которая использовала MS-DOS только для начальной загрузки. Для обеспечения обратной совместимости Win9x могла запускать MS-DOS в реальном режиме и 16-битные драйверы Windows 3.x. Windows ME, выпущенная в 2000 году, стала последней версией в семействе Win9x. Более поздние версии основаны на ядре Windows NT. Современные клиентские версии Windows работают на микропроцессорах IA-32, x86-64 и ARM. В прошлом Windows NT поддерживала и другие архитектуры. Серверные версии Windows широко используются, однако её применение на серверах не так распространено, как на персональных компьютерах, поскольку Windows конкурирует с Linux и BSD за долю серверного рынка. ReactOS — это альтернативная операционная система, совместимая с Windows, которая разрабатывается по принципам Windows без использования какого-либо кода Microsoft.

Компоненты

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

Ядра

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

Выполнение программы

Операционная система предоставляет интерфейс между прикладной программой и аппаратным обеспечением компьютера, благодаря которому прикладная программа может взаимодействовать с аппаратным обеспечением, только следуя правилам и процедурам, запрограммированным в операционной системе. Операционная система также является набором сервисов, упрощающих разработку и выполнение прикладных программ. Выполнение прикладной программы обычно включает создание процесса ядром операционной системы, которое выделяет пространство памяти и другие ресурсы, устанавливает приоритет для процесса в многозадачных системах, загружает бинарный код программы в память и запускает выполнение прикладной программы, которая затем взаимодействует с пользователем и аппаратными устройствами. Однако в некоторых системах приложение может запросить операционную систему выполнить другое приложение в рамках того же процесса, либо как подпрограмму, либо в отдельном потоке, например, функции LINK и ATTACH в OS/360 и её последующих версиях.

Перерывы

Прерывание (также известное как прерывание, исключение, ошибка, сигнал или ловушка) предоставляет эффективный способ для большинства операционных систем реагировать на окружающую среду. Прерывания заставляют центральный процессор (ЦП) изменить поток управления от текущей выполняющейся программы к обработчику прерываний, также известному как подпрограмма обслуживания прерываний (ISR). Подпрограмма обслуживания прерываний может привести к переключению контекста центрального процессора (ЦП). Детали обработки прерываний компьютером варьируются в зависимости от архитектуры, а поведение подпрограмм обслуживания прерываний – в зависимости от операционной системы. Однако, некоторые функции прерываний являются общими. Программные прерывания аналогичны аппаратным прерываниям – происходит изменение от текущего выполняющегося процесса. Аналогично, как аппаратные, так и программные прерывания выполняют подпрограмму обслуживания прерываний. Программные прерывания могут быть нормальными событиями. Ожидается наступление временного интервала, поэтому ядру придется выполнить переключение контекста. Компьютерная программа может установить таймер, который сработает через несколько секунд, если из-за слишком большого объема данных алгоритм занимает слишком много времени. Программные прерывания могут быть вызваны ошибками, такими как некорректная машинная инструкция. Синтаксис – INT X, где X – это номер смещения (в шестнадцатеричном формате) в таблице векторов прерываний.

Сигнал

Для генерации программных прерываний в Unix-подобных операционных системах, системный вызов `kill(pid, signum)` отправляет сигнал другому процессу. `pid` – это идентификатор процесса, которому отправляется сигнал. `signum` – номер сигнала (в мнемоническом формате), который необходимо отправить. (Агрессивное название `kill` было выбрано, поскольку в ранних реализациях оно использовалось только для завершения процесса.) В Unix-подобных операционных системах сигналы информируют процессы о возникновении асинхронных событий. Одна из причин, по которой процесс должен асинхронно взаимодействовать с другим процессом, заключается в решении вариации классической задачи «читатель-писатель». Пишущий процесс получает канал (pipe) от оболочки для отправки своего вывода во входной поток читающего процесса. Синтаксис командной строки: `alpha | bravo`. `alpha` будет записывать данные в канал, когда его вычисления будут готовы, а затем перейдет в состояние ожидания в очереди. `bravo` будет перемещен в очередь готовых процессов и вскоре начнет чтение из своего входного потока. Ядро будет генерировать программные прерывания для координации работы канала. На некоторых компьютерах требуется прерывание для каждого символа или слова, что приводит к значительным затратам процессорного времени. Прямой доступ к памяти (DMA) – это архитектурная особенность, позволяющая устройствам обходить процессор и напрямую обращаться к основной памяти. (Независимо от архитектуры, устройство может осуществлять прямой доступ к памяти – как запись, так и чтение – либо напрямую, либо через шину.)

И/О с прерывистостью

Когда пользователь компьютера нажимает клавишу на клавиатуре, обычно соответствующий символ немедленно появляется на экране. Аналогично, когда пользователь перемещает мышь, курсор сразу же перемещается по экрану. Каждое нажатие клавиши и каждое движение мыши генерируют прерывание, называемое прерыванием, управляемым вводом-выводом (Interrupt driven I/O). Прерывание, управляемое вводом-выводом, возникает, когда процесс вызывает прерывание для каждого переданного символа.

Многозадачность

Многозадачность – это одновременный запуск нескольких независимых компьютерных программ на одном компьютере, создающий иллюзию их параллельного выполнения. Поскольку большинство компьютеров способны выполнять не более одной-двух операций одновременно, это обычно реализуется посредством разделения времени, когда каждая программа использует определенную долю времени процессора для выполнения. Ядро операционной системы содержит планировщик, определяющий, сколько времени каждый процесс тратит на выполнение и в каком порядке передается управление программам. Управление передается процессу ядром, предоставляя программе доступ к процессору и памяти. Впоследствии управление возвращается ядру посредством определенного механизма, позволяя другой программе использовать процессор. Этот процесс передачи управления между ядром и приложениями называется переключением контекста. Ранняя модель распределения времени между программами называлась кооперативной многозадачностью. В этой модели, получив управление от ядра, программа может выполняться до тех пор, пока не вернет управление ядру явно. Это означает, что вредоносная или некорректно работающая программа может не только блокировать использование процессора другими программами, но и привести к зависанию всей системы, попав в бесконечный цикл. Современные операционные системы распространяют концепцию принудительного прерывания на драйверы устройств и код ядра, обеспечивая операционной системе приоритетный контроль над временем выполнения внутренних процессов. Основной принцип прерывистой многозадачности заключается в обеспечении регулярного доступа к процессору для всех программ. Это подразумевает ограничение времени, которое каждая программа может использовать процессор без прерывания. Для этого современные ядра операционных систем используют таймер прерывания. Ядро устанавливает таймер защищенного режима, который по истечении заданного времени возвращает систему в режим супервизора. (См. выше разделы о прерываниях и двухрежимной работе.) На многих однопользовательских операционных системах кооперативной многозадачности вполне достаточно, поскольку на домашних компьютерах обычно запускается небольшое количество тщательно протестированных программ. AmigaOS является исключением, поскольку изначально поддерживала прерывистую многозадачность. Windows NT стала первой версией Microsoft Windows, реализовавшей прерывистую многозадачность, однако она не получила распространения среди домашних пользователей до Windows XP (поскольку Windows NT была ориентирована на профессионалов).

Доступ к дискам и файловым системам

Доступ к данным, хранящимся на дисках, является центральной функцией всех операционных систем. Компьютеры хранят данные на дисках, используя файлы, которые структурированы определенным образом для обеспечения более быстрого доступа, повышенной надежности и эффективного использования доступного пространства на диске. Конкретный способ хранения файлов на диске называется файловой системой и позволяет файлам иметь имена и атрибуты. Она также позволяет хранить их в иерархии каталогов или папок, организованных в виде дерева каталогов. Ранние операционные системы обычно поддерживали один тип дискового накопителя и только один тип файловой системы. Ранние файловые системы были ограничены по емкости, скорости, а также в типах имен файлов и структур каталогов, которые они могли использовать. Эти ограничения часто отражали ограничения самих операционных систем, для которых они были разработаны, что значительно затрудняло поддержку нескольких файловых систем. В то время как многие простые операционные системы поддерживают ограниченный набор опций для доступа к системам хранения, операционные системы, такие как UNIX и Linux, используют технологию, известную как виртуальная файловая система (VFS). Операционная система, например UNIX, поддерживает широкий спектр устройств хранения, независимо от их конструкции или используемых файловых систем, предоставляя доступ к ним через общий интерфейс прикладного программирования (API). Это избавляет программы от необходимости знать детали устройства, к которому они обращаются. VFS позволяет операционной системе предоставлять программам доступ к неограниченному количеству устройств с бесконечным разнообразием установленных на них файловых систем, используя специальные драйверы устройств и драйверы файловых систем. Подключенное устройство хранения, такое как жесткий диск, доступно через драйвер устройства. Драйвер устройства понимает специфический протокол диска и способен переводить его на стандартный язык, используемый операционной системой для доступа ко всем дисковым накопителям. В UNIX это язык блочных устройств. Когда ядро имеет соответствующий драйвер устройства, оно может получить доступ к содержимому диска в необработанном формате, который может содержать одну или несколько файловых систем. Драйвер файловой системы используется для преобразования команд, используемых для доступа к каждой конкретной файловой системе, в стандартный набор команд, которые операционная система может использовать для взаимодействия со всеми файловыми системами. Программы могут затем работать с этими файловыми системами, используя имена файлов и каталоги/папки, организованные в иерархической структуре. Они могут создавать, удалять, открывать и закрывать файлы, а также получать различную информацию о них, включая права доступа, размер, свободное место, даты создания и изменения. Различия между файловыми системами затрудняют поддержку всех существующих файловых систем. Ограничения на символы в именах файлов, учет регистра и наличие различных типов атрибутов файлов делают создание единого интерфейса для каждой файловой системы сложной задачей. Операционные системы обычно рекомендуют использовать (и, следовательно, поддерживают нативно) файловые системы, разработанные специально для них, например, NTFS в Windows и ReiserFS, Reiser4, ext3, ext4 и Btrfs в Linux. Однако на практике обычно доступны сторонние драйверы для поддержки наиболее распространенных файловых систем в большинстве операционных систем общего назначения (например, NTFS доступен в Linux через NTFS 3g, а ext2/3 и ReiserFS доступны в Windows через стороннее программное обеспечение). Поддержка файловых систем значительно различается между современными операционными системами, хотя существует несколько общих файловых систем, для которых почти все операционные системы включают поддержку и драйверы. Операционные системы различаются по поддержке файловых систем и форматам дисков, на которые они могут быть установлены. В Windows каждая файловая система обычно ограничена применением к определенным носителям; например, CD должны использовать ISO 9660 или UDF, а начиная с Windows Vista, NTFS является единственной файловой системой, на которую можно установить операционную систему. Linux можно установить на многие типы файловых систем. В отличие от других операционных систем, Linux и UNIX позволяют использовать любую файловую систему независимо от носителя, на котором она хранится, будь то жесткий диск, диск (CD, DVD), USB-накопитель или даже файл, расположенный на другой файловой системе.

Драйверы устройств

Драйвер устройства – это специализированный тип компьютерного программного обеспечения, разработанный для взаимодействия с аппаратными устройствами. Как правило, он представляет собой интерфейс для связи с устройством через конкретную компьютерную шину или подсистему связи, к которой подключено оборудование, обеспечивая отправку команд устройству и получение от него данных, а также необходимые интерфейсы для операционной системы и программных приложений. Это специализированная, аппаратно-зависимая компьютерная программа, также специфичная для операционной системы, которая позволяет другой программе – обычно операционной системе, пакету прикладного программного обеспечения или компьютерной программе, работающей под ядром операционной системы – прозрачно взаимодействовать с аппаратным устройством и, как правило, обеспечивает необходимую обработку прерываний для любых необходимых асинхронных, зависящих от времени потребностей взаимодействия с аппаратным обеспечением. Ключевой целью разработки драйверов устройств является абстракция. Каждая модель оборудования (даже в рамках одного класса устройств) отличается. Производители также выпускают новые модели, обеспечивающие более высокую надежность или производительность, и эти новые модели часто управляются иначе. Нельзя ожидать, что компьютеры и их операционные системы будут знать, как управлять каждым устройством, как сейчас, так и в будущем. Для решения этой проблемы операционные системы, по сути, определяют, как должен управляться каждый тип устройства. Функция драйвера устройства заключается в преобразовании этих запросов функций, предписанных операционной системой, в запросы, специфичные для устройства. Теоретически, новое устройство, управляемое новым способом, должно работать правильно, если доступен подходящий драйвер. Этот новый драйвер гарантирует, что устройство будет работать как обычно с точки зрения операционной системы. В версиях Windows до Vista и версиях Linux до 2.6, выполнение всех драйверов было кооперативным, то есть, если драйвер попадал в бесконечный цикл, это приводило к зависанию системы. Более поздние версии этих операционных систем включают в себя вытесняющую многозадачность ядра, когда ядро прерывает драйвер, чтобы предоставить ему задачи, а затем отсоединяется от процесса до тех пор, пока не получит ответ от драйвера устройства или не предоставит ему дополнительные задачи.

Сетевые связи

В настоящее время большинство операционных систем поддерживают разнообразные сетевые протоколы, аппаратное обеспечение и приложения для их использования. Это означает, что компьютеры с разными операционными системами могут взаимодействовать в общей сети для обмена ресурсами, такими как вычислительные мощности, файлы, принтеры и сканеры, используя проводное или беспроводное соединение. Сети позволяют операционной системе компьютера получать доступ к ресурсам удаленного компьютера, обеспечивая те же функции, что и при непосредственном подключении этих ресурсов к локальному компьютеру. Это включает в себя все, от простого обмена сообщениями до использования сетевых файловых систем или даже совместного использования графического или звукового оборудования другого компьютера. Некоторые сетевые службы обеспечивают прозрачный доступ к ресурсам компьютера, например, SSH, который предоставляет пользователям сети прямой доступ к командной строке компьютера. В клиент-серверной сети программа на компьютере, называемая клиентом, подключается через сеть к другому компьютеру, называемому сервером. Серверы предоставляют (или размещают) различные сервисы для других компьютеров и пользователей в сети. Эти сервисы обычно предоставляются через порты – пронумерованные точки доступа, отличные от IP-адреса сервера. К каждому номеру порта обычно привязана не более одной запущенной программы, которая отвечает за обработку запросов, поступающих на этот порт. Деймон, являясь пользовательской программой, в свою очередь может получать доступ к локальным аппаратным ресурсам компьютера, направляя запросы в ядро операционной системы. Многие операционные системы поддерживают один или несколько специфических или открытых сетевых протоколов, например, SNA на системах IBM, DECnet на системах Digital Equipment Corporation и протоколы, разработанные Microsoft (SMB) для Windows. Также могут поддерживаться специализированные протоколы для конкретных задач, такие как NFS для доступа к файлам. Протоколы, такие как ESound или esd, могут быть легко расширены для работы в сети, обеспечивая передачу звука из локальных приложений на звуковое оборудование удаленной системы.

Безопасность

Безопасность означает защиту пользователей от других пользователей того же компьютера, а также от тех, кто пытается получить удаленный доступ к нему через сеть. Безопасность операционных систем основывается на достижении триады ЦРУ: конфиденциальность (неавторизованные пользователи не могут получить доступ к данным), целостность (неавторизованные пользователи не могут изменять данные) и доступность (обеспечение того, что система остается доступной для авторизованных пользователей, даже в случае атаки типа «отказ в обслуживании»). Как и в случае с другими компьютерными системами, изоляция доменов безопасности — в случае операционных систем, ядра, процессов и виртуальных машин — является ключевым фактором обеспечения безопасности. Другие способы повышения безопасности включают простоту для минимизации поверхности атаки, блокировку доступа к ресурсам по умолчанию, проверку всех запросов на авторизацию, принцип наименьших привилегий (предоставление минимальных привилегий, необходимых для выполнения задачи), разделение привилегий и сокращение объема общих данных. Некоторые конструкции операционных систем более безопасны, чем другие. Те, у которых отсутствует изоляция между ядром и приложениями, наименее безопасны, в то время как те, у которых монолитное ядро, как и у большинства операционных систем общего назначения, все еще уязвимы, если какая-либо часть ядра скомпрометирована. Более безопасная конструкция предполагает использование микроядер, которые разделяют привилегии ядра на множество отдельных доменов безопасности и уменьшают последствия взлома ядра. Уникернели — это еще один подход, повышающий безопасность за счет минимизации ядра и выделения функциональности других операционных систем по приложениям. Большинство операционных систем написаны на C или C++, что может приводить к уязвимостям. Несмотря на различные попытки защиты от них, значительное количество уязвимостей вызвано атаками переполнения буфера, которые становятся возможными из-за отсутствия проверки границ. Аппаратные уязвимости, некоторые из которых вызваны оптимизациями процессора, также могут быть использованы для компрометации операционной системы. Программисты, разрабатывающие операционную систему, могут преднамеренно внедрять уязвимости, такие как бэкдоры. Безопасность операционных систем затрудняется их растущей сложностью и неизбежностью ошибок. Поскольку формальная верификация операционных систем может быть невозможна, разработчики операционных систем используют методы усиления защиты для снижения уязвимостей, такие как рандомизация компоновки адресного пространства, целостность потока управления, ограничения доступа и другие техники. Любой может вносить код в операционные системы с открытым исходным кодом, которые имеют прозрачную историю кода и распределенные структуры управления. Их разработчики совместно работают над поиском и устранением уязвимостей безопасности, используя такие методы, как проверка кода и проверка типов, чтобы избежать вредоносного кода. Эндрю С. Таненбаум рекомендует публиковать исходный код всех операционных систем, утверждая, что это предотвращает ложное убеждение разработчика в том, что он секретен, и зависимость от безопасности за счет сокрытия.

Пользовательский интерфейс

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

Графические пользовательские интерфейсы

Большинство современных компьютерных систем поддерживают графические пользовательские интерфейсы (GUI) и часто включают их в себя. В некоторых компьютерных системах, таких как оригинальная реализация классической Mac OS, графический интерфейс интегрирован в ядро. Хотя графический пользовательский интерфейс технически не является службой операционной системы, включение поддержки для него в ядро операционной системы может повысить его отзывчивость за счет уменьшения количества переключений контекста, необходимых для выполнения графическим интерфейсом своих функций вывода. Другие операционные системы имеют модульную структуру, отделяя графическую подсистему от ядра и операционной системы. В 1980-х годах UNIX, VMS и многие другие использовали операционные системы, построенные по такому принципу. Linux и macOS также построены таким образом. Современные выпуски Microsoft Windows, такие как Windows Vista, реализуют графическую подсистему, которая в основном работает в пользовательском пространстве; однако графические процедуры отрисовки версий между Windows NT 4.0 и Windows Server 2003 в основном находятся в пространстве ядра. Windows 9x практически не различала интерфейс и ядро. Многие компьютерные операционные системы позволяют пользователю устанавливать или создавать любой желаемый пользовательский интерфейс. X Window System в сочетании с GNOME или KDE Plasma 5 – распространенная конфигурация на большинстве Unix и Unix-подобных (BSD, Linux, Solaris) систем. Для Microsoft Windows было выпущено несколько замен оболочки Windows, предлагающих альтернативы стандартной оболочке, однако сама оболочка не может быть отделена от Windows. Со временем существовало множество графических интерфейсов на базе Unix, большинство из которых основаны на X11. Конкуренция между различными поставщиками Unix (HP, IBM, Sun) привела к значительной фрагментации, хотя попытки стандартизации в 1990-х годах с помощью COSE и CDE провалились по разным причинам и в конечном итоге уступили место широкому распространению GNOME и K Desktop Environment. До появления наборов инструментов и сред рабочего стола на основе свободного программного обеспечения Motif был наиболее распространенным набором инструментов и средой рабочего стола (и являлся основой для разработки CDE). Графические пользовательские интерфейсы развиваются со временем. Например, Windows изменяла свой пользовательский интерфейс почти с каждым выпуском новой основной версии, а графический интерфейс Mac OS претерпел значительные изменения с представлением Mac OS X в 1999 году.

Операционные системы в режиме реального времени

Операционная система реального времени (RTOS) — это операционная система, предназначенная для приложений с жесткими временными ограничениями (вычисления в реальном времени). К таким приложениям относятся некоторые небольшие встраиваемые системы, контроллеры двигателей автомобилей, промышленные роботы, космические аппараты, системы промышленного управления и некоторые крупномасштабные вычислительные системы. Ранним примером крупномасштабной операционной системы реального времени была система обработки транзакций, разработанная компаниями American Airlines и IBM для системы бронирования авиабилетов Sabre. Встраиваемые системы с жесткими временными ограничениями используют операционные системы реального времени, такие как VxWorks, PikeOS, eCos, QNX, MontaVista Linux и RTLinux. Windows CE — это операционная система реального времени, которая имеет схожие API с настольной Windows, но не использует её кодовую базу. Symbian OS также имеет RTOS-ядро (EKA2), начиная с версии 8.0b. Некоторые встраиваемые системы используют операционные системы, такие как Palm OS, BSD и Linux, хотя эти операционные системы не поддерживают вычисления в реальном времени.

Разработка операционных систем как хобби

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

Разнообразие операционных систем и переносимость

Если приложение разработано для конкретной операционной системы и портировано на другую ОС, то функциональность, необходимая этому приложению, может быть реализована этой ОС иным образом (названия функций, значения аргументов и т.д.), что требует адаптации, изменения или поддержки приложения. Эти затраты на поддержку разнообразия операционных систем можно избежать, разрабатывая приложения на программных платформах, таких как Java или Qt. Эти абстракции уже понесли затраты на адаптацию к конкретным операционным системам и их системным библиотекам. Альтернативный подход – принятие стандартов поставщиками операционных систем. Например, POSIX и слои абстракции ОС обеспечивают общие элементы, снижающие затраты на портирование.