- •Понятие операционной системы (ос). Основные функции ос.
- •Сервисы, предоставляемые типичными ос. Основные этапы развития ос.
- •Классификация ос: по назначению, по режиму обработки задач, по способу взаимодействия с пользователем. Компоненты типичной ос.
- •Типы структур ос. Режимы работы ос. Понятие операционной и программной среды.
- •Системный таймер. Программные таймеры. Сторожевой таймер.
- •Утилиты. Понятие транслятора, компилятора, интерпретатора, ассемблера, дизассемблера, компоновщика, отладчика.
- •Преимущества многозадачного режима работы ос. Понятие процесса. Основные причины создания, завершения процессов в вычислительной системе (вс).
- •Модели процесса: с двумя состояниями, с пятью состояниями.
- •Описание процессов: атрибуты, управляющий блок (дескриптор). Действия ос при создании, переключении процессов.
- •Подходы к разработке кода ос по отношению к процессам.
- •Понятие потока. Сравнение процессов и потоков. Понятие, преимущества многопоточности.
- •Способы реализации потоков: в пространстве пользователя, в пространстве ядра, смешанная. Кратко
- •Подробно
- •Виды планирования процессов (потоков). Краткосрочное планирование: режимы решения, стратегии.
- •Стратегии распределения ресурсов вс: одноочередные, многоочередные.
- •Основные режимы работы вс.
- •Основные категории ресурсов ос. Типы доступа к ресурсам ос.
- •Понятие взаимной блокировки (тупика). Примеры, условия возникновения, обнаружение, предупреждение взаимоблокировок.
- •Понятие параллельных, последовательных процессов (потоков). Виды взаимодействия процессов (потоков). Проблемы взаимодействия параллельных процессов (потоков). Пример состояния гонок.
- •Понятие взаимного исключения, критического ресурса, критической секции. Проблемы, условия, способы взаимного исключения.
- •Механизмы взаимодействия процессов (потоков): очереди сообщений, разделяемая память, обмен сообщениями, сокеты.
- •Понятие семафора. Решение задачи взаимоисключения с использованием семафора. Понятие сигнализирующего семафора, мьютекса, монитора.
- •Проблема читателей-писателей
- •Вторая проблема читателей-писателей (приоритет писателя)
- •Третья проблема читателей-писателей (честное распределение ресурсов)
- •Понятие памяти. Функции подсистемы управления памятью. Типы адресов. Понятие виртуального адресного пространства (вап). Типы структур вап. Способы преобразования виртуальных адресов в физические.
- •Механизмы распределения памяти: разделами, свопинг, виртуальная память.
- •Механизмы распределения памяти: страничный.
- •Механизмы распределения памяти: сегментный, сегментностраничный.
- •Принципы организации подсистемы ввода-вывода. Способы реализации ввода-вывода. Уровни подсистемы ввода-вывода.
- •Понятие файловой системы (фс), файла. Функции фс.
- •Физическая организация фс, файла. Логическая организация фс.
- •Свойства безопасной информационной системы. Понятие угрозы, атаки, риска. Классификация угроз. Функции ос по защите данных.
- •Современне ос. Тенденции, перспективы развития современных ос.
Механизмы взаимодействия процессов (потоков): очереди сообщений, разделяемая память, обмен сообщениями, сокеты.
Очереди. Эти механизмы могут обеспечить передачу или использование общих данных без перемещения данных, а с передачей элемента очереди, содержащего указатель данных и объем массива данных. Очередь используется вместе с механизмом общей памяти.
Создающий процесс может выполнять следующие действия над очередью:
• создание очереди;
• просмотр очереди;
• закрытие очереди.
Записывающий процесс осуществляет действия:
• открыть очередь;
• записать в очередь;
• закрыть очередь.
Разделяемая память позволяет процессам иметь общие области виртуальной памяти. Единицей разделяемой памяти являются сегменты, свойства которых зависят от аппаратных особенностей управления памятью.
Этот способ обеспечивает наиболее быстрый обмен данными между процессами.
Использование общей или разделяемой памяти заключается в создании специальной области памяти, позволяющей иметь к ней доступ нескольким процессам. Системные вызовы для работы с разделяемой памятью.
Существует несколько способов обмена сообщениями между процессами:
– Синхронный обмен сообщениями: процесс отправляет сообщение другому процессу и ждет, пока тот не ответит.
– Асинхронный обмен сообщениями: процесс отправляет сообщение и продолжает свою работу, не дожидаясь ответа.
– Использование разделяемой памяти: процессы могут совместно использовать общую область памяти для обмена данными.
– Использование очередей сообщений: процессы помещают сообщения в общую очередь, откуда другие процессы могут их забирать.
Выбор способа обмена сообщениями зависит от конкретной задачи и требований к производительности системы.
Сокеты. Сокет — это средство связи, позволяющее разрабатывать клиент-серверные системы для локального или сетевого использования.
Представляют собой интерфейс транспортного уровня. Используются для передачи данных по сети от одного процесса к другому.
Представляют собой клиент-серверную архитектуру. На сервере создается сокет, привязывается к какому-то порту, находится в цикле ожидания (слушает) и когда появляется новое подключение он просыпается.
Используется не только для обмена по сети, но и для обмена на одном устройстве.
Понятие семафора. Решение задачи взаимоисключения с использованием семафора. Понятие сигнализирующего семафора, мьютекса, монитора.
Семафоры являются механизмами передачи сообщений от одного потока к другому о наступлении некоторого события. Семафоры бывают системной и оперативной памяти. Процессы, использующие семафоры оперативной памяти, должны иметь доступ к соответствующему сегменту памяти. Если семафор свободен, то он захватывается вызывающим его процессом, если семафор занят, то вызывающий его поток в режиме ожидания освобождения семафора или ожидает истечения времени.
Управление семафором реализуется с помощью функций:
• установки семафора с целью сигнализации;
• ожидание вызывающим потоком, пока семафор не будет выключен;
• ожидание потоком выключения одного из нескольких семафоров.
Сигнализирующий семафор - это объект синхронизации, который позволяет контролировать доступ к общему ресурсу между несколькими потоками или процессами. Когда один поток хочет получить доступ к ресурсу, он блокирует семафор. Когда ресурс освобождается, семафор разблокируется, и другой поток, ожидающий на семафоре, может продолжить работу.
Мьютекс (от англ. mutual exclusion — «взаимное исключение») — это примитив синхронизации, который предоставляет механизм взаимного исключения. Мьютекс позволяет только одному потоку находиться в критической секции кода одновременно. Если поток пытается войти в критическую секцию, когда другой поток уже находится там, он блокируется до тех пор, пока другой поток не выйдет из критической секции.
Создается мьютекс вызовом функции CreateMutex, которая имеет следующий прототип:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // атрибуты защиты
BOOL bInitialOwner, // начальный владелец мьютекса
LPCTSTR lpName // имя мьютекса
);
В случае удачного завершения функция CreateMutex возвращает дескриптор созданного мьютекса. В случае неудачи эта функция возвращает значение NULL. Если мьютекс с заданным именем уже существует, то функция CreateMutex возвращает дескриптор этого мьютекса, а функция GetLastError, вызванная после функции CreateMutex вернет значение ERROR_ALREADY_EXISTS.
Монитор — это механизм синхронизации, который обеспечивает доступ к разделяемым данным между потоками. Монитор предоставляет набор процедур и данных, которые могут быть использованы только одним потоком одновременно. Когда поток хочет войти в монитор, он блокируется, если другой поток уже работает внутри монитора. Когда поток выходит из монитора, остальные потоки разблокируются и могут продолжить работу.
Классические проблемы взаимодействия процессов (потоков): производителей и потребителей, читателей и писателей, обедающих философов, спящего парикмахера, железнодорожного перегона.
Проблема производитель-потребитель
Производитель и потребитель — это два отдельных процесса. Оба процесса совместно используют общий буфер или очередь. Производитель постоянно производит определенные данные и помещает их в буфер, тогда как потребитель потребляет эти данные из буфера. Проблема производитель-потребитель возникает из-за разницы в скорости производства и потребления.
Давайте рассмотрим диаграмму, показывающую этот простой сценарий:
По своей сути, эта проблема имеет определенные сложности для решения :
И производитель, и потребитель могут попытаться обновить очередь одновременно. Это может привести к потере данных или несоответствиям.
Производители могут быть медленнее, чем потребители. В таких случаях потребитель будет быстро обрабатывать элементы и ждать.
В некоторых случаях потребитель может быть медленнее производителя. Эта ситуация приводит к проблеме переполнения очереди.
В реальных сценариях у нас может быть несколько производителей, несколько потребителей или и то, и другое. Это может привести к тому, что одно и то же сообщение будет обрабатываться разными потребителями.
На диаграмме ниже показан случай с несколькими производителями и несколькими потребителями:
Программа для решения проблемы “производитель-потребитель” может работать следующим образом:
Процессы-производители создают данные и помещают их в общую очередь.
Процессы-потребители считывают данные из очереди и обрабатывают их.
Для синхронизации доступа к общей очереди используются блокировки или семафоры, чтобы предотвратить переполнение очереди или потерю данных.
Если очередь переполнена, процессы-производители блокируются до тех пор, пока другой процесс не освободит место в очереди.
Если очередь пуста, процессы-потребители блокируются до тех пор, пока процесс-производитель не добавит новые данные в очередь.