
- •Основные понятия и концепции ос
- •Классификация ос
- •Управление процессами
- •Операции над процессом
- •13092012 Лекция 2
- •Алгоритмы планирования
- •Средства взаимодействия и синхронизации процессов
- •Синхронизация процессов
- •20092012 Лекция 3 Взаимоблокировки
- •Ликвидация взаимоблокировок
- •Неделимые транзакции
- •04102012 Лекция 4 Архитектура и управление процессами в ос семейства Windows
- •11102012 Лекция 5 Синхронизация потоков
- •Архитектура и процессы unix
- •Управление процессами
- •Создание новых процессов
- •18102012 Лекция 6 Межпроцессное взаимодействие
- •Файловая система
- •Структуризация файлов
- •25102012 Лекция 7 Адресация доступа к файлам
- •Операции над файлами
- •Обобщенная модель файловой системы
- •Отображаемые в память файлы
- •Современная архитектура файловых систем
- •Файловые системы Windows
- •01112012 Лекция 8 Файловая система fat
- •Файловая система ntfs
- •081112 Лекция 9
- •Файловые системы unix Традиционная фс s5
- •Виртуальная фс vfs (Virtual File System)
- •Монтирование файловых систем vfs
- •15112012 Лекция 10 Управление вводом/выводом
- •Драйверы устройств
- •Система ввода/вывода unix
- •29112012 Лекция 11 Подсистема ввода/вывода Windows
- •06122012 Лекция 12 Основные процедуры драйверов устройств
- •Процедуры обслуживания прерывания isr (interrupt Service Routine)
- •Дерево устройств
- •Диспетчер электропитания
- •13122012 Лекция 13 Основные требования ос
- •Множественные прикладные среды
- •Способы построения множественных прикладных сред
- •Реализация множества прикладных средств в Windows системах
Средства взаимодействия и синхронизации процессов
Категории обмена информации:
Сигнальный - передается минимальное количество данных, используется для извещения о наступлении события. Степень воздействия на поведение процессов получателя – минимальна.
Канальные средства – взаимодействие происходит через линии связи, предоставленные ОС. Объем данных зависит от пропускной способности линий связи. Степень воздействия на получателя прямо пропорционально количеству получаемой информации.
Разделяемая память – это область АП, выделенная ОС для совместного использования. Наиболее быстрый способ
При установлении связи различают разные способы адресации:
Прямая адресация – взаимодействующие процессы непосредственно обращаются друг к другу, явно указывая имя или номер процесса, устанавливается автоматически. Может быть симметричной (если оба указывают имена или номера) и асимметричной (когда один процесс явно указывает имя партнера, а другой рассматривает в этом качестве любой процесс системы).
Непрямая адресация – данные помещаются в промежуточный объект хранения, имеющий свой адрес. Здесь необходимо знать только объекты хранения, файлы.
Количество процессов, которое может быть одновременно ассоциировано с конкретным средством связи, называется валентностью этого средства связи. При прямой адресации – в основном валентность 1-2, а при непрямой – больше.
Связь может быть однонаправленной (симплексной) и двунаправленной (дуплексной), а так же полудуплексной. Адресация не имеет отношения к типу связи.
Синхронизация процессов
Часть программы, в которой осуществляется доступ к разделяемому ресурсу, называется критической секцией. Для исключения «эффекта гонок» по отношению к ресурсу, необходимо, что бы в каждый момент времени к критической секции, связанной с этим ресурсом, находился только один процесс (взаимное исключение).
С каждым ресурсом связывается двоичная переменная, принимающая значения 1 – если ресурс свободен, и 0 – если занят.
Алгоритм работы секции
К высоко уровненным средствам синхронизации относятся семафоры.
Семафор (S) - это неотрицательная целая переменная, над которой возможны два вида операций.
P(S) – уменьшает S на единицу, если это возможно. Если нет – то процесс, вызвавший P-операцию ждёт пока не сможет уменьшить S.
V(S) – увеличивает S на единицу одним неделимым действием.
Когда семафор S принимает значение только 0 или 1, он превращается в блокирующую переменную.
Пример:
Буферный пул состоит из N буферов, по одной записи в каждом. Используется процесс-писатель и процесс-читатель.
Семафора:
e – число пустых буферов
f – число заполненных буферов
b – организация взаимного исключения
int N =256;
int e=N, f=0, b=1;
void Writer() //процесс-писатель
{
while(1)
{
PrepareNextRecord();
P(e); //уменьшить число свободных
P(b); //войти в секцию
AddToBuffer();
V(b); //выйти из секции
V(f); //увеличить число заполненных
}
}
void Read()//процесс-читатель
{
while(1)
{
P(f); //уменьшить число занятых
P(b); //войти в секцию
GetFromBuffer();
V(b); //выйти из секции
V(e); //увеличить число свободных
ProcessRecord();
}
}
Типовые ситуации в использовании семафоров:
Взаимное исключение на семафоре – используется двоичный семафор с начальным значением 1. Критические секции кодов всех процессов-участников начинаются с операцией P(S), заканчиваются V(S).
Синхронизация на семафоре – используется двоичный семафор с начальным значением 0 (событие ещё не наступило). Процесс, анализирующий наступление события, выполняет операцию V(S), процесс ожидающий наступление события – P(S). Если наступление события ожидают несколько процессов, то каждый из них, выполнив операцию P(S), должен так же выполнить операцию V(S).
Семафор как счётчик ресурсов. Для контроля N единиц ресурсов используется семафор S с начальным значением N. Выделение ресурсов сопровождается операцией P(S), освобождение – V(S).