
In/out (специальное пространство ввода/вывода)
Достоинства: упрощается программная организация.
Как организовать программное взаимодействие с устройствами ввода/вывода?
Циклический опрос
Недостатки: неэффективное использование шины ЦП.
Прерывания
Использование DMA (Direct Memory Access)
В задачу контроллера прямого доступа входит передача блока памяти из контроллера внешнего устройства по заданному адресу физической памяти. Эти контроллеры сами обрабатывают прерывания, выполняют захват системной шины и передачу данных, а затем уведомляют ЦП по прерыванию о завершении ввода/вывода.
Архитектура ПО ввода/вывода
Система обработки прерываний должна быть скрыта как можно глубже в недрах ОС.
Драйверы блокируют своё исполнение, ожидая исполнения операции при помощи объектов ядра типа семафоров или мьютексов. Драйверы выполняют обработку запросов с уровня пользователей или прерываний и имеют возможность доступа к регистрам контроллеров внешних устройств.
В ОС имеется независимый от устройств слой «системы буферизации», типичными функциями которого являются буферизация, обеспечение независимого размера блоков, защита, общий интерфейс к драйверам устройств и именование, распределение/освобождение устройств, уведомление об ошибках. Т.е. этот уровень подготавливает специальным образом (единообразно) блоки для передачи запросов драйверам (и получения ответа).
Системные вызовы (OpenFile, CreateFile, WriteFile)
Библиотечная функция (RTL). В любом языке программирования имеется поддержка функций библиотеки времени исполнения RunTimeLibrary (printf, scanf и т.д.). Функции библиотеки RTL используют функции вызовов интерфейсов прикладного программирования API. В C++ функции потокового вывода <<, >> основаны на printf, scanf.
Можно сократить размер файла, работая напрямую с вызовами API (если, например, использовать функции ввода/вывода API, не подлинковывая соответствующие функции RTL (scanf, printf)).
Файловая система
Файловая Система – часть ОС, назначение которой – обеспечить удобный интерфейс для работы с данными, хранящимися на дисках. Файлы – именованный набор данных.
Файл может идентифицироваться по имени. Обычно файлы могут иметь одинаковые имена. Уникальность файла определяется составным именем, включающим символьные имена каталогов. Файл может идентифицироваться уникальным дескриптором (если файловая система представлена в виде сети, тогда файл может находиться в нескольких каталогах сразу).
Типы файлов:
Файлы, ассоциированные с устройствами ввода/вывода
Каталоги
Существует 2 способа управления правами доступа:
Избирательный
Мандатный
Логическая и физическая организация файлов
Каталоги файлов хранят атрибуты файла и прочую информацию о нём.
Наполнение файла – логическая организация файла:
Последовательность байт
Последовательность блоков переменной длины
Упорядоченная или неупорядоченная последовательность ключей
Физическая организация:
Последовательность блоков (непрерывное размещение)
+ : простота
– : фрагментация
Связанный список блоков
+ : простота механизма
– : 1) большое время доступа (все блоки нужно последовательно перебрать)
2) информация о следующем блоке является частью блока
Связанный список индексов (File Allocation Table – FAT)
+ : быстродействие (достигается тем, что все таблицы находятся в памяти)
– : повреждение FAT приводит к повреждению ОС
Непосредственное перечисление блоков
13 полей описывают размер файла. Если размер не умещается в 10 блоков, то следующее поле указывает адрес следующих 256 блоков. Почти такая же организация присуща NTFS.
Лекция №17
Распределенные вычисления
Модель распределенных систем/процессов
Процессы – последовательные, работающие параллельно, обменивающиеся друг с другом информацией посредством сообщений.
Существует 2 ограничения:
Время доставки сообщения существенно
Необходимо учитывать отказы (корректная работа одного процесса не должна зависеть от отказа других процессов, с которыми он работает)
Классификационные признаки:
Тип топологии коммуникаций:
Связность
Полносвязный (коммуникационный граф)
Неполносвязный
Ориентированность
Ориентированный (по одному “линку” отправляет, по другому принимает)
Неориентированный
Синхронность (наличие реального времени, времени, замеренного реальными часами)
Асинхронные (в таких моделях не делается никаких предположений о способах измерения времени)
Использующие таймеры (в таких моделях делаются предположения о верхних границах времени доставки сообщений, а таймер измеряет реальное время)
Использующие часы (каждый процесс имеет измеритель времени, и показания этих измерителей расходятся не более чем на заданную погрешность. Использование часов позволяет сократить число передаваемых сообщений. Имеется специальный класс алгоритмов, которые позволяют строить систему на базе таймеров и часов)
Полностью синхронные модели (в таких моделях вычисления похожи на многопроцессорные системы с использованием циклов)
Отказы
Отказы линков
Потеря связности коммуникационного графа
Потеря сообщения
Отказы процессов
Византийский отказ (отказ процесса не влияет на несвязанные с ним линии, возможно любое поведение отказавшего процесса. Общий метод борьбы с византийским отказом – использование цифровой подписи)
Отказ-пропуск (поврежденный процесс не может посылать некоторые сообщения. Моделирует процесс перезагрузки системы)
Отказ-остановка (отказавший процесс не может послать никакие сообщения. Имитирует крах системы обнаруживаемый или необнаруживаемый)
Буферизация
Ограниченная
С ожиданием освобождения буфера
Со сбоем и специальным сообщением при переполнении
Неограниченная
С произвольным порядком
FIFO (очередь. На физическом уровне всегда гарантирована FIFO буферизация. Существуют специальные алгоритмы, которые восстанавливают порядок сообщений)
Лекция №18
Другие модели распределенных вычислений:
CSP (модель Хоара, взаимодействующие последовательные процессы)
Рандеву
RPC (удаленный вызов процедур)
Рассмотрим следующие модели:
Глобальное распределение переменных
Ранняя модель параллельных вычислений. Операция чтения/записи состоит из двух сообщений: запроса и ответа. Для реализации такой модели требуется разместить переменную в процессе. Тогда каждая операция чтения/записи потребует посылки двух сообщений (запрос/прием и передача/подтверждение записи). Такая реализация не является отказоустойчивой. Отказоустойчивая реализация требует наличия нескольких копий переменной, а значит и большее количество пересылаемых сообщений.
Локальное распределение переменных
Для каждой переменной определяется “владение процессом”: только процесс, владеющий переменной, может изменять ее значение. Остальные процессы только читают переменные. Чтение переменной отказавшего процесса предполагает возврат предопределенного значения (признака ошибки).
CSP – взаимодействующие последовательные процессы (модель Хоара)
Синхронизация мониторами (Java).
Определены 2 специальные команды: ! ?
i : j ! Y – в этой модели процесс i выполняет команду вывода значения Y, процесс j выполняет команду j ! Y. В свою очередь, процесс j считывает значение, переданное i в переменную X, выполняя команду i ? X. Причем обе команды выполняются одновременно.
Использовалась в транспьютерах фирмы InMos (MK, соединяемые друг с другом в матрицу).
В настоящее время используется для верификации:
P ↔ j ! v | P – алгебраическая форма записи.
Во многих распределенных алгоритмах требуется чтобы процесс мог взаимодействовать с несколькими соседями, а фактически взаимодействовал только с одним.
Рассмотрим следующий граф взаимодействий процессов:
В
А
С
В таком графе каждый процесс может взаимодействовать с каждым, однако, фактически выполняется только одно какое-то взаимодействие. А принятие решения какое именно, требует сложного распределенного алгоритма.
Данной проблемы можно избежать, если ввести ограничение: процесс, готовый выполнить операцию вывода, не может ожидать других взаимодействий, но по-прежнему процесс может ждать на любом количестве операций ввода. Однако такая реализация не является отказоустойчивой, т.к. процесс, ожидающий операцию вывода с отказавшим процессом, тоже приходит к отказу.
Произвольная модель «Рандеву» (в языке Ada). (WaitforMultipleObject, delegateThread).
4) RPC-удаленный вызов процедуры.
В модели RPC вызов выполняется в одном процессе, исполнение в другом.
DCOM (Microsoft), RMI(Java), CORBA
Впервые описаны в 1980г.
Основные алгоритмы
Алгоритм с разделяемыми переменными:
– Задачи взаимного исключения:
Задача «о критической секции» (1965), Дейкстра
Задача «обедающие философы», Дейкстра
Иллюстрирует пользу семафоров (философ не приступает к столу, если оба его соседа едят).
Задача «писатели-читатели»
– Задача о кооперации
Задача “Поставщик-Потребитель”
Маркирование графа (сети Петри)
– Смешанные задачи
Алгоритмы достижения соглашения
– «Задача о двух генералах»
Два генерала должны договориться между собой о времени общей атаки на неприятеля (поодиночке им его не одолеть), для чего должны использовать единственный доступный им способ передачи сообщений – посылать гонцов.
Решения задача не имеет. При наличии коммуникационного отказа, соглашение о времени атаки невозможно (ненадежная связь, линк).
– Выбор общего значения
На входах всех процессов находятся некоторые числа, по завершении алгоритма на выходе всех неотказавших процессов должно быть одно и то же число. Число – 1/3.
– Одновременное действие («о стрелках»)
– Синхронизация часов
– Распределенная транзакция
Имеется несколько процессов. Если все процессы согласны завершить транзакцию, то она завершится, иначе, если хотя бы один не согласен, происходит откат.