- •Средства синхронизации и взаимодействия процессов
- •Способы реализации взаимного исключения
- •Управление памятью
- •Типы адресов
- •Алгоритмы распределения памяти
- •I) Методы без использования внешней памяти Однозадачная система без подкачки на диск
- •Распределение памяти с фиксированными разделами
- •Распределение памяти динамическими разделами
- •Распределение памяти перемещаемыми разделами
- •II) Методы с использованием внешней памяти Свопинг и виртуальная память
- •Кэширование данных
- •Способы отображения оперативной памяти на кэш
- •Управление вводОм-выводом в операционных системах
- •Задачи ос по управлению файлами и устройствами
- •Организация параллельной работы устройств ввода-вывода и процессора
- •Согласование скоростей обмена и кэширование данных
- •Разделение устройств и данных между процессами
- •Удобный логический интерфейс
- •Поддержка широкого спектра драйверов
- •Динамическая загрузка и выгрузка драйверов
- •Поддержка нескольких файловых систем
- •Поддержка синхронных и асинхронных операций ввода-вывода
- •Многослойная модель подсистемы ввода-вывода
- •Менеджеры ввода-вывода
- •Многоуровневые драйверы
- •Специальные файлы
- •Файловая система
- •Имена файлов
- •Типы файлов
- •Атрибуты файлов
- •Иерархическая структура файловой системы
- •Общая модель файловой системы
- •Классификация файловых систем
- •Наиболее распространенные файловые системы
Средства синхронизации и взаимодействия процессов
В многозадачной операционной системе при взаимодействии процессов друг с другом, при обмене данными между потоками, возникает проблема синхронизации. Она необходима для исключения таких явлений, как гонки и тупики.
Пример: программа печати файлов.
Процессы-клиенты читают переменную NEXT, записывают имя своего файла и наращивают значение NEXT на единицу. Предположим, что в некоторый момент процесс R решил распечатать свой файл, для этого он прочитал значение переменной NEXT, но поместить имя файла не успел, так как его выполнение было прервано (вследствие исчерпания кванта). Очередной процесс S, желающий распечатать файл, прочитал то же самое значение переменной NEXT, поместил имя своего файла. Когда в очередной раз управление будет передано процессу R, то он, запишет имя файла поверх имени файла процесса S. Таким образом, процесс S никогда не увидит свой файл распечатанным.
Подобная ситуация, когда 2 и более процесса обрабатывают разделяемые данные и результат зависит от соотношения скоростей процессов, называется гонками.
Критическая секция – это часть программы, в которой осуществляется доступ к разделяемым данным.
Правило для избежания конфликтов (взаимное исключение) – необходимо обеспечить, чтобы в каждый момент времени в критической секции, связанной с разделяемым ресурсом, находился только один процесс.
Способы реализации взаимного исключения
1) Позволить процессу, находящемуся в критической секции, запрещать все прерывания.
Недостаток: это аналогично не вытесняющему режиму.
2) Использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение “1” – если ресурс свободен, и “0” – если ресурс занят. Перед входом в критическую секцию процесс проверяет значение переменной. Если оно равно “0”, то проверка циклически повторяется, если ресурс свободен, то значение переменной устанавливается в “0” и процесс входит в критическую секцию.
Недостаток: операция проверки и установки блокирующей переменной должна быть неделимой. В течение времени, когда один процесс находится в критической секции, другой процесс, которому требуется тот же ресурс, будет выполнять рутинные действия по опросу блокирующей переменной.
3) Аппарат событий. Используются системные функции:
WAIT(x), где x – идентификатор некоторого события
POST(x)
Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(x) – это ожидание освобождения ресурса x. Эта функция переводит активный процесс в состояние ожидания и делает пометку в его дескрипторе о том, что процесс ожидает события x.
Процесс, который в это время использует ресурс x, после выхода из критической секции выполняет системную функцию POST(x), в результате чего операционная система просматривает очередь ожидающих процессов и переводит процессы, ожидающие события x, в состояние готовность.
Тупики
Пример:
Процесс 1 Процесс 2
|
…………………………. |
||
---|---|---|---|
|
получить доступ к диску С: |
||
|
получить доступ к принтеру |
||
|
…………………………. |
||
|
|
||
|
|
||
|
|
||
|
|
…………………………. |
получить доступ к принтеру |
получить доступ к диску С: |
…………………………. |
Пусть двум процессам, выполняющимся в режиме мультизадачности, для выполнения их работы нужно два ресурса, например, принтер и диск. Допустим, процесс 1 занял принтер (установил блокирующую переменную), после этого он был прерван. Управление получил процесс 2, который сначала занял диск, но при выполнении следующей команды был заблокирован, так как принтер оказался уже занятым процессом 1. Управление снова получил процесс 1, который в соответствии со своей программой сделал попытку занять диск, и был заблокирован: диск уже распределен процессу 2. В таком положении процессы 1 и 2 могут находиться сколь угодно долго, и возникает неразрешимая ситуация – тупик.
Способы борьбы с тупиками:
1) Предотвращение или предупреждение образования тупиков. Например, путем обеспечения обхода устройства в одном и том же порядке каждым процессом.
2) Динамическое устранение тупиков. Создается таблица общих ресурсов с указанием процессов их использующих.
3) Контрольные точки. Состояние операционной системы сохраняется в контрольных точках и при возникновении тупика действия повторяются заново.