- •Основы файловой системы unix
- •Типы файлов
- •Структура файловой системы unix
- •Владельцы файлов
- •Права доступа к файлу
- •Дополнительные атрибуты файлов
- •1 Установить обязательное блокирование файлов при выполнении
- •Устройства
- •Процессы unix
- •Vhand диспетчер страничного замещения
- •Создание и управление процессами
- •Системные функции типа exec
- •Системный вызов _exit
- •Взаимодействие процессов посредством каналов
- •Сигналы
- •Обработка ошибок
- •Пользователи системы, Атрибуты пользователя
- •Форматы исполняемых файлов
- •Файлы отображаемые в памяти
- •Метаданные файла
- •Индексные дескрипторы
- •Имена файлов
- •Недостатки и ограничения файловой системы s5fs
- •Файловая система ffs (Fast File System)
- •Каталоги ffs
- •Сравнение процессов может быть произведено с использованием понятия "трасса" порядок и длительность пребывания процесса в допустимых состояниях на интервале существования.
- •Ресурсы, Понятие и классификация
- •Решение №1.
- •Сообщенная задача взаимного исключения
- •Синхронизирующие примитивы
- •V(свободно);
- •Взаимодействие через переменные состояния
- •Пример применения приоритетного правила
- •Проблема тупиков
- •Алгоритм банкира
- •Основными вопросами при решении такой задачи являются:
- •Применение алгоритма банкира
- •Основные направления совершенствования структуры
- •Системы с параллельным выполнением операций. Параллельные процессы.
- •Схемы типа окмд
- •Особенности организации процессоров по принципу окмд (одиночный поток команд – множественный поток данных)
- •Мультипроцессорные системы
- •Транспьютеры
- •Центральный процессор
- •Распределение памяти в транспьютерах
- •Диспетчеризация процессов
- •Ввод / вывод
Взаимодействие через переменные состояния
Исходные данные:
-
Можно определять и формировать исходные процессы
-
Процессы могут связываться друг с другом через общие переменные
-
Имеются средства синхронизации
Замечания:
-
При взаимодействии процессов могут возникать решения, которые касаются более чем одного процесса. Не всегда очевидно, какое решение будет принято. Если не найден какой-то руководящий принцип (например, критерии эффективности), то с целью определённости нужно установить некоторые ограничения.
-
Если разрабатываются реально работающие системы, то требуется убедиться в корректности решения. При параллельном программировании использование проверяющих тестов затруднено, поэтому вопросы проверки правильности решения должны рассматриваться в самых начальных этапах проектирования системы.
Пример применения приоритетного правила
Рассматриваются производители, которые выдают порции информации различного размера и размер порции выражается в некоторых единицах. Потребитель обрабатывает последовательные порции из буфера и умеет обрабатывать порции, размер которых заранее не задан. Максимальный размер порции известен. Максимальный размер буфера определён в единицах информации, а не в количестве порций. Размер буфера не менее максимального размера порции информации. Вопрос о возможности размещения в буфере определенной выработанной порции зависит от размера этой порции.
Если имеется более одного производителя и какой-то из них ждет из-за отсутствия достаточного места в буфере, то другие производители могут продолжать работу и достигнуть точки, когда они желают выдать выработанную порцию информации в буфер.
При принятии решения, кому первому поместить информацию в буфер, формируется требование: производитель, предлагающий большую порцию, имеет больший приоритет. Если порции равны, то не имеет значения, кто добавит информацию первым.
Дано: N производителей; M потребителей; RB размер буфера.
begin
integer array желание[1:N], СП[1:N];
integer ЧПБ, ББ, РБ, ЧСЕБ, i;
for цикл:=1 step 1 until N do begin
желание[i]:=0;
СП[i]:=0;
end;
ЧПБ:=0; ЧСЕБ:=RB;
ББ:=0; РБ:=1;
parbegin
производитель 1: begin ... end;
. . . . . . . . . . . . . . . .
производитель n: begin integer РП;
цикл n: производство новой порции и установка размера порции в РП;
P(РБ);
if ((ББ=0) and (ЧСЕБ>=РП)) then
ЧСЕБ:=ЧСЕБ-РП
else
begin
ББ:=ББ+1;
желание[n]:=РП;
V(РБ);
P(СП[n]);
P(РБ);
end;
добавление порции к буферу;
V(РБ);
V(ЧПБ);
goto цикл n;
end;
... ... ...
производитель N: begin ... end;
потребитель 1: begin ... end;
... ... ...
потребитель m: begin
integer РП, i, max, nmax;
цикл m: P(ЧПБ);
P(РБ);
взятие порции из буфера и установка РП;
ЧСЕБ:=ЧСЕБ+РП;
проверка: if ББ>0 then
begin
max:=0;
for i:=1 step 1 until N do
begin
if max<желание[i] then
begin
max:=желание[i];
nmax:=i;
end
end;
if max=<ЧСЕБ then
begin
ЧСЕБ:=ЧСЕБ-max;
желание[nmax]:=0;
ББ:=ББ-1;
V(СП[nmax]);
goto проверка;
end;
end;
V(РБ);
обработка взятой порции;
goto цикл m;
end;
Для решения задачи вводится переменная состояния для каждого производителя “желание”, обозначающая число единиц информации в буфере, необходимых для размещения порции, которая в текущий момент не может быть добавлена к буферу. Если для процесса-производителя эта переменная равна нулю, то производитель не имеет неудовлетворённых требований на добавление порций.
Для каждого производителя вводится двоичный семафор СемПр.
Для буфера вводится двоичный семафор РБ (работа с буфером), предназначенный для взаимного исключения при работе с буфером в широком смысле, т.е. не только взятие и добавление, но также проверка и модификация связанных с буфером переходных состояний.
Как только в буфер добавляется новая порция, она может быть обработана, т.к. безразлично, кто из потребителей её возьмёт, то для определения этого может быть использован общий семафор ЧПБ (число порций в буфере). О свободных областях в буфере производителям сообщается через целочисленную переменную состояния ЧСЕБ (число свободных единиц в буфере). Введена целочисленная переменная ББ (блокировка буфера), значение которой определяет, сколько производителей имеют желание добавить порцию в буфер.