Операционная система (OS) — это базовое программное обеспечение на компьютере, и оно назначает различные ресурсы вашего компьютера для других приложений. Одним из типов ресурсов являются внешние устройства, такие как принтер. Операционная система подходит, например, для того, чтобы две программы не отправляли одновременно информацию на один и тот же принтер, но чтобы они добавлялись в список ожидания перед печатью[1]. Другой тип ресурсов — это внутренние устройства, такие как память и процессоры. Это базовые компоненты, за которыми также следит операционная система.
Компьютерные системы современности включают в себя множество компонентов, таких как процессоры, оперативная и постоянная память, графическая память, устройства ввода и вывода, запоминающие устройства и другие[3]. Операционная система отслеживает работу всех компонентов и обеспечивает программистам доступ к ним. Таким образом, разработчику приложения не нужно знать детали использования сложных устройств или то, как приложение должно делиться ими с другими приложениями. Операционная система выступает в роли прослойки, разделяющей программы и более сложное аппаратное обеспечение.
Различные компьютеры используют разные типы оборудования, поэтому приложение, созданное для одного типа компьютеров, может не работать на другом. Однако операционная система подходит для нескольких типов компьютеров, что позволяет ей действовать как общая платформа, которую разработчик приложения может использовать без необходимости учитывать различия в оборудовании, которое используется пользователями[4].
После окончания Второй мировой войны, когда Говард Эйкен, Джон фон Нейман, Джон Преспер Экерт и Джон Уильям Мочли в США и Конрад Цузе в Германии создали компьютеры, которые занимали целые комнаты и состояли из десятков тысяч вакуумных ламп[5]. Эти компьютеры были спроектированы, построены, запрограммированы и управлялись одной и той же группой людей, но без операционной системы. Все программирование осуществлялось на языке машинного кода, часто путем подключения проводов в нужные разъёмы. Основной задачей этих машин было решение простых арифметических задач, таких как создание таблиц синусов и косинусов.
В 1964 году для мейнфремовIBM System/360 была разработана собственная операционная система. Система была написана на низкоуровневом языке программирования ассемблер[6]. ОС поддерживала широкий спектр приложений, это первая операционная система, которая требовала устройства хранения данных с прямым доступом.
Кен Томпсон и Денис Ритчи
В 1970 году была выпущена операционная система UNIX, разработчиками которой стали Кен Томпсон и Денис Ритчи[7]. Изначально она была написана ассемблере - низкоуровневом языке программирования, но позже переписана в начале на язык B (Би), а в 1973 году на язык С (Си). Система свободно распространялась на магнитных лентах в университетах и колледжах. UNIX был написан на машинно-независимом языке, это значит, что система могла работать на любом компьютерном оборудовании. На основе UNIX появились такие системы как BSD UNIX, FreeBSD, NetBSD, Linux.
В начале 1980-х годов Apple выпустил первую операционную систему с графическим интерфейсом. Операционная система могла использоваться не только на опытными пользователями и научными сотрудниками, но и подходила для рядового пользователя[8].
В 1985 году с выходом микропроцессора Intel 80386 который обладал 32-разрядной архитектурой, появилась возможность соpдавать и использовать многозадачные операционные системы[9].
В 1995 году компанией Microsoft была выпущена коммерческая операционная система Windows 95. Это была многозадачная система с графическим интерфейсом[11].
В 2001 году была выпущена операционная система macOS, основанная на платформе NeXTSTEP и ядре BSD[8].
Любой компонент операционной системы важен и выполняет различные функции: управляет периферийными устройствами, многозадачностью, процессами, распределением памяти, процессорного времени, взаимодействием с пользователем и с оборудованием компьютера.
Структура типичной компьютерной системы и положение операционной системы в ней.
Ядро - это то, на чём базируется операционная система. Ядро имеет различные слои. Нижний уровень управляет оборудованием, которое подключено через системные шины, например такие как PCI-E, AGP или которые встроены в материнскую плату устройства. Это может быть, например сетевая карта или подключенная в слот PCI-E дискретная видеокарта. Средний уровень управляет распределением памяти процессам, которые запущены в операционной системе[12]. Верхний уровень - отвечает за файловую систему, управляет памятью на постоянном запоминающем устройстве, например на жёстком диске и прозводит такие манипуляции как: запись/чтение. При запуске системы в первую очередь, в память загружается ядро и только потом все остальные процессы. Как правило, ядро нельзя выгрузить из оперативной памяти.
Операционная система после запуска программы, запускает процесс в ядре, который выделяет память для программы, затем назначает приоритет для нового процесса, а на финальном этапе считывает двоичный код приложения и запускает его для дальнейшего взаимодействия пользователя с программой. Программы могут запускаться автоматически, например, если они находятся в автозагрузке либо запускаться вручную пользователем[13].
Прерывание — это эффективный способ, который используется большинством операционных систем для реагирования на окружающую среду. Оно может быть известно также как исключение, ошибка, сигнал или ловушка. Когда происходит прерывание, центральный процессор (ЦП) изменяет поток управления от текущей запущенной программы к обработчику прерываний, который также называется процедурой обслуживания прерываний (ISR). В результате процедуры прерывания ЦП может иметь контекстный переключатель. Как компьютер обрабатывает прерывание и как ведут себя процедуры обслуживания прерываний, зависит от архитектуры и операционной системы. Однако, несколько функций прерывания являются общими: передача управления в процедуру прерывания службы, сохранение состояния текущего запущенного процесса и восстановление состояния после обслуживания прерывания[14].
Программное прерывание представляет собой сообщение о событии, которое отправляется процессу. В отличие от аппаратного прерывания, которое сообщает центральному процессору о событии, программные прерывания также вызывают изменения в работе текущего процесса. Как и аппаратные, программные прерывания требуют процедуры обслуживания прерываний[15].
Устройства ввода/вывода (I/O) работают медленнее, чем процессор. Это может замедлить работу компьютера, если процессор будет ждать завершения каждой операции ввода-вывода. Однако существует решение — компьютер может использовать прерывания для завершения операций ввода-вывода, что позволяет избежать необходимости постоянного опроса или напряженного ожидания[16].
Когда пользователь вводит символ на клавиатуре компьютера, он мгновенно появляется на экране. Аналогично, перемещение мыши приводит к мгновенному перемещению курсора по экрану. Каждый символ, нажатый на клавиатуре, и каждое движение мыши вызывает прерывание, известное как ввод-вывод на основе прерываний. Ввод на основе прерывания происходит, когда процесс вызывает прерывание для каждого передаваемого символа или слова[17].
Медленные устройства ввода, например, клавиатура, делают прерывания ЦП после каждого байта, но для быстрых устройств, которые записывают данные с высокой скоростью, вроде жёсткого диска или SSD-накопителя такие прерывания бы сильно нагружали операционную систему. Поэтому для высокоскоростных устройств используется прямой доступ к памяти (DMA). Для этого используется контроллер DMA, который предоставляет доступ к системной шине, а также считает количество переданных данных.
Одной из задач многопрограммного ядра операционной системы является управление всей системной памятью, используемой программами. Это гарантирует, что каждая программа имеет независимый доступ к памяти и не нарушает работу других программ[18]. Ранее использовалось совместное управление памятью, однако такая система стала редкостью из-за возможности ошибок в программах, которые могут привести к перезаписи памяти других программ или даже операционной системы. Вредоносные программы или вирусы также могут изменять память других программ или нарушать работу всей системы. Таким образом, для сбоя системы достаточно только одной программы с неправильным поведением.
Многозадачность позволяет выполнять несколько задач в операционной системе одновременно. Это происходит за счёт разделения процессорного времени. Задачи могут выполняться параллельно и псевдопараллельно[19]. В однозадачных операционных системах, таких как MS-DOS, задачи выполнялись последовательно, друг за другом. Все современные операционные системы многозадачные. Существуют два типа многозадачности: кооперативная и вытесняющая. В кооперативной фоновые процессы выполняются только если от основного процесса получено разрешение, в вытесняющей процессорное время распределяется планировщиком[20].
Драйверы устройств представляют собой разработанное программное обеспечение, которое используется для правильной работы устройства в операционной системой пользователя. Как правило, драйвер разрабатывается производителем устройства, но на многие устройства, например клавиатура, мышь, монитор драйверы поставляются вместе с операционной системой. Для каждой операционной системы требуются свой драйвер[21]. Помимо драйвера, программное обеспечение может содержать дополнительное приложения для управления устройством. Драйвер сообщает операционной системе как работает устройство и как оно может использоваться.
В пользовательских операционных системах используется специальный интерфейс для взаимодействия с системой. В таких системах как Unix, DOS, Linux управление может происходить с помощью командной строки, а также с помощью графической оболочки[22]. Графическая оболочка требует от компьютера больше вычислительных ресурсов и памяти, однако она упрощает процесс взаимодействия с операционной системой. Изначально, такие системы как Linux и DOS работали только с помощью командной строки, позже, благодаря разработанному программному обеспечению появился графический интерфейс, который также называется оболочкой.
Таненбаум Э. Современные операционные системы = Modern Operating Systems : Пер. с англ. — 3-е издание. — СПб : Питер, 2015. — 1120 с. — (Серия «Классика Computer science»). — ISBN978-5-496-00301-8. — WDQ115645152.
Таненбаум Э. С., Вудхалл А. С. Операционные системы. Разработка и реализация = Operating Systems: Design and Implementation. — 3-е изд. — СПб.: Питер, 2007. — 704 с. — ISBN 978-5-469-01403-4.
Шоу А. Логическое проектирование операционных систем = The Logical Design of Operating Systems. — М.: Мир, 1981. — 360 с.