Ускоренный курс по операционным системам: от ядер к виртуализации

Ускоренный курс по операционным системам Изучение

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

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

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

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

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

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

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

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

Читайте также:  Как отображать предложения для поля ввода в HTML?

Сегодня разработчики используют следующие три самые популярные операционные системы:

Linux

Linux

Эта операционная система представляет собой операционную систему с открытым исходным кодом, доступную для всех компьютеров. Свойства открытого исходного кода Linux позволяют легко настраивать его и хорошо подходят для установки и запуска других программ с открытым исходным кодом. Такое сочетание технологий с открытым исходным кодом позволило системам Linux развиваться намного быстрее, чем Windows или macOS.

По этой причине Linux является самой популярной ОС для разработчиков по всем направлениям, особенно в областях кибербезопасности.

Однако у Linux есть крутая кривая обучения, и может быть трудно освоить его.

macOS

linux или mac os

Эта операционная система разработана Apple и доступна на компьютерах Mac. Разработчики любят macOS за свои функции на основе Unix, такие как встроенные утилиты оболочки bash и простая файловая система Unix. Однако многие считают, что macOS не обладает достаточной гибкостью, и вместо этого выбирают Linux.

Windows

Windows

Эта операционная система разработана Microsoft и доступна на компьютерах. Windows известна своей простотой использования и единообразной функциональностью во всех версиях. Поскольку Windows проста, многие разработчики используют другие операционные системы, которые имеют больше встроенных функций, например macOS, или более изменчивые, например Linux.

Что такое ядро?

Ядро — это центральное ядро ​​операционной системы, которое позволяет программам получать доступ к аппаратным ресурсам. Ядро — это то, как система запускается, транслирует ввод и выводит запросы в центральный процессор (GPU).

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

Ядра редко меняются от версии к версии. Фактически, современная ОС использует те же версии, что и более 20 лет назад, с небольшими обновлениями или модернизациями.

  • Linux использует ядро ​​Linux
  • macOS использует ядро ​​XNU
  • Windows использует ядро ​​Windows NT

Управление ресурсами

Управление ресурсами — одна из важнейших служб ядра. Ядро делегирует ресурсы компьютера, такие как память и ЦП, каждому выполняемому процессу.

Регулируя процессы, ядро ​​предотвращает «жадные» программы от истощения системы и замедления других параллельных программ. Эта служба гарантирует, что у всех процессов достаточно ресурсов для работы, и что каждый процесс использует все доступные ресурсы.

Что такое процесс?

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

Каждый процесс проходит через 5 шагов:

Каждый процесс проходит через 5 шагов

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

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

Что такое услуга?

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

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

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

Некоторые службы, например обнаружение ошибок, работают постоянно, независимо от вызовов программ.

Общие службы

Услуги, включенные в операционную систему, различаются в зависимости от ОС, но некоторые из них стали стандартными:

  • Выполнение программы: эта служба позволяет компьютеру загружать, выполнять и производить вывод программы.
  • Операции ввода / вывода (I / O): эта служба обеспечивает возможность связи со стандартными устройствами, такими как принтеры и клавиатуры. Устройство может использовать это, чтобы делать запросы к ядру или наоборот. Программное обеспечение для работы с конкретными устройствами называется драйвером, который указывает службе операций ввода-вывода, как взаимодействовать с новым устройством.
  • Управление файловой системой: эта служба включает стандартизированный метод навигации по памяти, чтобы мы могли создавать и размещать файлы в каталогах. Затем программы могут перемещаться по этим каталогам, изменять свойства или открывать / создавать файлы. Он также предоставляет пользователям интерфейс для взаимодействия с файлами с помощью таких запросов, как create/deleteи move.
  • Связь: служба связи обеспечивает связь между отдельными процессами для обмена данными или результатами. Он также включает в себя структуру для распределенных систем, состоящих из нескольких компьютеров, работающих вместе.
  • Обнаружение ошибок: обнаружение ошибок позволяет компьютерам сканировать все процессы на наличие ошибок, отслеживая прогресс и ожидаемые результаты. Эта служба также может исправлять мелкие ошибки без вмешательства пользователя.
  • Распределение ресурсов: эта служба ядра позволяет компьютеру динамически предоставлять и освобождать ресурсы по мере добавления или завершения процессов. Это также позволяет компьютеру создавать последовательности процессов с помощью планировщиков ЦП.
  • Защита: эта служба обеспечивает базовую защиту кибербезопасности за счет контроля доступа к системе, ограничения доступа ввода-вывода к несвязанным ресурсам и аутентификации по паролю.

Типы конфигураций операционной системы

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

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

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

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

Сетевая операционная система

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

Это наиболее часто используемый тип ОС, который можно найти на домашних компьютерах и на устройствах управления сетью, таких как маршрутизаторы и коммутаторы. Windows, macOS и Linux — все сетевые операционные системы, поскольку они должны часто использовать Интернет.

Преимущества:

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

Недостатки:

  • Дорогая покупка и установка локального сервера
  • Положитесь на центральный сервер для работы
  • Требует регулярных обновлений и обслуживания

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

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

Пакетные операционные системы предназначены для ускорения обработки за счет «пакетирования» групп задач, которые будут выполняться позже.

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

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

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

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

Преимущества:

  • Всегда знайте, когда процесс будет завершен
  • Доступно нескольким работникам
  • Может выдерживать постоянные большие рабочие нагрузки

Недостатки:

  • Эффективность зависит от оперативности оператора
  • Сложно отлаживать
  • Дорого в установке
  • Неудачные задания вызывают отставание

Операционная система с разделением времени

Операционная система с разделением времени

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

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

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

Преимущества:

  • Обеспечивает стабильно быстрое время отклика
  • Минимальное время простоя ЦП

Недостатки:

  • Склонен к ошибкам
  • Минимальная безопасность, вредоносные процессы будут выполняться как обычные процессы
  • Параллельные процессы не могут легко обмениваться данными

Распределенная операционная система

Распределенная операционная система

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

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

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

Преимущества:

  • Долговечный, отказ одного узла не прерывает работу других узлов.
  • Данные легко обмениваются между узлами
  • Быстрое вычисление за счет ресурсов нескольких узлов
  • Сниженная нагрузка на каждый узел
  • Масштабируемость, возможность беспрепятственного добавления новых узлов

Недостатки:

  • Работает только при подключении к сети узла
  • Дорого в установке

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

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

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

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

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

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

Преимущества:

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

Недостатки:

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

Расширенные концепции ОС

Планирование процессов

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

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

Ниже приведены 3 распространенных алгоритма упреждающего планирования:

  • Наименьшее оставшееся время (SRT): процессор отдает приоритет процессам, наиболее близким к завершению. Если добавляется новый процесс, время завершения которого меньше, чем у текущего процесса, сначала выполняется новый процесс. Это часто используется с системами пакетной ОС.
  • Планирование с циклическим перебором: процессор вращает каждый процесс, позволяя каждому обработать квант времени. По окончании кванта процесс прерывается, а затем прерывается следующим процессом. Этот алгоритм является основой операционных систем с разделением времени.
  • Планирование многоуровневых очередей: процессы разбиты на отдельные очереди, каждая с разными алгоритмами планирования. Процессор чередует каждую очередь и назначает процессы на основе алгоритма их домашней очереди. Это часто используется, когда одна система обрабатывает совершенно разные процессы, каждый из которых требует уникального алгоритма.

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

  • Первый пришел — первый вышел (FIFO): процессор завершает процессы в том порядке, в котором они пришли. Это самый простой алгоритм для реализации, но он также приводит к самому медленному среднему времени обработки.
  • Самое короткое задание следующее (SJN): процессор всегда ставит в очередь следующее самое короткое задание. Этот алгоритм обеспечивает очень низкое время обработки, но не может быть реализован, если не известны как продолжительность доступности ЦП, так и время обработки каждого процесса. SJN является эквивалентом наименьшего оставшегося времени без прерывания и также используется в пакетных операционных системах.
  • Планирование на основе приоритетов: каждому процессу назначается приоритет на основе предварительно установленного фактора, основанного на ресурсах, такого как использование памяти или время обработки. Затем процессы завершаются процессором в порядке их приоритета. Если несколько процессов имеют одинаковый приоритет, ЦП выполняет их, используя алгоритм FIFO. Это один из наиболее широко используемых алгоритмов планирования.

Потоки и многопоточность

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

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

Процессы против потоков

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

Виртуализация

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

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

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

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

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

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

Преимущества:

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

Недостатки:

  • Виртуальные машины менее эффективны, чем эквивалентные физические машины, поскольку виртуальные машины должны косвенно запрашивать использование оборудования через ОС хоста.
  • Ресурсы разделены между разными виртуальными машинами, что означает, что большинство машин могут эффективно работать только с несколькими виртуальными машинами одновременно.

Что изучать дальше

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

Далее следует изучить следующие концепции ОС:

  • Пейджинг ОС
  • Перевод адресов
  • Полные системы виртуальных машин
  • Блокировки параллелизма
  • Резервные дисковые массивы
  • Сохранение данных
Оцените статью
bestprogrammer.ru
Добавить комментарий