- •Раздел 1. Операционная система unix. Введение в операционную систему unix
- •Отличительные черты ос unix
- •Основы архитектуры операционной системы unix Модель системы unix.
- •Структура ядра ос unix.
- •Основы файловой системы ос unix
- •Типы файлов
- •Структура файловой системы unix
- •Владельцы файлов
- •Права доступа к файлу
- •Дополнительные атрибуты файлов
- •Устройства
- •Маска создания файла
- •Программы Oc unix
- •Процессы ос unix
- •Типы процессов
- •Атрибуты процесса
- •Процесс создания и запуска программ
- •Системный вызов завершения процесса exit
- •Системные функции типа exec
- •Обработка ошибок
- •Ограничения для процессов
- •Пользователи системы, Атрибуты пользователя
- •Средства ВзаимодействиЯ между процессАми
- •Сигналы
- •Посылка сигналов.
- •Int raise (int sig); // посылает сигнал вызывающему процессу (т.Е. Самому себе).
- •Обработка сигналов.
- •Набор сигналов.
- •Файловая подсистема ос unix
- •Индексный дескриптор
- •Блоки хранения данных
- •Недостатки и ограничения файловой системы s5fs
- •Файловая система ffs (Fast File System)
- •Основные отличия ffs от s5fs
- •Ограничения ffs
- •Каталоги ffs
- •Раздел 2. Взаимодействие процессов. Процесс, Понятие и классификация
- •Ресурсы, Понятие и классификация
- •Взаимодействие процессов Задача взаимного исключения
- •Integer очередь;
- •ОБобщенная задача взаимного исключения
- •Integer очередь;
- •Синхронизирующие примитивы (семафоры)
- •Процесс 1 :
- •Процесс 2 :
- •V(свободно);
- •Задача “производитель-потребитель” применение ОбщиХ семафорОв
- •Задача “производитель-потребитель” (буфер ограниченНый)
- •Взаимодействие через переменные состояния
- •Integer array желание[1:n], сп[1:n];
- •Integer чпб, бб, рб, чсеб, I;
- •Integer разм_п, n, max, nmax;
- •Проблема тупиков
- •Алгоритм банкира
- •Integer Св_Деньги; boolean Безопасно;
- •If ((Завершение_под_сомнением [I]) and
- •Применение алгоритма банкира
- •V(Взаимн_искл);
- •V(Возвращенные_Талеры[Номер_Клиента[m]]);
- •If (Попытка_выдать_талер_клиенту(h))
- •Монитороподобные средства синхронизации
- •Механизм типа «критическая область»
- •Механизм типа «условная критическая область»
- •Var s : semaphore; считывание : boolean; m : t;
- •Раздел 3. Вычислительные структуры. Машины, управляемые контроллерами (устройствами управления)
- •Усовершенствованная структура вычислительной машины, управляемой контроллерОм
- •Системы с операционным конвейером
- •Мультипроцессорные системы
- •Транспьютеры
- •Распределение памяти в транспьютерах
- •Диспетчеризация процессов
- •Организация ВводА / выводА в транспьютере.
- •Гарвардская архитектура на примере процессоров семейства adsp
Взаимодействие процессов Задача взаимного исключения
Если двум или более процессам необходимо взаимодействовать друг с другом, то они должны быть связаны, то есть иметь средства для обмена информацией. Предполагается, что процессы связаны слабо. Под этим подразумевается, что кроме достаточно редких моментов явной связи эти процессы рассматриваются как совершенно независимые друг от друга. В частности, не допускаются, какие либо предположения об относительных скоростях различных процессов.
В качестве примера рассматривается два процесса, каждый из которых представляет собой некоторую циклическую последовательность выполняемых действий. В каждом цикле выполнения процесса существует критический интервал. Критический в том смысле, что в любой момент времени только один процесс может находиться внутри своего критического интервала. Чтобы осуществить такое взаимное исключение, оба процесса имеют доступ к некоторому числу общих переменных. Операции проверки текущего значения такой общей переменной и присваивания нового значения общей переменной рассматриваются как неделимые. То есть, если два процесса одновременно присваивают новое значение одной и той же общей переменной, то присваивания происходят друг за другом и окончательное значение переменной равно одному из присвоенных значений, но никак не их какой-нибудь смеси. Если процесс проверяет значение переменной одновременно с присваиванием ей значения другим процессом, то первый процесс обнаруживает либо старое, либо новое значение, но никак не их смесь.
Первый подход к решению задачи взаимного исключения:
begin
Integer очередь;
oчередь : = 1;
parbegin
процесс1: begin
L1 : if(очередь=2)then goto L1;
критический интервал 1;
очередь : = 2;
остаток цикла 1;
goto L1;
end;
процесс2: begin
L2 : if(очередь=1)then goto L2;
критический интервал 2;
очередь : = 1;
остаток цикла 2;
goto L2;
end;
parend;
end.
Значение общей переменной ‘очередь’ показывает, какой из процессов первым пройдет и закончит свой критический интервал. Предполагается, что процесс в критическом интервале зависнуть не может.
Недостатки такой организации взаимодействия:
- строгая очерёдность вхождения в критический интервал;
- остановка любого из процессов в остатке цикла приводит к остановке и другого процесса.
Был предложен второй способ решения:
begin integer С1,С2;
С1 := 1;С2 := 1;
parbegin
процесс 1: begin
L1: if (С2 = 0) then goto L1;
С1 := 0;
критический интервал 1;
С1 := 1;
остаток цикла 1;
goto L1;
end;
процесс 2: begin
L2: if (С1 = 1) then goto L2;
С2 := 0;
критический интервал 2;
С2 := 1;
остаток цикла 2;
goto L2;
end;
parend;
end;
Здесь используются две целочисленные переменные С1 и С2 соответственно для 1-го и 2-го процессов. Если какая-то из переменных равна нулю, значит, соответствующий процесс находится в своём критическом интервале, иначе – вне критического интервала.
Недостаток:
при одновременном начале работы процессы могут повиснуть, то есть одновременно попасть в критические интервалы, что может привести к потере данных и т.п.
Предложен третий вариант:
begin integer С1,С2;
С1 := 1;С2 := 1;
parbegin
процесс 1: begin
А1: С1 := 0;
L1: if (С2 = 0) then goto L1;
критический интервал 1;
С1 := 1;
остаток цикла 1;
goto А1;
end;
процесс 2: begin
А2: С2 := 0;
L2: if (С1 = 0) then goto L2;
критический интервал 2;
С2 := 1;
остаток цикла 2;
goto А2;
end;
parend;
end;
В данном варианте возможна ситуация, когда при одновременном начале работы процессы не смогут войти в критический интервал. Решение вопроса о том, кому первому войти в интервал, откладывается до бесконечности.
4-ый вариант:
begin integer С1,С2;
С1 := 1;С2 := 1;
parbegin
процесс 1:
begin
L1: С1 := 0;
if (С2 = 0) then
begin
C1 := 1;
goto L1;
end;
критический интервал 1;
С1 := 1;
остаток цикла 1;
goto L1;
end;
процесс 2:
begin
L2: С2 := 0;
if (С1 = 0) then
begin
C2 := 1;
goto L2;
end;
критический интервал 2;
С2 := 1;
остаток цикла 2;
goto L2;
end;
parend;
end;
Наиболее корректный вариант №5.
begin integer С1,С2,очередь;
С1 := 1; С2 := 1; очередь := 1;
parbegin
процесс 1:
begin
А1: С1 := 0;
L1: if (С2 = 0) then
begin
if (очередь = 1) then goto L1;
C1 := 1;
B1: if (очередь = 2) then goto B1;
goto А1;
end;
критический интервал 1;
очередь := 2;
С1 := 1;
остаток цикла 1;
goto А1;
end;
процесс 2:
begin
А2: С2 := 0;
L2: if (С1 = 0) then
begin
if (очередь = 2) then goto L2;
C2 := 1;
B2: if (очередь = 1) then goto B2;
goto А2;
end;
критический интервал 2;
очередь := 1;
С2 := 1;
остаток цикла 2;
goto А2;
end;
parend;
end;
Здесь C1 и C2 используются для того, чтобы предотвратить одновременное вхождение процессов в критический интервал. Переменная ‘очередь’ задействуется тогда, когда необходимо решить, какому из процессов первому войти в свой критический интервал.
Для проверки корректности решения задачи взаимного исключения необходимо доказать три положения:
Решение безопасно в том смысле, что два процесса никогда не могут одновременно оказаться в своих критических интервалах;
В случае сомнения, кому из двух процессов первому войти в критический интервал, выяснение этого вопроса не откладывается до бесконечности;
Остановка какого-либо из процессов вне критического интервала (в остатке цикла) не вызывает блокировки другого процесса.