Что такое операционная система?

Операционная система - это уровень системного программного обеспечения между приложениями и оборудованием, который абстрагирует (то есть упрощает то, как на самом деле выглядит оборудование) и выполняет арбитраж (то есть управляет, за границей и контролирует использование оборудования).

Функции операционной системы

  • Скрывает сложность оборудования: ОС скрывает сложность оборудования как для приложений, так и для разработчиков приложений. Разработчикам приложений, например, не нужно беспокоиться о дисковых секторах или блокировках при сохранении файла на диск. Фактически, механизм чтения / записи файла на жестком диске отличается от чтения / записи файла на USB-накопитель или SSD, который обрабатывается ОС. Точно так же ОС абстрагирует сетевой ресурс и предоставляет абстракцию более высокого уровня, называемую Socket, и предоставляет некоторые услуги для отправки и получения пакетов из этого сокета.
  • Управление ресурсами: ОС также управляет ресурсами, используемыми приложением. Он решает, сколько и какой из вышеперечисленных ресурсов будет использоваться приложением, выделяет им память, назначает эти задачи ЦП, который может их выполнять, контролирует доступ к приложениям для различных устройств в системе и т. Д. ОС в целом. отвечает за управление всеми типами ресурсов и их выделение этим приложениям.
  • Обеспечивает изоляцию и защиту. Когда несколько приложений одновременно работают на одном оборудовании, ОС должна обеспечивать надлежащий прогресс каждого из них и не наносить вред друг другу. Например, ОС выделяет разные части физической памяти разным приложениям и следит за тем, чтобы они не обращались к памяти друг друга.

Некоторые примеры операционных систем: Windows, Linux, MacOS, iOS, Android, Symbian и т. Д.

Элементы ОС

  • Абстракции: Абстракция - это упрощение того, как на самом деле выглядит оборудование, некоторые абстракции ОС - это процесс, поток, файл, сокет, страница памяти и т. д. Я буду обсуждать их в следующих статьях.
  • Механизм: Чтобы работать с вышеуказанной абстракцией, ОС должна знать механизм, то есть реализацию или задействованные шаги, которые определяют, как выполнять некоторые действия. Вот некоторые общие механизмы: создание, расписание, открытие, запись, выделение и т. Д.
  • Политика. Политика - это способы выбрать, какое действие выполнять, максимальное количество сокетов, к которым приложение может иметь доступ, сколько памяти выделить и т. д. Некоторые общие политики - это наименее недавно использованные (LRU) , Сначала самый ранний крайний срок (EDF) и т. Д.

Принципы разработки ОС

  • Разделение механизма и политики: механизмы определяют, как что-то делать; политика определяет, что будет сделано. Например, конструкция таймера (см. Раздел 1.5.2) - это механизм для обеспечения защиты ЦП, но решение о том, как долго таймер должен быть установлен для конкретного пользователя, является политическим решением.
  • Оптимизация для общего случая: Где будет использоваться ОС? Что пользователь захочет выполнить на этой машине? Каковы требования к рабочей нагрузке?

Ядро и ОС

ОС - это пакет, который напрямую взаимодействует с оборудованием и нашим приложением, тогда как ядро ​​- это самый низкий уровень ОС и ядро ​​ОС с полным контролем над всем в системе. это одна из первых программ, загружаемых при запуске (после загрузчика). Он обрабатывает остальную часть запуска, а также запросы ввода / вывода от программного обеспечения, переводя их в инструкции обработки данных для ЦП.

Граница защиты пользователя / ядра

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

Режим ядра. В режиме ядра исполняемый код имеет полный и неограниченный доступ к базовому оборудованию. Он может выполнять любую инструкцию ЦП и ссылаться на любой адрес памяти. Режим ядра обычно зарезервирован для самых низкоуровневых и наиболее надежных функций операционной системы.

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

Бит, называемый битом режима, добавляется к оборудованию компьютера, чтобы указать текущий режим: ядро ​​(0) или пользовательский (1). С помощью бита режима мы можем различать задачу, выполняемую от имени операционной системы, и задачу, выполняемую от имени пользователя.

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

Схема системных вызовов

Первоначально (1) процесс приложения выполняется в пользовательском режиме, при выполнении (2) если приложению требуется доступ к некоторому файлу или требуется ввод данных от пользователя, или, возможно, приложение хочет выполнить сетевой вызов, наше приложение создаст систему вызов, управление будет передано ядру, а бит режима будет установлен в 0. Операционная система выполнит любую операцию, указанную в системном вызове, после того как эта ОС изменит бит режима обратно на 1 и вернет результат процессу. Системный вызов включает изменение контекста выполнения в режим ядра, а затем обратно в пользовательский режим, поэтому системный вызов не из дешевых.

Перед выполнением системного вызова процесс подачи заявки должен:

  • Аргумент записи: для выполнения системного вызова некоторые данные (пакеты данных для отправки, адрес файла для чтения / записи и т. д.) должны быть переданы ядру, которое передается как аргументы системного вызова.
  • Сохраните соответствующие данные в четко определенном месте. Необходимо четко определить местоположение, чтобы ядро ​​могло определить, какие аргументы, сколько аргументов оно должно получить и их расположение в памяти.
  • Сделайте системный вызов с определенным номером системного вызова, который необходим для доступа к аргументам и другим важным данным.

Аргументы можно передать напрямую или косвенно, указав их адрес.

Переход пользователя / ядра

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

Оборудование обеспечивает поддержку перехода между пользователем и ядром, например, оборудование вызовет ловушку, если приложение из непривилегированного режима попытается выполнить какую-либо инструкцию или доступ к памяти, или если у него нет разрешения, для Например, процесс приложения не может изменить содержимое некоторых регистров и выделить себе больше ЦП или выделить больше памяти. После прерывания управление передается операционной системе, и бит режима устанавливается в 0, на этом этапе ОС проверяет, что вызывает tarp, и может выбрать, разрешить или отклонить тот конкретный запрос, который вызывает прерывание.

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

Доступ к памяти примерно в 100 раз медленнее, чем доступ к кешу. Доступ к кешу происходит близко к циклам процессора, что делает его очень быстрым. Производительность приложения очень зависит от кеша, поэтому, когда управление передается ОС, она переносит свое собственное содержимое в кэш-память для выполнения системного вызова, заменяя содержимое приложения. Таким образом, после выполнения системного вызова приложение больше не сможет получить доступ к своим данным в кэше, и ему придется обращаться к памяти для доступа к своим данным, что делает переход между пользователем и ядром еще более дорогостоящим.

Базовые службы операционной системы

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

Некоторые примеры услуг, предоставляемых операционной системой для удобства пользователя:

  • Выполнение программы. Операционная система предоставляет среду, в которой пользователь может удобно запускать программы. Запуск программы включает в себя выделение и освобождение памяти, планирование ЦП и т. Д., Пользователю не нужно беспокоиться об этих вещах. О них позаботятся операционные системы.
  • Операции ввода-вывода. Одна из важных задач операционной системы - управлять различными устройствами ввода-вывода, включая мышь, клавиатуру, тачпад, дисковые накопители, адаптеры дисплея, USB-устройства, растровый экран и т. д. Светодиод, аналого-цифровой преобразователь, переключатель включения / выключения, сетевые соединения, аудиовходы / выходы, принтеры и т. Д. Операционная система скрывает от пользователя детали базового оборудования для эффективного и защищенного использования операций ввода-вывода.
  • Файловая система: пользовательскому процессу может потребоваться чтение / запись файла с диска. Операционная система предоставляет эту услугу. Пользователю не нужно беспокоиться об управлении вторичным хранилищем. Пользователь дает команду на чтение или запись в файл и видит, что его задача выполнена.
  • Связь. Бывают случаи, когда процессам необходимо взаимодействовать друг с другом для обмена информацией. Это может происходить между процессами, запущенными на одном компьютере или на разных компьютерах. Предоставляя эту услугу, операционная система избавляет пользователя от необходимости передавать сообщения между процессами.
  • Обнаружение ошибок: ошибка одной части системы может вызвать сбой в работе всей системы. Чтобы избежать такой ситуации, операционная система постоянно контролирует систему на предмет ошибок. Это избавляет пользователя от беспокойства об ошибках, распространяющихся на различные части системы и вызывающих сбои в работе. Эта служба не может обрабатываться пользовательскими программами, потому что она включает в себя мониторинг и, в некоторых случаях, изменение области памяти или освобождение памяти для неисправного процесса. Или, может быть, отказ от ЦП процесса, который входит в бесконечный цикл. Эти задачи слишком важны, чтобы их можно было передать пользовательским программам. Пользовательская программа, если ей даны эти привилегии, может мешать правильной (нормальной) работе операционных систем.
  • Защита: учитывая, что компьютерная система имеет несколько пользователей и одновременно выполняется несколько процессов, различные процессы должны быть защищены от действий друг друга. Защита относится к механизму или способу управления доступом программ, процессов или пользователей к ресурсам, определенным компьютерной системой.

ОС делает все эти службы доступными через системные вызовы. Ниже приведены некоторые популярные системные вызовы для Windows и Linux.

Различные типы архитектуры операционной системы

  • Монолитная архитектура. Монолитная ОС - одна из старейших архитектур ОС. В этой ОС все возможные службы, которые могут потребоваться приложению или какое-либо оборудование, уже являются частью операционной системы. Все основные службы ОС, такие как управление процессами, управление файлами, управление памятью, обработка исключений, взаимодействие процессов и т. Д., Присутствуют только внутри ядра. Он также может включать несколько файловых систем: одну для последовательных рабочих нагрузок, а другую - для произвольного ввода-вывода. Это делает ОС очень большой.
  • Преимущества: Все включено в операционную систему, то есть все абстракции, службы и т. д., и все упаковано одновременно, поэтому есть некоторые возможности встраивания и оптимизации во время компиляции.
  • Недостатки: ОС этого типа очень велика, поэтому существует слишком много состояний, слишком много кода, который сложно поддерживать, отлаживать, обновлять и требовать больше памяти, что делает меньше памяти доступной для приложений.
  • Модульная архитектура: это наиболее распространенный сегодня подход. Он имеет ряд базовых сервисов и API-интерфейсов, которые уже являются его частью, но также все (файловая система, планировщик и т. Д.) Можно настроить как модуль. Операционная система определяет определенные интерфейсы, которые модуль должен реализовать отдельно от операционной системы, поэтому в зависимости от наших потребностей мы можем настраивать различные службы, динамически устанавливая модули.
  • Преимущества. Его легче поддерживать и обновлять, он имеет меньшую кодовую базу и менее ресурсоемкий, что означает, что приложение может оставить больше ресурсов и памяти для использования, что может привести к повышению производительности.
  • Недостатки: из-за своей модульности и настраиваемости это может уменьшить некоторые возможности для оптимизации, которые могут иметь некоторое влияние на производительность, хотя и не очень значительное. Техническое обслуживание может быть трудным, поскольку модули могут происходить из разных баз кода и могут содержать некоторые ошибки.
  • Микроядро. Микроядро включает только самые примитивные службы на уровне операционной системы. Микроядро поддерживает базовое низкоуровневое управление адресным пространством, управление потоками и межпроцессное взаимодействие (IPC). Все остальное, например файловая система, драйверы устройств и т. Д., Будет работать вне операционной системы на уровне пользователя. По этой причине микроядро требует большого количества межпроцессных взаимодействий, поэтому само микроядро поддерживает межпроцессное взаимодействие (IPC) как одну из своих основных абстракций.
  • Преимущества. Поскольку он не включает много абстракций, его размер очень мал, это может не только привести к снижению накладных расходов и повышению производительности, но и может быть очень легко протестировать и проверить код.
  • Недостатки: поскольку он имеет очень частые взаимодействия, требующие большого количества системных вызовов, которые требуют большого количества изменений режима защиты, то есть контекст выполнения много раз меняется из пользовательского режима в режим ядра, что является дорогостоящей операцией. Сложность программного обеспечения также очень высока, поскольку очень трудно найти общие компоненты программного обеспечения.

Резюме

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

Далее: Процессы и управление процессами