
- •Понятие и классификация ос
- •Основные задачи:
- •Эволюция ос
- •Основные понятия и концепции ос
- •Классификация ос
- •По особенности алгоритма управления ресурсом.
- •По особенностям аппаратных платформ.
- •По особенностям методов построения.
- •Управление процессами
- •Операции над процессами.
- •Алгоритмы планирования
- •2 Группы алгоритмов планирования
- •Потоки (Thread)
- •Средства взаимодействия и синхронизация процессов
- •Семафоры
- •Типовые ситуации с использованием s-ов.
- •Взаимное исключение на семафоре:
- •Синхронизация на семафоре:
- •Семафор как счетчик ресурсов:
- •Взаимоблокировки
- •Неделимые транзакции
- •Архитектура и управление процессами в ос семейства Windows
- •В каждой Windows системе выполняются процессы:
- •Процесс windows состоит из:
- •Синхронизация потоков
- •Для связи между процессами используются:
- •Архитектура процессов Unix.
- •Управление процессами.
- •Создание новых процессов.
- •Межпроцессное взаимодействие.
- •Файловая система
- •Функции файловой системы:
- •Типы файлов:
- •Структуризация фалов
- •Адресация и доступ к файлам
- •Размещение в виде связанного списка блоков дисковой памяти.
- •Использования связанного списка индексов.
- •Операции над файлом
- •Обобщённая модель файловой системы.
- •Отображаемые в память файлы.
- •Современная архитектура файловой системы.
- •Файловые системы windows.
- •Файловая система Fat.
- •Структура разделов под fat
- •Структура каталога ntfs
Семафоры
Семафоры – неотрицательная целая переменная, над которой возможно два вида операций:
Р(s) – уменьшает s на 1, если это возможно, если нет – то процесс, вызвавший P-операцию, ждёт пока не сможет уменьшить s.
V(s) – увеличение s на 1 одним неделимым действием.
Когда семафор s принимает значения только 0 и 1, он превращается в блокирующую переменную.
Пример: буферный pull состоит из N буферов по одной записи в каждой. Используется процесс писатель (заполняет буфер) и процесс читатель (освобождает буфер, считывая из него запись).
Используются 2 семафора:
e – число пустых буферов.
f - число записанных буферов.
+ 1 двоичный семафор: b – для организации взаимного исключения.
Int N=256;
Semophore e, f, b;
e=N; f=0; b=1; // все буферы пусты, разрешено действие
void Writer()
{
while (1)
{
PrepareNextRecord();
P(e); // уменьшаем число свободных буферов
P(b); //входим в критичную секцию
AddToBuffer();
V(b); // выйти из секции
V(f); // увеличить число записанных буферов }
}
void Reader() {
while (1)
{
P(f); // уменьшаем число записаных буферов
P(b); //входим в критичную секцию
GetFindBuffer();
V(b); // выйти из секции
V(e); // увеличить число свободных буферов
PrepareRecord(); }
}
Типовые ситуации с использованием s-ов.
Взаимное исключение на семафоре:
Используется двоичный семафор с начальным значением 1. Критические секции кода всех процессов участников начинаются с операции P(s) и заканчиваются V(s).
Синхронизация на семафоре:
Используется двоичный семафор с начальным значением 0 (событие еще не наступило). Процесс, сигнализирующий о наступлении события, выполняет операцию V(s), а процесс, ожидающий наступления события , выполняет операцию P(s).
Если наступления события ожидают несколько процессов, то каждый из них, выполнив P(s), должен выполнить V(s).
Семафор как счетчик ресурсов:
Для контроля N единиц ресурса используется семафор с начальным значением N. Выделение ресурса сопровождается операцией P(s), а освобождение V(s).
Монитор – класс организующий работу с семафором.
Взаимоблокировки
Для возникновения взаимоблокировок в системе должны выполняться
4 условия:
Условие взаимного исключения
Каждый ресурс в каждый момент времени отдан ровно одному процессу и недоступен.
Условие удерживания и ожидания
Процесс, в данный момент удерживающий полученные ресурсы, может запрашивать новые ресурсы.
Условие отсутствия принудительной выгрузки ресурсов.
Условие циклического ожидания
Должна существовать последовательность из 2-х или более процессов, каждый из которых ждет доступа к ресурсу, удерживающим другим членом последовательности.
Взаимоблокировки моделируются при помощи направленных графов.
При наличии ресурсов разного типа используется матричный метод обнаружения взаимоблокировок.
Пусть имеются:
множество процессов P={P1,P2,…,Pn}, где n – число процессов;
множество ресурсов E={E1,E2,..,Em}, где m – число классов ресурсов;
вектор доступных ресурсов A = {A1,A2,…,Am}, Ai ≤Ei, i=1..m;
матрица текущего распределения ресурсов С={Cij, где i=1..n, j=1..m}, где Cij – количество ресурсов j-того класса, что занимает процесс Pi;
Матрица требуемых или запрашиваемых ресурсов R={Rij, где i=1..n, j=1..m}.
Справедливо m-соотношений по ресурсам:
+Aj
= Ej,
где j=1..m
В исходном состоянии все процесс не маркированы (не отмечены).
Алгоритм обнаружения взаимоблокировки
1 шаг. Ищется процесс Pi, для которого i-ая строка матрицы R меньше вектора A. Ri ≤ Ai и/или r ij ≤ Ai, где j =1..m.
2 шаг. Если Pi найден (процессу доступны все ресурсы, может завершить работу), он маркируется и i-ая строка матрицы С добавляется к вектору A:
Aj=Aj+Cij, где j=1..m
(освобождение своих ресурсов) Далее: переход на шаг 1.
3 шаг. Если новых процессов не найдено, ио наличие оставшихся не маркированных процессов указывает на наличие взаимоблокировки.
Взаимоблокировки могут проверяться:
Когда запрашивается очередной ресурс;
Через определенные промежутки времени или при низкой загрузке процессора.
Ликвидация взаимоблокировок:
Принудительная выгрузка ресурсов.
Восстановление через откат.
Процессы периодически создают контрольные точки, позволяющие перезапустить их.
Уничтожение одного или более процессов.