
Существует достаточно много лаконичных и в целом правильных определений что такое операционная система (ОС), но дают ли они понимание что же это такое, каково назначение операционных систем и какие их основные задачи? При этом многие квалифицированные инженеры не смотря на весь свой опыт и знания затрудняются ответить на поставленные вопросы. Чтобы детально разобраться что же такое ОС давайте обратимся к истории их возникновения.
Компьютеры могут работать без ОС
Так ли обязательна ОС? Может ли компьютер работать без ОС? И вообще что такое компьютер? Подавляющее большинство современных компьютеров используют архитектуру фон Неймана, одной из ключевой особенностью которой является совместное хранение команд программы и данных, с которыми работает программа. Первым компьютером, в котором был реализован такой подход был «Manchester Baby» (1948 год) , его процессор мог выполнять 7 различных команд из которых 3 команды перехода, операция минус, две команды загрузки или сохранения значения аккумулятора в память и команда останова, имел объем памяти в 32 32-битных слова (1024 бит). В этом компьютере не было никакой операционной системы, а программы вводились методом ввода каждого машинного слова с помощью переключателей. Современные процессоры имеют намного больший набор команд (так, например, процессор 8086, имел 81 команду и стал прародителем всего семейства процессоров Intel), но не смотря на это все его команды, как и команды более старших процессоров, можно разбить на те же самые четыре категории: команды перехода/управления, команды выполнения операций (в основном арифметические), команды работы с памятью и команды управления состоянием процессора. Современные компьютеры теоретически так же могут работать без операционной системы. И точно так современные компьютеры, это устройства, которые по большому счёту просто напросто умеют очень быстро складывать, вычитать, делить, умножать и проводить другие простые арифметические операции с очень большой скоростью по заранее заданному алгоритму действий, который называется программой.
Причины появления первых ОС
Каковы же причины появления первых операционных систем? Какой был их функционал? Первые компьютеры были очень дорогими устройствами, их время тоже стоило очень дорого, и, соответственно, одной из основных задач первых операционных систем была минимизация времени простоя компьютера. Прообразом современных операционных систем служили резидентные мониторы — небольшие программные модули, которые позволяли выполнять различные программы последовательно одна за другой. Задачей таких мониторов было выполнить подготовительные операции для запуска новой программы, в т.ч. загрузить её в память и после запустить её, затем, после завершения выполнения программы или при ошибке в процессе исполнения, управление снова переходило к монитору. Он проводил операции по завершению программы (например сохранял результат и очищал память/регистры) и мог начать выполнение следующей программы. Программы группировались в пакет задач, который запускался на выполнение: после завершения первой программы в пакете запускалась вторая и время простоя минимизировалось. Кроме того мониторы использовались для учёта использования компьютерного времени и других ресурсов, позволяли сигнализировать о необходимости вмешательства оператора, например для замены магнитной ленты или при сбое считывающего устройства. Параллельно с резидентными мониторами появились и развивались системные библиотеки, которые позволяли эффективно решать типичные задачи или взаимодействовать с оборудованием, подключённым к компьютеру. Системные библиотеки позволяли программистам не реализовывать заново каждый раз одни и те же функции, а воспользоваться уже готовыми, которые, зачастую, работали более эффективно и безошибочно.
Таким образом первые ОС:
обеспечивали запуск и выполнение программ
содержали библиотеки для взаимодействия с оборудованием и выполнения типовых, часто используемых функций.
Первые программы на первых компьютерах были преимущественно простыми и не взаимодействовали с человеком или другими компьютерами и выполнялись строго последовательно одна за другой. Если для работы программы требовалось взаимодействие с каким-то «медленным» устройством или вмешательство человека/оператора для продолжения работы, то компьютер просто-напросто простаивал, и следующим этапом развития операционных систем стала возможность выполнения других программ или задач в тот момент, когда первая программа находится в режиме ожидания.
Для выполнения любой программы необходимо два компонента: процессор, который будет выполнять записанные инструкции, и память, в которой хранятся и инструкции и данные, необходимые для работы программы. Все остальные компоненты компьютера как правило имеют специальный диапазон адресов и при обращении процессора к этому диапазону производится обмен данными с устройством, а не с оперативной памятью. С точки зрения процессора обмен данными с устройством ничем не отличается от обмена данными с оперативной памятью. Чтобы начать выполнять другую программу на единственном процессоре (а первые компьютеры имели только один процессор) до завершения первой, необходимо каким-то образом подменить содержимое памяти (включая внутренние регистры процессора). Для этого могут использоваться разные механизмы, например, такие как полное копирование содержимого оперативной памяти программы на другой носитель как в ранних операционных системах, так и использование виртуальной адресации, как в большинстве современных операционных систем, когда есть специальные таблицы соответствия логического адреса с которым работает процессор с физическим адресом в оперативной памяти.
Пока программа работала без использования операционной системы, то ей были доступны все устройства напрямую. При работе с использованием операционной системы в большинстве случаев все операции производятся через библиотечные функции. Таким образом при запуске другой программы все устройства доступны с использованием тех же самых библиотечных функций, но если вторая программа попытается использовать то же самое устройство что и первая, то результат будет непредсказуем, так как ни первая ни вторая программа не имеет информации о том, как устройство использовалось другой программой. Следовательно введение возможности выполнения больше одной программы на компьютере требует от операционной системы контроля за доступом к внешнему оборудованию компьютера, чтобы программы не мешали друг другу. Отдельные экземпляры запущенных программ получили название процессов.
Параллельно с развитием возможности запуска нескольких программ одновременно увеличивается и сложность самих программ. Они начинают требовать возможности сохранения промежуточных данных на энергонезависимых носителях информации, в том числе для того, чтобы результаты одних вычислений можно было использовать для проведения других. Для этого в операционной системе стали включать библиотеки для сохранения и считывания обратно данных на энергонезависимые носители, а сохранённая таким образом информация стала со временем называться файлами. Использование системных библиотек для доступа к энергонезависимым носителям и другим устройствам ввода/вывода, таких как принтеры, мониторы, клавиатуры и прочие устройства периферии позволило обеспечить относительно простую переносимость программ с одного компьютера на другой — нюансы аппаратной реализации скрывались за программным интерфейсом библиотеки и не требовали переписывания программы в целом.
В современных ОС резидентные мониторы преобразовались в то, что сегодня называют ядром операционной системы. Ядро обеспечивает отдельным процессам доступ к двум основным ресурсам необходимым для их работы: времени центрального процессора для выполнения своих операций и доступ к виртуальной памяти — диапазону логических адресов, доступной каждому процессу. Ядро системы при этом обеспечивает запуск новых процессов, контролирует их жизненный цикл, проводит учёт используемых ресурсов, выполняет операции необходимые для «подмены» содержимого памяти при переключении процессов, контролирует доступ к совместно используемым компонентам компьютера,в т.ч файлам и файловой системе.
Библиотеки значительно расширили свой функционал и разделились на различные типы, такие как:
драйверы, которые подключаются к ядру системы и по сути становятся его неотъемлемой частью.
системные программы, которые используются для управления и конфигурации ОС, управления файловыми системами, выполнения базовых операций, таких как редактирование текста или копирование и передача информации
библиотеки системных функций, которые обеспечивает постоянный неизменяемый программный интерфейс (API) взаимодействия между процессами и операционной системой,
библиотеки часто используемых функций, например библиотеки шифрования в современных ОС.
Подводя итоги можно сказать, что ОС с одной стороны создаёт абстракцию виртуального компьютера, для каждой запускаемой программы со своей виртуальной памятью и выделенным процессорным временем, взаимодействие с любыми другими компонентами компьютера осуществляется через наборы библиотек, которые реализуют стабильный API. С другой стороны обеспечивает функционирование аппаратных компонентов компьютера с помощью набора драйверов, организует работу файловых систем, сетевых подключений, любых других средств и методов обмена информацией с созданным виртуальным компьютером, контролирует доступ к ресурсам и ведёт их учёт.