- •Лекция №2. Операционные системы реального времени
- •Историческая справка
- •Настоящее время
- •Общие сведения об ос
- •Модель клиент-сервер
- •Объектная модель
- •Симметричная мультипроцессорная обработка
- •Процессы и потоки
- •Что такое процесс?
- •Что такое поток?
- •Многозадачность и мультипроцессорная обработка
- •Многопоточность
- •Облегченные потоки
- •Планирование:
- •Синхронизация
- •Немного теории
- •Необходимые требования к операционной системе реального времени для обеспечения предсказуемости
Синхронизация
При работе параллельного приложения его потокам часто требуется способ связи друг с другом для координации своих действий. Пример такой связи — передача данных через каналы. Однако простейшей формой связи является синхронизация (synchronization).Синхронизация означает способность потока добровольно приостанавливать свое исполнение и ожидать, пока не завершится выполнение некоторой операции другим потоком.
В приведенном выше примере с компилятором препроцессор считывает исходный код на С и помещает результаты его обработки в буфер памяти, который он использует совместно с компилятором. Последний принимает результаты препроцессора в качестве исходных данных, выполняет компиляцию и генерирует объектный код. После запуска программы поток компилятора должен ждать, пока поток препроцессора поместит что-либо в буфер, и лишь затем читать данные. Аналогично, когда весь буфер заполнен, препроцессор должен ждать, пока компилятор не выберет данные из буфера, прежде чем записывать туда новую информацию.
Все ОС, поддерживающие многозадачность или мультипроцессорную обработку, должны предоставлять потокам способ ожидания того, что другой поток что-либо сделает: например, освободит накопитель на магнитной ленте или закончит запись в совместно используемый буфер памяти. ОС должна также дать потоку возможность сообщить другим потокам об окончании выполнения операции. Получив такое уведомление, ожидающий поток может продолжить выполнение.
Средства ожидания и сообщения реализованы в исполнительной системе NTкак часть объектной архитектуры.Синхронизационные объекты (synchronization objects) —это объекты исполнительной системы, при помощи которых поток синхронизирует свое выполнение. К их числу относятся следующие объекты:
Процесс
Поток
Файл
Событие
Пара событий
Семафор
Таймер
Мутант *
Первые три из перечисленных выше объектов выполняют и другие функции, в то время как последние пять существуют исключительно для поддержки синхронизации. При помощи этих объектов исполнительной системы потоки могут координировать свое выполнение с разнообразными происшествиями в системе, используя различные правила для различных ситуаций.
В любой момент времени синхронизационный объект находится в одном из двух состояний: свободен (signaled state)либозанят (nonsignaled state). Состояние "свободен" определено по-разному для разных объектов. Объект-поток находится в состоянии "занят" все время существования, но устанавливается системой в состояние "свободен", когда его выполнение завершается. Аналогично, ядро устанавливает процесс в состояние "свободен", когда завершается его последний поток. В противоположность этому, объект-таймер "срабатывает" через заданное время (по истечении этого времени ядро устанавливает объект-таймер в состояние "свободен").
Для синхронизации с объектом поток вызывает один из системных сер-висов ожидания, предоставляемых диспетчером объектов, и передает описатель данного объекта. Поток может ждать один или несколько объектов, а также задать отмену ожидания, если оно не закончилось за некоторый промежуток времени. Всякий раз, когда ядро устанавливает объект в состояние "свободен", оно проверяет, есть ли потоки, ожидающие этот объект. Если такие потоки есть, то ядро выводит один или несколько из них из состояния ожидания, и они могут продолжить выполнение.
При выборе механизма синхронизации следует учитывать правила, управляющие поведением различных синхронизационных объектов. Закончится ли ожидание потока, когда объект, у которого он ждет, будет переведен в состояние "свободен", зависит от типа объекта, как показано в табл.2—1.
Таблица 2-1. Определения состояния "свободен"
В большинстве случаев, когда объект устанавливается в состояние "свободен", все ожидающие потоки немедленно освобождаются. Например, объект-событие используется для оповещения о том, что произошло некоторое событие. Когда объект-событие устанавливается в состояние "свободен", все ожидающие его потоки освобождаются. Исключением является поток, ожидающий одновременно более одного объекта; такому потоку, возможно, потребуется продолжать ожидание до тех пор, пока и остальные объекты не станут" свободными.