Найти тему

Работа операционной системы

Оглавление

Содержание

  • Что такое операционная система и как она работает
  • Введение
  • Зачем нужна операционная система?
  • Функции ОС
  • Основные абстракции ОС

  • Как ОС загружается в компьютер
  • Что делает ядро ОС
  • Прерывания
  • Как приложения взаимодействуют с ОС
  • Как оборудование взаимодействует с ОС
  • Что это значит?
  • Сервисы ОС
  • Основные
  • Дополнительные
  • Очновные абстракции
  • Процесс
  • Поток
  • Файл
  • Реализация многозадачности
  • Переключение контекста
  • Критические секции и блокировки
  • Адреса и управление памятью
  • Итог
  • Основные механизмы
  • Абстракции

Введение

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

Любой компьютер представляет собой связанную совокупность: процессора, памяти и устройств ввода-вывода.

-2

Сама по себе, аппаратура умеет делать только очень простые, базовые операции - по типу: сложить два числа, перейти к адресу, записать по адресу и тд.

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

  • Чтение инструкций/данных из памяти (read)
  • Выполнение интрукции (execute)
  • Запись результата в память (write)
  • Прерывание (interrupt)

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

Возникает вопрос — Как заставить всё это слаженно и эффективно работать, сделав пользование компьютером удобным как для обычного человека, так и для прикладного программиста?

Зачем нужна Операционная Система?

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

Существует три ключевых элемента операционной системы:

  1. Абстракции (процессы, потоки, файлы, сокеты, адресное пространство).
  2. Функции (создание, управление, открытие, запись, распределение).
  3. Конкретные реализации
  • Архитектуры: монолитные, модульные, гибридные;
  • Алгоритмы: LRU, EDF;

Фунции ОС

  • Управление ресурсами и процессами, а также совместное использование вычислительных ресурсов группой приложений (многозадачность) — центральная функция ОС, которая является базой для разных системных архитектур
  • Scheduler — планировщик. Механизм управляющий процессами и реализующий многозадачность.
  • Memory manager — менеджер памяти. Механизм выделяющий память и управляющий ею.
  • Абстракция оборудования для удобства и переносимости
  • то есть реализация единого интерфейса для разного, но схожего по функциям оборудования.
  • Изоляция ошибок приложений друг от друга (и от ядра ОС)
  • Переносимость данных между приложениями (процессами)
  • Inter Process Communication (IPC) — Механизм межпроцессного взаимодействия
  • файлы и файловая система

Основные абстракции ОС

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

Положение ОС в многоуровневой иерархии организации компьютера

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

-3

Операционная система является одним из таких уровней и представляет собой интерфейс («прослойку») между пользователем ресурсов компьютера и самими ресурсами, управляющий взаимодействиями как между пользователь-ресурс, так и пользователь-пользовательустройство-устройство.

В целом, общей схемой это можно отобразить так:

-4

Как операционная система загружается в компьютер?

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

  1. Запуск компьютера – на процессор подаётся напряжение, и его элекрические компоненты начинают работу.
  2. Процессор начинает исполнять инструкции с фиксированного, аппаратно зашитого в него адреса.
  3. По этому адресу находится специальная программа POST – Power On Self Test. Которая проверяет работоспособность основных компонентов вычислительной системы.
  4. Далее, управление передаётся BIOS’y — Basic Input Output System (Базовая система ввода-вывода), которая инициализирует основные устройства ввода-вывода: загрузочные устройства (раличные хранители информации: HDD, SSD, Flash и так далее), клавиатура, монитор и прочее.
  5. BIOS обращается к загрузочному устройству и читает первый блок данных, на котором должен находиться загрузчик. Загружает его в память и передаёт ему управление.
  6. Загрузчик загружает в память и инициализирует основные компоненты операционной системы, и передаёт ей управление.
  7. Операционная система запускает таймер, который будет возвращать управление операционной системе каждый, заранее установленный разработчиками ОС, квантвремени. Это делается для реализация Scheduler’a - планировщика, чтобы ОС могла управлять и контролировать процессы.
  8. Операционная система создаёт первый процесс-пользователя и дальше от него начинают множится другие процессы.

Что делает ядро ОС?

Ядро ОС – центральная часть операционной системы. По сути, это и есть ОС.

  • Обрабывает запросы приложений
  • системные вызовы (программные прерывания)
  • Обрабывает запросы оборудования
  • прерывания
  • Обрабатывает исключительные ситуации
  • Разного рода ошибки
  • Обеспечивает диспетчеризацию процессов (scheduling)
  • реализация многопользовательского режима доступа к ресурсам
  • время работы процессора делится на фрагменты и они распределяются по процессам

Прерывания

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

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

Инициализация данной таблицы первично осуществялется BIOS’ом в соответствии с архитектурой процессора. После её инициализирует операционная система для дополнения этой таблицы какими-либо своими прерываниями.

Виды и примеры прерываний:

  • Аппаратные прерывания – с помощью специального контроллера прерываний.
  • Нажатие на кнопку
  • Заполнение памяти сетевой карты
  • И тд.
  • Программные прерывания (системные вызовы) – вызывается самой программой для вызова того или иного прерывания.
  • Открытие/закрытие файла
  • Прерывания таймера – для реализации планировщика ОС
  • Исключение
  • Разного рода ошибки

Как приложения взаимодействуют с ОС?

Взаимодействие процессов с ОС осуществляется с помощью системных вызовов.

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

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

Схема организации ОС расширяется добавлением интерфейса для взаимодействия приложений с ядром ОС — механизмом системных вызовов:

-5

Как оборудование взаимодействует с ОС?

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

Что это значит?

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

ОС должка выполнять одни и те же операции над разными типами устройств. И чтобы она выполняла их однообразно — нужно чтобы был общий интерфейс. Реализацией этого общего интерфейса занимаются специальные программы - драйверы устройств. То есть, ОС обращается к драйверам устройств используя однотипные команды «отправить команду/считать/записать», а драйвера уже превращает эти команды в то, что понимает конкретное устройство.

Схема организации ОС расширяется добавлением интерфейса взаимодействия ОС и оборудования - специальные программы «драйвера»:

-6

Сервисы ОС

Функции ОС заключены в её сервисах (модулях). Реализация организации которых зависит от архитектуры ядра. Рассмотрим на примере монолитного ядра:

-7

Основные

  • Управление процессами (Process scheduler - планировщик)
  • Запуск (помещение на процессор, выделение процессорного времени)
  • Приостановка (заморозка)
  • Завершение
  • Изменение приоритета
  • Межпроцессное взаимодействие (IPC - Inter Process Communication)
  • Общая память для нескольких процессов (shared memory)
  • Способы обмена данными через те или иные механизмы (file, pipe, signals)
  • Сетевое взаимодействие
  • Механизмы предотвращения коллизий и синхронизации (семафоры, мьютексы)
  • Управление памятью (Memory manager)
  • Динамическое выделение памяти (Memory allocation)
  • Создание иллюзии уникальности адресного пространства для каждого процесса
  • Механизм виртуальной памяти

Дополнительные

  • Файловая система (File system)
  • Файлы и их содержимое
  • Каталоги и директории
  • Доступ к оборудованию и управление им
  • Прерывания
  • Драйвера
  • Модель безопасности
  • Пользователи («юзеры») и их группы
  • Права доступа
  • Разное
  • Интерфейс ввода-вывода (I/O Interface)
  • Сетевой интерфейс (Network Interface)

Основные абстракции

Процесс

Процесс — совокупность инструкций и данных, что находятся в оперативной памяти и обрабатываются процессором. Другими словами - исполнение программы в целом (не путать с потоком исполнения).

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

Состояние (контекст) процесса

С внешней стороны, процесс можно описать следующим:

  • Состояние
  • Состояние памяти
  • Содержимое регистров процессора
  • Адрестное пространство — у каждого процесса своё.
  • Состояние исполнения — то, исполняется ли этот процесс на процессоре в данный момент или ожидает чего-либо.
  • CPU - величина использовния процессорного времени.

Изнутри, процесс можно условно разделена на четыре части: Stack, Heap (кучу), Text (код) и данные (Data).

-8

Состояния исполнения

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

Общая картина выглядит так:

-9

Информация о процессе

Вся информация о процессе содержится в специальной структуре данных, поддерживаемой операционной системой для каждого процесса – PCB (Process Control Block) - Блок управления процессов.

-10

Информацию о процессах в целом, ОС хранит в специальной таблице процессов.

Поток

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

Поток выполнения (нить, thread) — последовательность исполнения инструкций. Ход исполнения программы**.

Процесс является контейнером ресурсов(адресное пространство, процессорное время и тд), а поток – последовательность инструкций, которые исполняются внутри этого контейнера.

-11

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

Чем хороши потоки

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

Файл

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

А файловая система — это система имён. То есть возможность выделять те или иные объекты данных и присваивать им имена, а также выделять иерархию.

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

Реализация многозадачности

Осуществляется при помощи следующих механизмов:

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

Переключение контекста

Контекст процесса — это состояние регистров, при его выполнении на процессоре.

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

При переключений контекста возникает три важных вопроса:

  1. Как?
  2. Когда?
  3. Между кем и кем?

Как?

  1. Значения регистров процесса записываются в Stack этого же процесса в оперативной памяти. Таким образом, процесс в своей памяти хранит свой же контекст.
  2. Контекст планировщика появляется на процессоре, выполняет анализ имеющихся процессов.
  3. Переключает процессор на контекст уже другого, нового процесса.

В целом, смена контекста происходит между состояниями «Готов», «Ожидает» и «Исполняется».

-12

Критические секции и блокировки

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

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

-13

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

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

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

Deadlock - взаимная блокировка

Из-за блокировки, захвата ресурса может возникнуть другая проблема: Deadlock - взаимная блокировка.

-14

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

Итог

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

Основные механизмы (сервисы)

Рассмотрели основные механизмы реализации этой цели: Scheduler (планировщик), Inter Process Communication (межпроцессное взаимодействие), Memory manager (управление памятью) и другие.

Абстракции

Ряд абстракций, которые вводит ОС: Process (процесс), Thread (поток исполнения), File (файл).